// 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  S1378C5_nt  {
  int s1378c5f0[2];
  void  mf1378c5(); // _ZN10S1378C5_nt8mf1378c5Ev
};
//SIG(-1 S1378C5_nt) C1{ m Fi[2]}


void  S1378C5_nt ::mf1378c5(){}

//skip512 S1378C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1378C4_nt  {
  int s1378c4f0;
  __tsi64 s1378c4f1;
  void *s1378c4f2[4];
  int s1378c4f3[2];
  void *s1378c4f4;
  ::S1378C5_nt s1378c4f5;
  void *s1378c4f6[2];
  virtual  ~S1378C4_nt(); // _ZN10S1378C4_ntD1Ev
  virtual void  v3(); // _ZN10S1378C4_nt2v3Ev
  virtual void  v4(); // _ZN10S1378C4_nt2v4Ev
  virtual void  v5(); // _ZN10S1378C4_nt2v5Ev
  virtual void  v6(); // _ZN10S1378C4_nt2v6Ev
  virtual void  v7(); // _ZN10S1378C4_nt2v7Ev
  virtual void  v8(); // _ZN10S1378C4_nt2v8Ev
  virtual void  v9(); // _ZN10S1378C4_nt2v9Ev
  virtual void  v10(); // _ZN10S1378C4_nt3v10Ev
  virtual void  v11(); // _ZN10S1378C4_nt3v11Ev
  virtual void  v12(); // _ZN10S1378C4_nt3v12Ev
  virtual void  v13(); // _ZN10S1378C4_nt3v13Ev
  virtual void  v14(); // _ZN10S1378C4_nt3v14Ev
  virtual void  v15(); // _ZN10S1378C4_nt3v15Ev
  virtual void  v16(); // _ZN10S1378C4_nt3v16Ev
  virtual void  v17(); // _ZN10S1378C4_nt3v17Ev
  virtual void  v18(); // _ZN10S1378C4_nt3v18Ev
  virtual void  v19(); // _ZN10S1378C4_nt3v19Ev
  virtual void  v20(); // _ZN10S1378C4_nt3v20Ev
  virtual void  v21(); // _ZN10S1378C4_nt3v21Ev
  virtual void  v22(); // _ZN10S1378C4_nt3v22Ev
  virtual void  v23(); // _ZN10S1378C4_nt3v23Ev
  virtual void  v24(); // _ZN10S1378C4_nt3v24Ev
  virtual void  v25(); // _ZN10S1378C4_nt3v25Ev
  virtual void  v26(); // _ZN10S1378C4_nt3v26Ev
  virtual void  v27(); // _ZN10S1378C4_nt3v27Ev
  virtual void  v28(); // _ZN10S1378C4_nt3v28Ev
  virtual void  v29(); // _ZN10S1378C4_nt3v29Ev
  virtual void  v30(); // _ZN10S1378C4_nt3v30Ev
  virtual void  v31(); // _ZN10S1378C4_nt3v31Ev
  virtual void  v32(); // _ZN10S1378C4_nt3v32Ev
  virtual void  v33(); // _ZN10S1378C4_nt3v33Ev
  virtual void  v34(); // _ZN10S1378C4_nt3v34Ev
  virtual void  v35(); // _ZN10S1378C4_nt3v35Ev
  virtual void  v36(); // _ZN10S1378C4_nt3v36Ev
  virtual void  v37(); // _ZN10S1378C4_nt3v37Ev
  virtual void  v38(); // _ZN10S1378C4_nt3v38Ev
  virtual void  v39(); // _ZN10S1378C4_nt3v39Ev
  virtual void  v40(); // _ZN10S1378C4_nt3v40Ev
  virtual void  v41(); // _ZN10S1378C4_nt3v41Ev
  virtual void  v42(); // _ZN10S1378C4_nt3v42Ev
  virtual void  v43(); // _ZN10S1378C4_nt3v43Ev
  virtual void  v44(); // _ZN10S1378C4_nt3v44Ev
  virtual void  v45(); // _ZN10S1378C4_nt3v45Ev
  virtual void  v46(); // _ZN10S1378C4_nt3v46Ev
  virtual void  v47(); // _ZN10S1378C4_nt3v47Ev
  virtual void  v48(); // _ZN10S1378C4_nt3v48Ev
  virtual void  v49(); // _ZN10S1378C4_nt3v49Ev
  virtual void  v50(); // _ZN10S1378C4_nt3v50Ev
  virtual void  v51(); // _ZN10S1378C4_nt3v51Ev
  virtual void  v52(); // _ZN10S1378C4_nt3v52Ev
  virtual void  v53(); // _ZN10S1378C4_nt3v53Ev
  virtual void  v54(); // _ZN10S1378C4_nt3v54Ev
  virtual void  v55(); // _ZN10S1378C4_nt3v55Ev
  virtual void  v56(); // _ZN10S1378C4_nt3v56Ev
  virtual void  v57(); // _ZN10S1378C4_nt3v57Ev
  virtual void  v58(); // _ZN10S1378C4_nt3v58Ev
  virtual void  v59(); // _ZN10S1378C4_nt3v59Ev
  virtual void  v60(); // _ZN10S1378C4_nt3v60Ev
  virtual void  v61(); // _ZN10S1378C4_nt3v61Ev
  virtual void  v62(); // _ZN10S1378C4_nt3v62Ev
  virtual void  v63(); // _ZN10S1378C4_nt3v63Ev
  virtual void  v64(); // _ZN10S1378C4_nt3v64Ev
  virtual void  v65(); // _ZN10S1378C4_nt3v65Ev
  virtual void  v66(); // _ZN10S1378C4_nt3v66Ev
  S1378C4_nt(); // tgen
};
//SIG(-1 S1378C4_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]}


 S1378C4_nt ::~S1378C4_nt(){ note_dtor("S1378C4_nt", this);}
void  S1378C4_nt ::v3(){vfunc_called(this, "_ZN10S1378C4_nt2v3Ev");}
void  S1378C4_nt ::v4(){vfunc_called(this, "_ZN10S1378C4_nt2v4Ev");}
void  S1378C4_nt ::v5(){vfunc_called(this, "_ZN10S1378C4_nt2v5Ev");}
void  S1378C4_nt ::v6(){vfunc_called(this, "_ZN10S1378C4_nt2v6Ev");}
void  S1378C4_nt ::v7(){vfunc_called(this, "_ZN10S1378C4_nt2v7Ev");}
void  S1378C4_nt ::v8(){vfunc_called(this, "_ZN10S1378C4_nt2v8Ev");}
void  S1378C4_nt ::v9(){vfunc_called(this, "_ZN10S1378C4_nt2v9Ev");}
void  S1378C4_nt ::v10(){vfunc_called(this, "_ZN10S1378C4_nt3v10Ev");}
void  S1378C4_nt ::v11(){vfunc_called(this, "_ZN10S1378C4_nt3v11Ev");}
void  S1378C4_nt ::v12(){vfunc_called(this, "_ZN10S1378C4_nt3v12Ev");}
void  S1378C4_nt ::v13(){vfunc_called(this, "_ZN10S1378C4_nt3v13Ev");}
void  S1378C4_nt ::v14(){vfunc_called(this, "_ZN10S1378C4_nt3v14Ev");}
void  S1378C4_nt ::v15(){vfunc_called(this, "_ZN10S1378C4_nt3v15Ev");}
void  S1378C4_nt ::v16(){vfunc_called(this, "_ZN10S1378C4_nt3v16Ev");}
void  S1378C4_nt ::v17(){vfunc_called(this, "_ZN10S1378C4_nt3v17Ev");}
void  S1378C4_nt ::v18(){vfunc_called(this, "_ZN10S1378C4_nt3v18Ev");}
void  S1378C4_nt ::v19(){vfunc_called(this, "_ZN10S1378C4_nt3v19Ev");}
void  S1378C4_nt ::v20(){vfunc_called(this, "_ZN10S1378C4_nt3v20Ev");}
void  S1378C4_nt ::v21(){vfunc_called(this, "_ZN10S1378C4_nt3v21Ev");}
void  S1378C4_nt ::v22(){vfunc_called(this, "_ZN10S1378C4_nt3v22Ev");}
void  S1378C4_nt ::v23(){vfunc_called(this, "_ZN10S1378C4_nt3v23Ev");}
void  S1378C4_nt ::v24(){vfunc_called(this, "_ZN10S1378C4_nt3v24Ev");}
void  S1378C4_nt ::v25(){vfunc_called(this, "_ZN10S1378C4_nt3v25Ev");}
void  S1378C4_nt ::v26(){vfunc_called(this, "_ZN10S1378C4_nt3v26Ev");}
void  S1378C4_nt ::v27(){vfunc_called(this, "_ZN10S1378C4_nt3v27Ev");}
void  S1378C4_nt ::v28(){vfunc_called(this, "_ZN10S1378C4_nt3v28Ev");}
void  S1378C4_nt ::v29(){vfunc_called(this, "_ZN10S1378C4_nt3v29Ev");}
void  S1378C4_nt ::v30(){vfunc_called(this, "_ZN10S1378C4_nt3v30Ev");}
void  S1378C4_nt ::v31(){vfunc_called(this, "_ZN10S1378C4_nt3v31Ev");}
void  S1378C4_nt ::v32(){vfunc_called(this, "_ZN10S1378C4_nt3v32Ev");}
void  S1378C4_nt ::v33(){vfunc_called(this, "_ZN10S1378C4_nt3v33Ev");}
void  S1378C4_nt ::v34(){vfunc_called(this, "_ZN10S1378C4_nt3v34Ev");}
void  S1378C4_nt ::v35(){vfunc_called(this, "_ZN10S1378C4_nt3v35Ev");}
void  S1378C4_nt ::v36(){vfunc_called(this, "_ZN10S1378C4_nt3v36Ev");}
void  S1378C4_nt ::v37(){vfunc_called(this, "_ZN10S1378C4_nt3v37Ev");}
void  S1378C4_nt ::v38(){vfunc_called(this, "_ZN10S1378C4_nt3v38Ev");}
void  S1378C4_nt ::v39(){vfunc_called(this, "_ZN10S1378C4_nt3v39Ev");}
void  S1378C4_nt ::v40(){vfunc_called(this, "_ZN10S1378C4_nt3v40Ev");}
void  S1378C4_nt ::v41(){vfunc_called(this, "_ZN10S1378C4_nt3v41Ev");}
void  S1378C4_nt ::v42(){vfunc_called(this, "_ZN10S1378C4_nt3v42Ev");}
void  S1378C4_nt ::v43(){vfunc_called(this, "_ZN10S1378C4_nt3v43Ev");}
void  S1378C4_nt ::v44(){vfunc_called(this, "_ZN10S1378C4_nt3v44Ev");}
void  S1378C4_nt ::v45(){vfunc_called(this, "_ZN10S1378C4_nt3v45Ev");}
void  S1378C4_nt ::v46(){vfunc_called(this, "_ZN10S1378C4_nt3v46Ev");}
void  S1378C4_nt ::v47(){vfunc_called(this, "_ZN10S1378C4_nt3v47Ev");}
void  S1378C4_nt ::v48(){vfunc_called(this, "_ZN10S1378C4_nt3v48Ev");}
void  S1378C4_nt ::v49(){vfunc_called(this, "_ZN10S1378C4_nt3v49Ev");}
void  S1378C4_nt ::v50(){vfunc_called(this, "_ZN10S1378C4_nt3v50Ev");}
void  S1378C4_nt ::v51(){vfunc_called(this, "_ZN10S1378C4_nt3v51Ev");}
void  S1378C4_nt ::v52(){vfunc_called(this, "_ZN10S1378C4_nt3v52Ev");}
void  S1378C4_nt ::v53(){vfunc_called(this, "_ZN10S1378C4_nt3v53Ev");}
void  S1378C4_nt ::v54(){vfunc_called(this, "_ZN10S1378C4_nt3v54Ev");}
void  S1378C4_nt ::v55(){vfunc_called(this, "_ZN10S1378C4_nt3v55Ev");}
void  S1378C4_nt ::v56(){vfunc_called(this, "_ZN10S1378C4_nt3v56Ev");}
void  S1378C4_nt ::v57(){vfunc_called(this, "_ZN10S1378C4_nt3v57Ev");}
void  S1378C4_nt ::v58(){vfunc_called(this, "_ZN10S1378C4_nt3v58Ev");}
void  S1378C4_nt ::v59(){vfunc_called(this, "_ZN10S1378C4_nt3v59Ev");}
void  S1378C4_nt ::v60(){vfunc_called(this, "_ZN10S1378C4_nt3v60Ev");}
void  S1378C4_nt ::v61(){vfunc_called(this, "_ZN10S1378C4_nt3v61Ev");}
void  S1378C4_nt ::v62(){vfunc_called(this, "_ZN10S1378C4_nt3v62Ev");}
void  S1378C4_nt ::v63(){vfunc_called(this, "_ZN10S1378C4_nt3v63Ev");}
void  S1378C4_nt ::v64(){vfunc_called(this, "_ZN10S1378C4_nt3v64Ev");}
void  S1378C4_nt ::v65(){vfunc_called(this, "_ZN10S1378C4_nt3v65Ev");}
void  S1378C4_nt ::v66(){vfunc_called(this, "_ZN10S1378C4_nt3v66Ev");}
S1378C4_nt ::S1378C4_nt(){ note_ctor("S1378C4_nt", this);} // tgen

//skip512 S1378C4_nt

#else // __cplusplus

extern void _ZN10S1378C4_ntC1Ev();
extern void _ZN10S1378C4_ntD1Ev();
Name_Map name_map_S1378C4_nt[] = {
  NSPAIR(_ZN10S1378C4_ntC1Ev),
  NSPAIR(_ZN10S1378C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1378C4_nt[];
extern void _ZN10S1378C4_ntD1Ev();
extern void _ZN10S1378C4_ntD0Ev();
extern void _ZN10S1378C4_nt2v3Ev();
extern void _ZN10S1378C4_nt2v4Ev();
extern void _ZN10S1378C4_nt2v5Ev();
extern void _ZN10S1378C4_nt2v6Ev();
extern void _ZN10S1378C4_nt2v7Ev();
extern void _ZN10S1378C4_nt2v8Ev();
extern void _ZN10S1378C4_nt2v9Ev();
extern void _ZN10S1378C4_nt3v10Ev();
extern void _ZN10S1378C4_nt3v11Ev();
extern void _ZN10S1378C4_nt3v12Ev();
extern void _ZN10S1378C4_nt3v13Ev();
extern void _ZN10S1378C4_nt3v14Ev();
extern void _ZN10S1378C4_nt3v15Ev();
extern void _ZN10S1378C4_nt3v16Ev();
extern void _ZN10S1378C4_nt3v17Ev();
extern void _ZN10S1378C4_nt3v18Ev();
extern void _ZN10S1378C4_nt3v19Ev();
extern void _ZN10S1378C4_nt3v20Ev();
extern void _ZN10S1378C4_nt3v21Ev();
extern void _ZN10S1378C4_nt3v22Ev();
extern void _ZN10S1378C4_nt3v23Ev();
extern void _ZN10S1378C4_nt3v24Ev();
extern void _ZN10S1378C4_nt3v25Ev();
extern void _ZN10S1378C4_nt3v26Ev();
extern void _ZN10S1378C4_nt3v27Ev();
extern void _ZN10S1378C4_nt3v28Ev();
extern void _ZN10S1378C4_nt3v29Ev();
extern void _ZN10S1378C4_nt3v30Ev();
extern void _ZN10S1378C4_nt3v31Ev();
extern void _ZN10S1378C4_nt3v32Ev();
extern void _ZN10S1378C4_nt3v33Ev();
extern void _ZN10S1378C4_nt3v34Ev();
extern void _ZN10S1378C4_nt3v35Ev();
extern void _ZN10S1378C4_nt3v36Ev();
extern void _ZN10S1378C4_nt3v37Ev();
extern void _ZN10S1378C4_nt3v38Ev();
extern void _ZN10S1378C4_nt3v39Ev();
extern void _ZN10S1378C4_nt3v40Ev();
extern void _ZN10S1378C4_nt3v41Ev();
extern void _ZN10S1378C4_nt3v42Ev();
extern void _ZN10S1378C4_nt3v43Ev();
extern void _ZN10S1378C4_nt3v44Ev();
extern void _ZN10S1378C4_nt3v45Ev();
extern void _ZN10S1378C4_nt3v46Ev();
extern void _ZN10S1378C4_nt3v47Ev();
extern void _ZN10S1378C4_nt3v48Ev();
extern void _ZN10S1378C4_nt3v49Ev();
extern void _ZN10S1378C4_nt3v50Ev();
extern void _ZN10S1378C4_nt3v51Ev();
extern void _ZN10S1378C4_nt3v52Ev();
extern void _ZN10S1378C4_nt3v53Ev();
extern void _ZN10S1378C4_nt3v54Ev();
extern void _ZN10S1378C4_nt3v55Ev();
extern void _ZN10S1378C4_nt3v56Ev();
extern void _ZN10S1378C4_nt3v57Ev();
extern void _ZN10S1378C4_nt3v58Ev();
extern void _ZN10S1378C4_nt3v59Ev();
extern void _ZN10S1378C4_nt3v60Ev();
extern void _ZN10S1378C4_nt3v61Ev();
extern void _ZN10S1378C4_nt3v62Ev();
extern void _ZN10S1378C4_nt3v63Ev();
extern void _ZN10S1378C4_nt3v64Ev();
extern void _ZN10S1378C4_nt3v65Ev();
extern void _ZN10S1378C4_nt3v66Ev();
static  VTBL_ENTRY vtc_S1378C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1378C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S1378C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v66Ev,
};
extern VTBL_ENTRY _ZTI10S1378C4_nt[];
VTBL_ENTRY *P__ZTI10S1378C4_nt = _ZTI10S1378C4_nt; 
extern  VTBL_ENTRY _ZTV10S1378C4_nt[];
Class_Descriptor cd_S1378C4_nt = {  "S1378C4_nt", // class name
  0,0,//no base classes
  &(vtc_S1378C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI10S1378C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1378C4_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  S1378C8_nt  {
  void *s1378c8f0;
  int s1378c8f1[2];
  void  mf1378c8(); // _ZN10S1378C8_nt8mf1378c8Ev
};
//SIG(-1 S1378C8_nt) C1{ m Fp Fi[2]}


void  S1378C8_nt ::mf1378c8(){}

//skip512 S1378C8_nt

#else // __cplusplus

Class_Descriptor cd_S1378C8_nt = {  "S1378C8_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  S1378C7_nt  : S1378C8_nt {
};
//SIG(-1 S1378C7_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S1378C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S1378C8_nt;
static Base_Class bases_S1378C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1378C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1378C7_nt = {  "S1378C7_nt", // class name
  bases_S1378C7_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  S1378C6_nt  : S1378C7_nt {
};
//SIG(-1 S1378C6_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S1378C6_nt

#else // __cplusplus

extern Class_Descriptor cd_S1378C8_nt;
extern Class_Descriptor cd_S1378C7_nt;
static Base_Class bases_S1378C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1378C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1378C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S1378C9_nt  {
  int s1378c9f0;
  void  mf1378c9(); // _ZN10S1378C9_nt8mf1378c9Ev
};
//SIG(-1 S1378C9_nt) C1{ m Fi}


void  S1378C9_nt ::mf1378c9(){}

//skip512 S1378C9_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

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



static void Test_S1378C13()
{
  extern Class_Descriptor cd_S1378C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1378C13, buf);
    S1378C13 &lv = *(new (buf) S1378C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1378C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1378C13)");
    check_base_class_offset(lv, (S1378C8_nt*), 0, "S1378C13");
    test_class_info(&lv, &cd_S1378C13);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1378C13(Test_S1378C13, "S1378C13", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1378C8_nt;
static Base_Class bases_S1378C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1378C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1378C13 = {  "S1378C13", // class name
  bases_S1378C13, 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  S1378C12  : S1378C13 {
};
//SIG(-1 S1378C12) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1378C12()
{
  extern Class_Descriptor cd_S1378C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1378C12, buf);
    S1378C12 &lv = *(new (buf) S1378C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1378C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1378C12)");
    check_base_class_offset(lv, (S1378C8_nt*)(S1378C13*), 0, "S1378C12");
    check_base_class_offset(lv, (S1378C13*), 0, "S1378C12");
    test_class_info(&lv, &cd_S1378C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1378C12(Test_S1378C12, "S1378C12", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1378C8_nt;
extern Class_Descriptor cd_S1378C13;
static Base_Class bases_S1378C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1378C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1378C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1378C12 = {  "S1378C12", // class name
  bases_S1378C12, 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  S1378C14_nt  {
  int s1378c14f0[3];
  void  mf1378c14(); // _ZN11S1378C14_nt9mf1378c14Ev
};
//SIG(-1 S1378C14_nt) C1{ m Fi[3]}


void  S1378C14_nt ::mf1378c14(){}

//skip512 S1378C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S1378C19()
{
  extern Class_Descriptor cd_S1378C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1378C19, buf);
    S1378C19 &lv = *(new (buf) S1378C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1378C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1378C19)");
    check_base_class_offset(lv, (S1378C8_nt*), 0, "S1378C19");
    test_class_info(&lv, &cd_S1378C19);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1378C19(Test_S1378C19, "S1378C19", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1378C8_nt;
static Base_Class bases_S1378C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1378C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1378C19 = {  "S1378C19", // class name
  bases_S1378C19, 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  S1378C18  : S1378C19 {
};
//SIG(-1 S1378C18) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1378C18()
{
  extern Class_Descriptor cd_S1378C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1378C18, buf);
    S1378C18 &lv = *(new (buf) S1378C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1378C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1378C18)");
    check_base_class_offset(lv, (S1378C8_nt*)(S1378C19*), 0, "S1378C18");
    check_base_class_offset(lv, (S1378C19*), 0, "S1378C18");
    test_class_info(&lv, &cd_S1378C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1378C18(Test_S1378C18, "S1378C18", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1378C8_nt;
extern Class_Descriptor cd_S1378C19;
static Base_Class bases_S1378C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1378C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1378C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1378C18 = {  "S1378C18", // class name
  bases_S1378C18, 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  S1378C3_nt  : S1378C4_nt {
  ::S1378C6_nt s1378c3f0;
  ::S1378C6_nt s1378c3f1;
  ::S1378C9_nt s1378c3f2;
  int s1378c3f3;
  char s1378c3f4[4];
  void *s1378c3f5[2];
  ::S1378C6_nt s1378c3f6;
  unsigned int s1378c3f7:1;
  unsigned int s1378c3f8:1;
  unsigned int s1378c3f9:1;
  unsigned int s1378c3f10:1;
  unsigned int s1378c3f11:1;
  unsigned int s1378c3f12:1;
  unsigned int s1378c3f13:1;
  unsigned int s1378c3f14:1;
  unsigned int s1378c3f15:1;
  unsigned int s1378c3f16:1;
  unsigned int s1378c3f17:1;
  unsigned int s1378c3f18:1;
  unsigned int s1378c3f19:1;
  unsigned int s1378c3f20:1;
  unsigned int s1378c3f21:1;
  unsigned int s1378c3f22:1;
  unsigned int s1378c3f23:1;
  unsigned int s1378c3f24:1;
  unsigned int s1378c3f25:1;
  unsigned int s1378c3f26:1;
  unsigned int s1378c3f27:1;
  unsigned int s1378c3f28:1;
  unsigned int s1378c3f29:1;
  unsigned int s1378c3f30:1;
  unsigned int s1378c3f31:1;
  unsigned int s1378c3f32:1;
  unsigned int s1378c3f33:1;
  unsigned int s1378c3f34:1;
  unsigned int s1378c3f35:1;
  unsigned int s1378c3f36:1;
  unsigned int s1378c3f37:1;
  unsigned int s1378c3f38:1;
  unsigned int s1378c3f39:1;
  unsigned int s1378c3f40:1;
  unsigned int s1378c3f41:1;
  unsigned int s1378c3f42:1;
  unsigned int s1378c3f43:1;
  unsigned int s1378c3f44:1;
  unsigned int s1378c3f45:1;
  unsigned int s1378c3f46:1;
  unsigned int s1378c3f47:1;
  unsigned int s1378c3f48:1;
  unsigned int s1378c3f49:1;
  unsigned int s1378c3f50:1;
  unsigned int s1378c3f51:1;
  unsigned int s1378c3f52:1;
  unsigned int s1378c3f53:1;
  unsigned int s1378c3f54:1;
  unsigned int s1378c3f55:1;
  unsigned int s1378c3f56:1;
  unsigned int s1378c3f57:1;
  unsigned int s1378c3f58:1;
  unsigned int s1378c3f59:1;
  unsigned int s1378c3f60:1;
  unsigned int s1378c3f61:1;
  unsigned int s1378c3f62:1;
  unsigned int s1378c3f63:1;
  unsigned int s1378c3f64:1;
  unsigned int s1378c3f65:1;
  unsigned int s1378c3f66:1;
  unsigned int s1378c3f67:1;
  unsigned int s1378c3f68:1;
  unsigned int s1378c3f69:1;
  unsigned int s1378c3f70:1;
  unsigned int s1378c3f71:1;
  unsigned int s1378c3f72:1;
  unsigned int s1378c3f73:1;
  unsigned int s1378c3f74:1;
  unsigned int s1378c3f75:1;
  unsigned int s1378c3f76:1;
  unsigned int s1378c3f77:1;
  unsigned int s1378c3f78:1;
  unsigned int s1378c3f79:1;
  unsigned int s1378c3f80:1;
  unsigned int s1378c3f81:1;
  unsigned int s1378c3f82:1;
  unsigned int s1378c3f83:1;
  int s1378c3f84[5];
  void *s1378c3f85[2];
  int s1378c3f86[3];
  ::S1378C5_nt s1378c3f87;
  ::S1378C5_nt s1378c3f88;
  ::S1378C5_nt s1378c3f89;
  ::S1378C12 s1378c3f90;
  ::S1378C12 s1378c3f91;
  int s1378c3f92;
  void *s1378c3f93[2];
  ::S1378C14_nt s1378c3f94;
  ::S1378C14_nt s1378c3f95;
  ::S1378C14_nt s1378c3f96;
  ::S1378C14_nt s1378c3f97;
  void *s1378c3f98;
  ::S1378C5_nt s1378c3f99;
  ::S1378C12 s1378c3f100;
  ::S1378C14_nt s1378c3f101;
  ::S1378C14_nt s1378c3f102;
  int s1378c3f103;
  ::S1378C14_nt s1378c3f104;
  ::S1378C14_nt s1378c3f105;
  void *s1378c3f106;
  int s1378c3f107;
  char s1378c3f108;
  ::S1378C14_nt s1378c3f109;
  ::S1378C14_nt s1378c3f110;
  void *s1378c3f111;
  int s1378c3f112;
  void *s1378c3f113;
  ::S1378C12 s1378c3f114;
  ::S1378C18 s1378c3f115;
  ::S1378C18 s1378c3f116;
  virtual  ~S1378C3_nt(); // _ZN10S1378C3_ntD1Ev
  virtual void  v67(); // _ZN10S1378C3_nt3v67Ev
  virtual void  v68(); // _ZN10S1378C3_nt3v68Ev
  virtual void  v69(); // _ZN10S1378C3_nt3v69Ev
  virtual void  v70(); // _ZN10S1378C3_nt3v70Ev
  virtual void  v71(); // _ZN10S1378C3_nt3v71Ev
  virtual void  v72(); // _ZN10S1378C3_nt3v72Ev
  virtual void  v73(); // _ZN10S1378C3_nt3v73Ev
  virtual void  v74(); // _ZN10S1378C3_nt3v74Ev
  virtual void  v75(); // _ZN10S1378C3_nt3v75Ev
  virtual void  v76(); // _ZN10S1378C3_nt3v76Ev
  virtual void  v77(); // _ZN10S1378C3_nt3v77Ev
  virtual void  v78(); // _ZN10S1378C3_nt3v78Ev
  virtual void  v79(); // _ZN10S1378C3_nt3v79Ev
  virtual void  v80(); // _ZN10S1378C3_nt3v80Ev
  virtual void  v81(); // _ZN10S1378C3_nt3v81Ev
  virtual void  v82(); // _ZN10S1378C3_nt3v82Ev
  virtual void  v83(); // _ZN10S1378C3_nt3v83Ev
  virtual void  v84(); // _ZN10S1378C3_nt3v84Ev
  virtual void  v85(); // _ZN10S1378C3_nt3v85Ev
  virtual void  v86(); // _ZN10S1378C3_nt3v86Ev
  virtual void  v87(); // _ZN10S1378C3_nt3v87Ev
  virtual void  v88(); // _ZN10S1378C3_nt3v88Ev
  virtual void  v89(); // _ZN10S1378C3_nt3v89Ev
  virtual void  v90(); // _ZN10S1378C3_nt3v90Ev
  virtual void  v91(); // _ZN10S1378C3_nt3v91Ev
  virtual void  v92(); // _ZN10S1378C3_nt3v92Ev
  virtual void  v93(); // _ZN10S1378C3_nt3v93Ev
  virtual void  v94(); // _ZN10S1378C3_nt3v94Ev
  virtual void  v95(); // _ZN10S1378C3_nt3v95Ev
  virtual void  v96(); // _ZN10S1378C3_nt3v96Ev
  virtual void  v97(); // _ZN10S1378C3_nt3v97Ev
  virtual void  v98(); // _ZN10S1378C3_nt3v98Ev
  virtual void  v99(); // _ZN10S1378C3_nt3v99Ev
  virtual void  v100(); // _ZN10S1378C3_nt4v100Ev
  virtual void  v101(); // _ZN10S1378C3_nt4v101Ev
  virtual void  v102(); // _ZN10S1378C3_nt4v102Ev
  virtual void  v103(); // _ZN10S1378C3_nt4v103Ev
  virtual void  v104(); // _ZN10S1378C3_nt4v104Ev
  virtual void  v105(); // _ZN10S1378C3_nt4v105Ev
  virtual void  v106(); // _ZN10S1378C3_nt4v106Ev
  virtual void  v107(); // _ZN10S1378C3_nt4v107Ev
  virtual void  v108(); // _ZN10S1378C3_nt4v108Ev
  virtual void  v109(); // _ZN10S1378C3_nt4v109Ev
  virtual void  v110(); // _ZN10S1378C3_nt4v110Ev
  virtual void  v111(); // _ZN10S1378C3_nt4v111Ev
  virtual void  v112(); // _ZN10S1378C3_nt4v112Ev
  virtual void  v113(); // _ZN10S1378C3_nt4v113Ev
  virtual void  v114(); // _ZN10S1378C3_nt4v114Ev
  virtual void  v115(); // _ZN10S1378C3_nt4v115Ev
  virtual void  v116(); // _ZN10S1378C3_nt4v116Ev
  virtual void  v117(); // _ZN10S1378C3_nt4v117Ev
  virtual void  v118(); // _ZN10S1378C3_nt4v118Ev
  virtual void  v119(); // _ZN10S1378C3_nt4v119Ev
  virtual void  v120(); // _ZN10S1378C3_nt4v120Ev
  virtual void  v121(); // _ZN10S1378C3_nt4v121Ev
  virtual void  v122(); // _ZN10S1378C3_nt4v122Ev
  virtual void  v123(); // _ZN10S1378C3_nt4v123Ev
  virtual void  v124(); // _ZN10S1378C3_nt4v124Ev
  virtual void  v125(); // _ZN10S1378C3_nt4v125Ev
  virtual void  v126(); // _ZN10S1378C3_nt4v126Ev
  virtual void  v127(); // _ZN10S1378C3_nt4v127Ev
  virtual void  v128(); // _ZN10S1378C3_nt4v128Ev
  virtual void  v129(); // _ZN10S1378C3_nt4v129Ev
  virtual void  v130(); // _ZN10S1378C3_nt4v130Ev
  virtual void  v131(); // _ZN10S1378C3_nt4v131Ev
  virtual void  v132(); // _ZN10S1378C3_nt4v132Ev
  virtual void  v133(); // _ZN10S1378C3_nt4v133Ev
  virtual void  v134(); // _ZN10S1378C3_nt4v134Ev
  virtual void  v135(); // _ZN10S1378C3_nt4v135Ev
  virtual void  v136(); // _ZN10S1378C3_nt4v136Ev
  virtual void  v137(); // _ZN10S1378C3_nt4v137Ev
  virtual void  v138(); // _ZN10S1378C3_nt4v138Ev
  virtual void  v139(); // _ZN10S1378C3_nt4v139Ev
  virtual void  v140(); // _ZN10S1378C3_nt4v140Ev
  virtual void  v141(); // _ZN10S1378C3_nt4v141Ev
  virtual void  v142(); // _ZN10S1378C3_nt4v142Ev
  virtual void  v143(); // _ZN10S1378C3_nt4v143Ev
  virtual void  v144(); // _ZN10S1378C3_nt4v144Ev
  virtual void  v145(); // _ZN10S1378C3_nt4v145Ev
  virtual void  v146(); // _ZN10S1378C3_nt4v146Ev
  virtual void  v147(); // _ZN10S1378C3_nt4v147Ev
  virtual void  v148(); // _ZN10S1378C3_nt4v148Ev
  virtual void  v149(); // _ZN10S1378C3_nt4v149Ev
  virtual void  v150(); // _ZN10S1378C3_nt4v150Ev
  virtual void  v151(); // _ZN10S1378C3_nt4v151Ev
  virtual void  v152(); // _ZN10S1378C3_nt4v152Ev
  virtual void  v153(); // _ZN10S1378C3_nt4v153Ev
  virtual void  v154(); // _ZN10S1378C3_nt4v154Ev
  virtual void  v155(); // _ZN10S1378C3_nt4v155Ev
  virtual void  v156(); // _ZN10S1378C3_nt4v156Ev
  virtual void  v157(); // _ZN10S1378C3_nt4v157Ev
  virtual void  v158(); // _ZN10S1378C3_nt4v158Ev
  virtual void  v159(); // _ZN10S1378C3_nt4v159Ev
  virtual void  v160(); // _ZN10S1378C3_nt4v160Ev
  virtual void  v161(); // _ZN10S1378C3_nt4v161Ev
  virtual void  v162(); // _ZN10S1378C3_nt4v162Ev
  virtual void  v163(); // _ZN10S1378C3_nt4v163Ev
  virtual void  v164(); // _ZN10S1378C3_nt4v164Ev
  virtual void  v165(); // _ZN10S1378C3_nt4v165Ev
  virtual void  v166(); // _ZN10S1378C3_nt4v166Ev
  virtual void  v167(); // _ZN10S1378C3_nt4v167Ev
  virtual void  v168(); // _ZN10S1378C3_nt4v168Ev
  virtual void  v169(); // _ZN10S1378C3_nt4v169Ev
  virtual void  v170(); // _ZN10S1378C3_nt4v170Ev
  virtual void  v171(); // _ZN10S1378C3_nt4v171Ev
  virtual void  v172(); // _ZN10S1378C3_nt4v172Ev
  virtual void  v173(); // _ZN10S1378C3_nt4v173Ev
  virtual void  v174(); // _ZN10S1378C3_nt4v174Ev
  virtual void  v175(); // _ZN10S1378C3_nt4v175Ev
  virtual void  v176(); // _ZN10S1378C3_nt4v176Ev
  virtual void  v177(); // _ZN10S1378C3_nt4v177Ev
  virtual void  v178(); // _ZN10S1378C3_nt4v178Ev
  virtual void  v179(); // _ZN10S1378C3_nt4v179Ev
  virtual void  v180(); // _ZN10S1378C3_nt4v180Ev
  virtual void  v181(); // _ZN10S1378C3_nt4v181Ev
  virtual void  v182(); // _ZN10S1378C3_nt4v182Ev
  virtual void  v183(); // _ZN10S1378C3_nt4v183Ev
  virtual void  v184(); // _ZN10S1378C3_nt4v184Ev
  virtual void  v185(); // _ZN10S1378C3_nt4v185Ev
  virtual void  v186(); // _ZN10S1378C3_nt4v186Ev
  virtual void  v187(); // _ZN10S1378C3_nt4v187Ev
  virtual void  v188(); // _ZN10S1378C3_nt4v188Ev
  virtual void  v189(); // _ZN10S1378C3_nt4v189Ev
  virtual void  v190(); // _ZN10S1378C3_nt4v190Ev
  virtual void  v191(); // _ZN10S1378C3_nt4v191Ev
  virtual void  v192(); // _ZN10S1378C3_nt4v192Ev
  virtual void  v193(); // _ZN10S1378C3_nt4v193Ev
  virtual void  v194(); // _ZN10S1378C3_nt4v194Ev
  virtual void  v195(); // _ZN10S1378C3_nt4v195Ev
  virtual void  v196(); // _ZN10S1378C3_nt4v196Ev
  virtual void  v197(); // _ZN10S1378C3_nt4v197Ev
  virtual void  v198(); // _ZN10S1378C3_nt4v198Ev
  virtual void  v199(); // _ZN10S1378C3_nt4v199Ev
  virtual void  v200(); // _ZN10S1378C3_nt4v200Ev
  virtual void  v201(); // _ZN10S1378C3_nt4v201Ev
  virtual void  v202(); // _ZN10S1378C3_nt4v202Ev
  virtual void  v203(); // _ZN10S1378C3_nt4v203Ev
  virtual void  v204(); // _ZN10S1378C3_nt4v204Ev
  virtual void  v205(); // _ZN10S1378C3_nt4v205Ev
  virtual void  v206(); // _ZN10S1378C3_nt4v206Ev
  virtual void  v207(); // _ZN10S1378C3_nt4v207Ev
  virtual void  v208(); // _ZN10S1378C3_nt4v208Ev
  virtual void  v209(); // _ZN10S1378C3_nt4v209Ev
  S1378C3_nt(); // tgen
};
//SIG(-1 S1378C3_nt) C1{ BC2{ vd 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 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 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 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 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC4 FC7{ m Fi} Fi Fc[4] Fp[2] FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[5] Fp[2] Fi[3] FC3 FC3 FC3 FC8{ BC9{ BC6}} FC8 Fi Fp[2] FC10{ m Fi[3]} FC10 FC10 FC10 Fp FC3 FC8 FC10 FC10 Fi FC10 FC10 Fp Fi Fc FC10 FC10 Fp Fi Fp FC8 FC11{ BC12{ BC6}} FC11}


 S1378C3_nt ::~S1378C3_nt(){ note_dtor("S1378C3_nt", this);}
void  S1378C3_nt ::v67(){vfunc_called(this, "_ZN10S1378C3_nt3v67Ev");}
void  S1378C3_nt ::v68(){vfunc_called(this, "_ZN10S1378C3_nt3v68Ev");}
void  S1378C3_nt ::v69(){vfunc_called(this, "_ZN10S1378C3_nt3v69Ev");}
void  S1378C3_nt ::v70(){vfunc_called(this, "_ZN10S1378C3_nt3v70Ev");}
void  S1378C3_nt ::v71(){vfunc_called(this, "_ZN10S1378C3_nt3v71Ev");}
void  S1378C3_nt ::v72(){vfunc_called(this, "_ZN10S1378C3_nt3v72Ev");}
void  S1378C3_nt ::v73(){vfunc_called(this, "_ZN10S1378C3_nt3v73Ev");}
void  S1378C3_nt ::v74(){vfunc_called(this, "_ZN10S1378C3_nt3v74Ev");}
void  S1378C3_nt ::v75(){vfunc_called(this, "_ZN10S1378C3_nt3v75Ev");}
void  S1378C3_nt ::v76(){vfunc_called(this, "_ZN10S1378C3_nt3v76Ev");}
void  S1378C3_nt ::v77(){vfunc_called(this, "_ZN10S1378C3_nt3v77Ev");}
void  S1378C3_nt ::v78(){vfunc_called(this, "_ZN10S1378C3_nt3v78Ev");}
void  S1378C3_nt ::v79(){vfunc_called(this, "_ZN10S1378C3_nt3v79Ev");}
void  S1378C3_nt ::v80(){vfunc_called(this, "_ZN10S1378C3_nt3v80Ev");}
void  S1378C3_nt ::v81(){vfunc_called(this, "_ZN10S1378C3_nt3v81Ev");}
void  S1378C3_nt ::v82(){vfunc_called(this, "_ZN10S1378C3_nt3v82Ev");}
void  S1378C3_nt ::v83(){vfunc_called(this, "_ZN10S1378C3_nt3v83Ev");}
void  S1378C3_nt ::v84(){vfunc_called(this, "_ZN10S1378C3_nt3v84Ev");}
void  S1378C3_nt ::v85(){vfunc_called(this, "_ZN10S1378C3_nt3v85Ev");}
void  S1378C3_nt ::v86(){vfunc_called(this, "_ZN10S1378C3_nt3v86Ev");}
void  S1378C3_nt ::v87(){vfunc_called(this, "_ZN10S1378C3_nt3v87Ev");}
void  S1378C3_nt ::v88(){vfunc_called(this, "_ZN10S1378C3_nt3v88Ev");}
void  S1378C3_nt ::v89(){vfunc_called(this, "_ZN10S1378C3_nt3v89Ev");}
void  S1378C3_nt ::v90(){vfunc_called(this, "_ZN10S1378C3_nt3v90Ev");}
void  S1378C3_nt ::v91(){vfunc_called(this, "_ZN10S1378C3_nt3v91Ev");}
void  S1378C3_nt ::v92(){vfunc_called(this, "_ZN10S1378C3_nt3v92Ev");}
void  S1378C3_nt ::v93(){vfunc_called(this, "_ZN10S1378C3_nt3v93Ev");}
void  S1378C3_nt ::v94(){vfunc_called(this, "_ZN10S1378C3_nt3v94Ev");}
void  S1378C3_nt ::v95(){vfunc_called(this, "_ZN10S1378C3_nt3v95Ev");}
void  S1378C3_nt ::v96(){vfunc_called(this, "_ZN10S1378C3_nt3v96Ev");}
void  S1378C3_nt ::v97(){vfunc_called(this, "_ZN10S1378C3_nt3v97Ev");}
void  S1378C3_nt ::v98(){vfunc_called(this, "_ZN10S1378C3_nt3v98Ev");}
void  S1378C3_nt ::v99(){vfunc_called(this, "_ZN10S1378C3_nt3v99Ev");}
void  S1378C3_nt ::v100(){vfunc_called(this, "_ZN10S1378C3_nt4v100Ev");}
void  S1378C3_nt ::v101(){vfunc_called(this, "_ZN10S1378C3_nt4v101Ev");}
void  S1378C3_nt ::v102(){vfunc_called(this, "_ZN10S1378C3_nt4v102Ev");}
void  S1378C3_nt ::v103(){vfunc_called(this, "_ZN10S1378C3_nt4v103Ev");}
void  S1378C3_nt ::v104(){vfunc_called(this, "_ZN10S1378C3_nt4v104Ev");}
void  S1378C3_nt ::v105(){vfunc_called(this, "_ZN10S1378C3_nt4v105Ev");}
void  S1378C3_nt ::v106(){vfunc_called(this, "_ZN10S1378C3_nt4v106Ev");}
void  S1378C3_nt ::v107(){vfunc_called(this, "_ZN10S1378C3_nt4v107Ev");}
void  S1378C3_nt ::v108(){vfunc_called(this, "_ZN10S1378C3_nt4v108Ev");}
void  S1378C3_nt ::v109(){vfunc_called(this, "_ZN10S1378C3_nt4v109Ev");}
void  S1378C3_nt ::v110(){vfunc_called(this, "_ZN10S1378C3_nt4v110Ev");}
void  S1378C3_nt ::v111(){vfunc_called(this, "_ZN10S1378C3_nt4v111Ev");}
void  S1378C3_nt ::v112(){vfunc_called(this, "_ZN10S1378C3_nt4v112Ev");}
void  S1378C3_nt ::v113(){vfunc_called(this, "_ZN10S1378C3_nt4v113Ev");}
void  S1378C3_nt ::v114(){vfunc_called(this, "_ZN10S1378C3_nt4v114Ev");}
void  S1378C3_nt ::v115(){vfunc_called(this, "_ZN10S1378C3_nt4v115Ev");}
void  S1378C3_nt ::v116(){vfunc_called(this, "_ZN10S1378C3_nt4v116Ev");}
void  S1378C3_nt ::v117(){vfunc_called(this, "_ZN10S1378C3_nt4v117Ev");}
void  S1378C3_nt ::v118(){vfunc_called(this, "_ZN10S1378C3_nt4v118Ev");}
void  S1378C3_nt ::v119(){vfunc_called(this, "_ZN10S1378C3_nt4v119Ev");}
void  S1378C3_nt ::v120(){vfunc_called(this, "_ZN10S1378C3_nt4v120Ev");}
void  S1378C3_nt ::v121(){vfunc_called(this, "_ZN10S1378C3_nt4v121Ev");}
void  S1378C3_nt ::v122(){vfunc_called(this, "_ZN10S1378C3_nt4v122Ev");}
void  S1378C3_nt ::v123(){vfunc_called(this, "_ZN10S1378C3_nt4v123Ev");}
void  S1378C3_nt ::v124(){vfunc_called(this, "_ZN10S1378C3_nt4v124Ev");}
void  S1378C3_nt ::v125(){vfunc_called(this, "_ZN10S1378C3_nt4v125Ev");}
void  S1378C3_nt ::v126(){vfunc_called(this, "_ZN10S1378C3_nt4v126Ev");}
void  S1378C3_nt ::v127(){vfunc_called(this, "_ZN10S1378C3_nt4v127Ev");}
void  S1378C3_nt ::v128(){vfunc_called(this, "_ZN10S1378C3_nt4v128Ev");}
void  S1378C3_nt ::v129(){vfunc_called(this, "_ZN10S1378C3_nt4v129Ev");}
void  S1378C3_nt ::v130(){vfunc_called(this, "_ZN10S1378C3_nt4v130Ev");}
void  S1378C3_nt ::v131(){vfunc_called(this, "_ZN10S1378C3_nt4v131Ev");}
void  S1378C3_nt ::v132(){vfunc_called(this, "_ZN10S1378C3_nt4v132Ev");}
void  S1378C3_nt ::v133(){vfunc_called(this, "_ZN10S1378C3_nt4v133Ev");}
void  S1378C3_nt ::v134(){vfunc_called(this, "_ZN10S1378C3_nt4v134Ev");}
void  S1378C3_nt ::v135(){vfunc_called(this, "_ZN10S1378C3_nt4v135Ev");}
void  S1378C3_nt ::v136(){vfunc_called(this, "_ZN10S1378C3_nt4v136Ev");}
void  S1378C3_nt ::v137(){vfunc_called(this, "_ZN10S1378C3_nt4v137Ev");}
void  S1378C3_nt ::v138(){vfunc_called(this, "_ZN10S1378C3_nt4v138Ev");}
void  S1378C3_nt ::v139(){vfunc_called(this, "_ZN10S1378C3_nt4v139Ev");}
void  S1378C3_nt ::v140(){vfunc_called(this, "_ZN10S1378C3_nt4v140Ev");}
void  S1378C3_nt ::v141(){vfunc_called(this, "_ZN10S1378C3_nt4v141Ev");}
void  S1378C3_nt ::v142(){vfunc_called(this, "_ZN10S1378C3_nt4v142Ev");}
void  S1378C3_nt ::v143(){vfunc_called(this, "_ZN10S1378C3_nt4v143Ev");}
void  S1378C3_nt ::v144(){vfunc_called(this, "_ZN10S1378C3_nt4v144Ev");}
void  S1378C3_nt ::v145(){vfunc_called(this, "_ZN10S1378C3_nt4v145Ev");}
void  S1378C3_nt ::v146(){vfunc_called(this, "_ZN10S1378C3_nt4v146Ev");}
void  S1378C3_nt ::v147(){vfunc_called(this, "_ZN10S1378C3_nt4v147Ev");}
void  S1378C3_nt ::v148(){vfunc_called(this, "_ZN10S1378C3_nt4v148Ev");}
void  S1378C3_nt ::v149(){vfunc_called(this, "_ZN10S1378C3_nt4v149Ev");}
void  S1378C3_nt ::v150(){vfunc_called(this, "_ZN10S1378C3_nt4v150Ev");}
void  S1378C3_nt ::v151(){vfunc_called(this, "_ZN10S1378C3_nt4v151Ev");}
void  S1378C3_nt ::v152(){vfunc_called(this, "_ZN10S1378C3_nt4v152Ev");}
void  S1378C3_nt ::v153(){vfunc_called(this, "_ZN10S1378C3_nt4v153Ev");}
void  S1378C3_nt ::v154(){vfunc_called(this, "_ZN10S1378C3_nt4v154Ev");}
void  S1378C3_nt ::v155(){vfunc_called(this, "_ZN10S1378C3_nt4v155Ev");}
void  S1378C3_nt ::v156(){vfunc_called(this, "_ZN10S1378C3_nt4v156Ev");}
void  S1378C3_nt ::v157(){vfunc_called(this, "_ZN10S1378C3_nt4v157Ev");}
void  S1378C3_nt ::v158(){vfunc_called(this, "_ZN10S1378C3_nt4v158Ev");}
void  S1378C3_nt ::v159(){vfunc_called(this, "_ZN10S1378C3_nt4v159Ev");}
void  S1378C3_nt ::v160(){vfunc_called(this, "_ZN10S1378C3_nt4v160Ev");}
void  S1378C3_nt ::v161(){vfunc_called(this, "_ZN10S1378C3_nt4v161Ev");}
void  S1378C3_nt ::v162(){vfunc_called(this, "_ZN10S1378C3_nt4v162Ev");}
void  S1378C3_nt ::v163(){vfunc_called(this, "_ZN10S1378C3_nt4v163Ev");}
void  S1378C3_nt ::v164(){vfunc_called(this, "_ZN10S1378C3_nt4v164Ev");}
void  S1378C3_nt ::v165(){vfunc_called(this, "_ZN10S1378C3_nt4v165Ev");}
void  S1378C3_nt ::v166(){vfunc_called(this, "_ZN10S1378C3_nt4v166Ev");}
void  S1378C3_nt ::v167(){vfunc_called(this, "_ZN10S1378C3_nt4v167Ev");}
void  S1378C3_nt ::v168(){vfunc_called(this, "_ZN10S1378C3_nt4v168Ev");}
void  S1378C3_nt ::v169(){vfunc_called(this, "_ZN10S1378C3_nt4v169Ev");}
void  S1378C3_nt ::v170(){vfunc_called(this, "_ZN10S1378C3_nt4v170Ev");}
void  S1378C3_nt ::v171(){vfunc_called(this, "_ZN10S1378C3_nt4v171Ev");}
void  S1378C3_nt ::v172(){vfunc_called(this, "_ZN10S1378C3_nt4v172Ev");}
void  S1378C3_nt ::v173(){vfunc_called(this, "_ZN10S1378C3_nt4v173Ev");}
void  S1378C3_nt ::v174(){vfunc_called(this, "_ZN10S1378C3_nt4v174Ev");}
void  S1378C3_nt ::v175(){vfunc_called(this, "_ZN10S1378C3_nt4v175Ev");}
void  S1378C3_nt ::v176(){vfunc_called(this, "_ZN10S1378C3_nt4v176Ev");}
void  S1378C3_nt ::v177(){vfunc_called(this, "_ZN10S1378C3_nt4v177Ev");}
void  S1378C3_nt ::v178(){vfunc_called(this, "_ZN10S1378C3_nt4v178Ev");}
void  S1378C3_nt ::v179(){vfunc_called(this, "_ZN10S1378C3_nt4v179Ev");}
void  S1378C3_nt ::v180(){vfunc_called(this, "_ZN10S1378C3_nt4v180Ev");}
void  S1378C3_nt ::v181(){vfunc_called(this, "_ZN10S1378C3_nt4v181Ev");}
void  S1378C3_nt ::v182(){vfunc_called(this, "_ZN10S1378C3_nt4v182Ev");}
void  S1378C3_nt ::v183(){vfunc_called(this, "_ZN10S1378C3_nt4v183Ev");}
void  S1378C3_nt ::v184(){vfunc_called(this, "_ZN10S1378C3_nt4v184Ev");}
void  S1378C3_nt ::v185(){vfunc_called(this, "_ZN10S1378C3_nt4v185Ev");}
void  S1378C3_nt ::v186(){vfunc_called(this, "_ZN10S1378C3_nt4v186Ev");}
void  S1378C3_nt ::v187(){vfunc_called(this, "_ZN10S1378C3_nt4v187Ev");}
void  S1378C3_nt ::v188(){vfunc_called(this, "_ZN10S1378C3_nt4v188Ev");}
void  S1378C3_nt ::v189(){vfunc_called(this, "_ZN10S1378C3_nt4v189Ev");}
void  S1378C3_nt ::v190(){vfunc_called(this, "_ZN10S1378C3_nt4v190Ev");}
void  S1378C3_nt ::v191(){vfunc_called(this, "_ZN10S1378C3_nt4v191Ev");}
void  S1378C3_nt ::v192(){vfunc_called(this, "_ZN10S1378C3_nt4v192Ev");}
void  S1378C3_nt ::v193(){vfunc_called(this, "_ZN10S1378C3_nt4v193Ev");}
void  S1378C3_nt ::v194(){vfunc_called(this, "_ZN10S1378C3_nt4v194Ev");}
void  S1378C3_nt ::v195(){vfunc_called(this, "_ZN10S1378C3_nt4v195Ev");}
void  S1378C3_nt ::v196(){vfunc_called(this, "_ZN10S1378C3_nt4v196Ev");}
void  S1378C3_nt ::v197(){vfunc_called(this, "_ZN10S1378C3_nt4v197Ev");}
void  S1378C3_nt ::v198(){vfunc_called(this, "_ZN10S1378C3_nt4v198Ev");}
void  S1378C3_nt ::v199(){vfunc_called(this, "_ZN10S1378C3_nt4v199Ev");}
void  S1378C3_nt ::v200(){vfunc_called(this, "_ZN10S1378C3_nt4v200Ev");}
void  S1378C3_nt ::v201(){vfunc_called(this, "_ZN10S1378C3_nt4v201Ev");}
void  S1378C3_nt ::v202(){vfunc_called(this, "_ZN10S1378C3_nt4v202Ev");}
void  S1378C3_nt ::v203(){vfunc_called(this, "_ZN10S1378C3_nt4v203Ev");}
void  S1378C3_nt ::v204(){vfunc_called(this, "_ZN10S1378C3_nt4v204Ev");}
void  S1378C3_nt ::v205(){vfunc_called(this, "_ZN10S1378C3_nt4v205Ev");}
void  S1378C3_nt ::v206(){vfunc_called(this, "_ZN10S1378C3_nt4v206Ev");}
void  S1378C3_nt ::v207(){vfunc_called(this, "_ZN10S1378C3_nt4v207Ev");}
void  S1378C3_nt ::v208(){vfunc_called(this, "_ZN10S1378C3_nt4v208Ev");}
void  S1378C3_nt ::v209(){vfunc_called(this, "_ZN10S1378C3_nt4v209Ev");}
S1378C3_nt ::S1378C3_nt(){ note_ctor("S1378C3_nt", this);} // tgen

//skip512 S1378C3_nt

#else // __cplusplus

extern void _ZN10S1378C3_ntC1Ev();
extern void _ZN10S1378C3_ntD1Ev();
Name_Map name_map_S1378C3_nt[] = {
  NSPAIR(_ZN10S1378C3_ntC1Ev),
  NSPAIR(_ZN10S1378C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1378C4_nt;
extern VTBL_ENTRY _ZTI10S1378C4_nt[];
extern  VTBL_ENTRY _ZTV10S1378C4_nt[];
static Base_Class bases_S1378C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1378C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI10S1378C3_nt[];
extern void _ZN10S1378C3_ntD1Ev();
extern void _ZN10S1378C3_ntD0Ev();
extern void _ZN10S1378C4_nt2v3Ev();
extern void _ZN10S1378C4_nt2v4Ev();
extern void _ZN10S1378C4_nt2v5Ev();
extern void _ZN10S1378C4_nt2v6Ev();
extern void _ZN10S1378C4_nt2v7Ev();
extern void _ZN10S1378C4_nt2v8Ev();
extern void _ZN10S1378C4_nt2v9Ev();
extern void _ZN10S1378C4_nt3v10Ev();
extern void _ZN10S1378C4_nt3v11Ev();
extern void _ZN10S1378C4_nt3v12Ev();
extern void _ZN10S1378C4_nt3v13Ev();
extern void _ZN10S1378C4_nt3v14Ev();
extern void _ZN10S1378C4_nt3v15Ev();
extern void _ZN10S1378C4_nt3v16Ev();
extern void _ZN10S1378C4_nt3v17Ev();
extern void _ZN10S1378C4_nt3v18Ev();
extern void _ZN10S1378C4_nt3v19Ev();
extern void _ZN10S1378C4_nt3v20Ev();
extern void _ZN10S1378C4_nt3v21Ev();
extern void _ZN10S1378C4_nt3v22Ev();
extern void _ZN10S1378C4_nt3v23Ev();
extern void _ZN10S1378C4_nt3v24Ev();
extern void _ZN10S1378C4_nt3v25Ev();
extern void _ZN10S1378C4_nt3v26Ev();
extern void _ZN10S1378C4_nt3v27Ev();
extern void _ZN10S1378C4_nt3v28Ev();
extern void _ZN10S1378C4_nt3v29Ev();
extern void _ZN10S1378C4_nt3v30Ev();
extern void _ZN10S1378C4_nt3v31Ev();
extern void _ZN10S1378C4_nt3v32Ev();
extern void _ZN10S1378C4_nt3v33Ev();
extern void _ZN10S1378C4_nt3v34Ev();
extern void _ZN10S1378C4_nt3v35Ev();
extern void _ZN10S1378C4_nt3v36Ev();
extern void _ZN10S1378C4_nt3v37Ev();
extern void _ZN10S1378C4_nt3v38Ev();
extern void _ZN10S1378C4_nt3v39Ev();
extern void _ZN10S1378C4_nt3v40Ev();
extern void _ZN10S1378C4_nt3v41Ev();
extern void _ZN10S1378C4_nt3v42Ev();
extern void _ZN10S1378C4_nt3v43Ev();
extern void _ZN10S1378C4_nt3v44Ev();
extern void _ZN10S1378C4_nt3v45Ev();
extern void _ZN10S1378C4_nt3v46Ev();
extern void _ZN10S1378C4_nt3v47Ev();
extern void _ZN10S1378C4_nt3v48Ev();
extern void _ZN10S1378C4_nt3v49Ev();
extern void _ZN10S1378C4_nt3v50Ev();
extern void _ZN10S1378C4_nt3v51Ev();
extern void _ZN10S1378C4_nt3v52Ev();
extern void _ZN10S1378C4_nt3v53Ev();
extern void _ZN10S1378C4_nt3v54Ev();
extern void _ZN10S1378C4_nt3v55Ev();
extern void _ZN10S1378C4_nt3v56Ev();
extern void _ZN10S1378C4_nt3v57Ev();
extern void _ZN10S1378C4_nt3v58Ev();
extern void _ZN10S1378C4_nt3v59Ev();
extern void _ZN10S1378C4_nt3v60Ev();
extern void _ZN10S1378C4_nt3v61Ev();
extern void _ZN10S1378C4_nt3v62Ev();
extern void _ZN10S1378C4_nt3v63Ev();
extern void _ZN10S1378C4_nt3v64Ev();
extern void _ZN10S1378C4_nt3v65Ev();
extern void _ZN10S1378C4_nt3v66Ev();
extern void _ZN10S1378C3_nt3v67Ev();
extern void _ZN10S1378C3_nt3v68Ev();
extern void _ZN10S1378C3_nt3v69Ev();
extern void _ZN10S1378C3_nt3v70Ev();
extern void _ZN10S1378C3_nt3v71Ev();
extern void _ZN10S1378C3_nt3v72Ev();
extern void _ZN10S1378C3_nt3v73Ev();
extern void _ZN10S1378C3_nt3v74Ev();
extern void _ZN10S1378C3_nt3v75Ev();
extern void _ZN10S1378C3_nt3v76Ev();
extern void _ZN10S1378C3_nt3v77Ev();
extern void _ZN10S1378C3_nt3v78Ev();
extern void _ZN10S1378C3_nt3v79Ev();
extern void _ZN10S1378C3_nt3v80Ev();
extern void _ZN10S1378C3_nt3v81Ev();
extern void _ZN10S1378C3_nt3v82Ev();
extern void _ZN10S1378C3_nt3v83Ev();
extern void _ZN10S1378C3_nt3v84Ev();
extern void _ZN10S1378C3_nt3v85Ev();
extern void _ZN10S1378C3_nt3v86Ev();
extern void _ZN10S1378C3_nt3v87Ev();
extern void _ZN10S1378C3_nt3v88Ev();
extern void _ZN10S1378C3_nt3v89Ev();
extern void _ZN10S1378C3_nt3v90Ev();
extern void _ZN10S1378C3_nt3v91Ev();
extern void _ZN10S1378C3_nt3v92Ev();
extern void _ZN10S1378C3_nt3v93Ev();
extern void _ZN10S1378C3_nt3v94Ev();
extern void _ZN10S1378C3_nt3v95Ev();
extern void _ZN10S1378C3_nt3v96Ev();
extern void _ZN10S1378C3_nt3v97Ev();
extern void _ZN10S1378C3_nt3v98Ev();
extern void _ZN10S1378C3_nt3v99Ev();
extern void _ZN10S1378C3_nt4v100Ev();
extern void _ZN10S1378C3_nt4v101Ev();
extern void _ZN10S1378C3_nt4v102Ev();
extern void _ZN10S1378C3_nt4v103Ev();
extern void _ZN10S1378C3_nt4v104Ev();
extern void _ZN10S1378C3_nt4v105Ev();
extern void _ZN10S1378C3_nt4v106Ev();
extern void _ZN10S1378C3_nt4v107Ev();
extern void _ZN10S1378C3_nt4v108Ev();
extern void _ZN10S1378C3_nt4v109Ev();
extern void _ZN10S1378C3_nt4v110Ev();
extern void _ZN10S1378C3_nt4v111Ev();
extern void _ZN10S1378C3_nt4v112Ev();
extern void _ZN10S1378C3_nt4v113Ev();
extern void _ZN10S1378C3_nt4v114Ev();
extern void _ZN10S1378C3_nt4v115Ev();
extern void _ZN10S1378C3_nt4v116Ev();
extern void _ZN10S1378C3_nt4v117Ev();
extern void _ZN10S1378C3_nt4v118Ev();
extern void _ZN10S1378C3_nt4v119Ev();
extern void _ZN10S1378C3_nt4v120Ev();
extern void _ZN10S1378C3_nt4v121Ev();
extern void _ZN10S1378C3_nt4v122Ev();
extern void _ZN10S1378C3_nt4v123Ev();
extern void _ZN10S1378C3_nt4v124Ev();
extern void _ZN10S1378C3_nt4v125Ev();
extern void _ZN10S1378C3_nt4v126Ev();
extern void _ZN10S1378C3_nt4v127Ev();
extern void _ZN10S1378C3_nt4v128Ev();
extern void _ZN10S1378C3_nt4v129Ev();
extern void _ZN10S1378C3_nt4v130Ev();
extern void _ZN10S1378C3_nt4v131Ev();
extern void _ZN10S1378C3_nt4v132Ev();
extern void _ZN10S1378C3_nt4v133Ev();
extern void _ZN10S1378C3_nt4v134Ev();
extern void _ZN10S1378C3_nt4v135Ev();
extern void _ZN10S1378C3_nt4v136Ev();
extern void _ZN10S1378C3_nt4v137Ev();
extern void _ZN10S1378C3_nt4v138Ev();
extern void _ZN10S1378C3_nt4v139Ev();
extern void _ZN10S1378C3_nt4v140Ev();
extern void _ZN10S1378C3_nt4v141Ev();
extern void _ZN10S1378C3_nt4v142Ev();
extern void _ZN10S1378C3_nt4v143Ev();
extern void _ZN10S1378C3_nt4v144Ev();
extern void _ZN10S1378C3_nt4v145Ev();
extern void _ZN10S1378C3_nt4v146Ev();
extern void _ZN10S1378C3_nt4v147Ev();
extern void _ZN10S1378C3_nt4v148Ev();
extern void _ZN10S1378C3_nt4v149Ev();
extern void _ZN10S1378C3_nt4v150Ev();
extern void _ZN10S1378C3_nt4v151Ev();
extern void _ZN10S1378C3_nt4v152Ev();
extern void _ZN10S1378C3_nt4v153Ev();
extern void _ZN10S1378C3_nt4v154Ev();
extern void _ZN10S1378C3_nt4v155Ev();
extern void _ZN10S1378C3_nt4v156Ev();
extern void _ZN10S1378C3_nt4v157Ev();
extern void _ZN10S1378C3_nt4v158Ev();
extern void _ZN10S1378C3_nt4v159Ev();
extern void _ZN10S1378C3_nt4v160Ev();
extern void _ZN10S1378C3_nt4v161Ev();
extern void _ZN10S1378C3_nt4v162Ev();
extern void _ZN10S1378C3_nt4v163Ev();
extern void _ZN10S1378C3_nt4v164Ev();
extern void _ZN10S1378C3_nt4v165Ev();
extern void _ZN10S1378C3_nt4v166Ev();
extern void _ZN10S1378C3_nt4v167Ev();
extern void _ZN10S1378C3_nt4v168Ev();
extern void _ZN10S1378C3_nt4v169Ev();
extern void _ZN10S1378C3_nt4v170Ev();
extern void _ZN10S1378C3_nt4v171Ev();
extern void _ZN10S1378C3_nt4v172Ev();
extern void _ZN10S1378C3_nt4v173Ev();
extern void _ZN10S1378C3_nt4v174Ev();
extern void _ZN10S1378C3_nt4v175Ev();
extern void _ZN10S1378C3_nt4v176Ev();
extern void _ZN10S1378C3_nt4v177Ev();
extern void _ZN10S1378C3_nt4v178Ev();
extern void _ZN10S1378C3_nt4v179Ev();
extern void _ZN10S1378C3_nt4v180Ev();
extern void _ZN10S1378C3_nt4v181Ev();
extern void _ZN10S1378C3_nt4v182Ev();
extern void _ZN10S1378C3_nt4v183Ev();
extern void _ZN10S1378C3_nt4v184Ev();
extern void _ZN10S1378C3_nt4v185Ev();
extern void _ZN10S1378C3_nt4v186Ev();
extern void _ZN10S1378C3_nt4v187Ev();
extern void _ZN10S1378C3_nt4v188Ev();
extern void _ZN10S1378C3_nt4v189Ev();
extern void _ZN10S1378C3_nt4v190Ev();
extern void _ZN10S1378C3_nt4v191Ev();
extern void _ZN10S1378C3_nt4v192Ev();
extern void _ZN10S1378C3_nt4v193Ev();
extern void _ZN10S1378C3_nt4v194Ev();
extern void _ZN10S1378C3_nt4v195Ev();
extern void _ZN10S1378C3_nt4v196Ev();
extern void _ZN10S1378C3_nt4v197Ev();
extern void _ZN10S1378C3_nt4v198Ev();
extern void _ZN10S1378C3_nt4v199Ev();
extern void _ZN10S1378C3_nt4v200Ev();
extern void _ZN10S1378C3_nt4v201Ev();
extern void _ZN10S1378C3_nt4v202Ev();
extern void _ZN10S1378C3_nt4v203Ev();
extern void _ZN10S1378C3_nt4v204Ev();
extern void _ZN10S1378C3_nt4v205Ev();
extern void _ZN10S1378C3_nt4v206Ev();
extern void _ZN10S1378C3_nt4v207Ev();
extern void _ZN10S1378C3_nt4v208Ev();
extern void _ZN10S1378C3_nt4v209Ev();
static  VTBL_ENTRY vtc_S1378C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1378C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1378C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v209Ev,
};
extern VTBL_ENTRY _ZTI10S1378C3_nt[];
VTBL_ENTRY *P__ZTI10S1378C3_nt = _ZTI10S1378C3_nt; 
extern  VTBL_ENTRY _ZTV10S1378C3_nt[];
Class_Descriptor cd_S1378C3_nt = {  "S1378C3_nt", // class name
  bases_S1378C3_nt, 1,
  &(vtc_S1378C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,436), // object size
  NSPAIRA(_ZTI10S1378C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1378C3_nt),211, //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  S1378C2_nt  : S1378C3_nt {
  virtual  ~S1378C2_nt(); // _ZN10S1378C2_ntD1Ev
  virtual void  v210(); // _ZN10S1378C2_nt4v210Ev
  virtual void  v211(); // _ZN10S1378C2_nt4v211Ev
  S1378C2_nt(); // tgen
};
//SIG(-1 S1378C2_nt) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 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 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC5 FC8{ m Fi} Fi Fc[4] Fp[2] FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[5] Fp[2] Fi[3] FC4 FC4 FC4 FC9{ BC10{ BC7}} FC9 Fi Fp[2] FC11{ m Fi[3]} FC11 FC11 FC11 Fp FC4 FC9 FC11 FC11 Fi FC11 FC11 Fp Fi Fc FC11 FC11 Fp Fi Fp FC9 FC12{ BC13{ BC7}} FC12} vd v1 v2}


 S1378C2_nt ::~S1378C2_nt(){ note_dtor("S1378C2_nt", this);}
void  S1378C2_nt ::v210(){vfunc_called(this, "_ZN10S1378C2_nt4v210Ev");}
void  S1378C2_nt ::v211(){vfunc_called(this, "_ZN10S1378C2_nt4v211Ev");}
S1378C2_nt ::S1378C2_nt(){ note_ctor("S1378C2_nt", this);} // tgen

//skip512 S1378C2_nt

#else // __cplusplus

extern void _ZN10S1378C2_ntC1Ev();
extern void _ZN10S1378C2_ntD1Ev();
Name_Map name_map_S1378C2_nt[] = {
  NSPAIR(_ZN10S1378C2_ntC1Ev),
  NSPAIR(_ZN10S1378C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1378C4_nt;
extern VTBL_ENTRY _ZTI10S1378C4_nt[];
extern  VTBL_ENTRY _ZTV10S1378C4_nt[];
extern Class_Descriptor cd_S1378C3_nt;
extern VTBL_ENTRY _ZTI10S1378C3_nt[];
extern  VTBL_ENTRY _ZTV10S1378C3_nt[];
static Base_Class bases_S1378C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1378C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1378C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S1378C2_nt[];
extern void _ZN10S1378C2_ntD1Ev();
extern void _ZN10S1378C2_ntD0Ev();
extern void _ZN10S1378C4_nt2v3Ev();
extern void _ZN10S1378C4_nt2v4Ev();
extern void _ZN10S1378C4_nt2v5Ev();
extern void _ZN10S1378C4_nt2v6Ev();
extern void _ZN10S1378C4_nt2v7Ev();
extern void _ZN10S1378C4_nt2v8Ev();
extern void _ZN10S1378C4_nt2v9Ev();
extern void _ZN10S1378C4_nt3v10Ev();
extern void _ZN10S1378C4_nt3v11Ev();
extern void _ZN10S1378C4_nt3v12Ev();
extern void _ZN10S1378C4_nt3v13Ev();
extern void _ZN10S1378C4_nt3v14Ev();
extern void _ZN10S1378C4_nt3v15Ev();
extern void _ZN10S1378C4_nt3v16Ev();
extern void _ZN10S1378C4_nt3v17Ev();
extern void _ZN10S1378C4_nt3v18Ev();
extern void _ZN10S1378C4_nt3v19Ev();
extern void _ZN10S1378C4_nt3v20Ev();
extern void _ZN10S1378C4_nt3v21Ev();
extern void _ZN10S1378C4_nt3v22Ev();
extern void _ZN10S1378C4_nt3v23Ev();
extern void _ZN10S1378C4_nt3v24Ev();
extern void _ZN10S1378C4_nt3v25Ev();
extern void _ZN10S1378C4_nt3v26Ev();
extern void _ZN10S1378C4_nt3v27Ev();
extern void _ZN10S1378C4_nt3v28Ev();
extern void _ZN10S1378C4_nt3v29Ev();
extern void _ZN10S1378C4_nt3v30Ev();
extern void _ZN10S1378C4_nt3v31Ev();
extern void _ZN10S1378C4_nt3v32Ev();
extern void _ZN10S1378C4_nt3v33Ev();
extern void _ZN10S1378C4_nt3v34Ev();
extern void _ZN10S1378C4_nt3v35Ev();
extern void _ZN10S1378C4_nt3v36Ev();
extern void _ZN10S1378C4_nt3v37Ev();
extern void _ZN10S1378C4_nt3v38Ev();
extern void _ZN10S1378C4_nt3v39Ev();
extern void _ZN10S1378C4_nt3v40Ev();
extern void _ZN10S1378C4_nt3v41Ev();
extern void _ZN10S1378C4_nt3v42Ev();
extern void _ZN10S1378C4_nt3v43Ev();
extern void _ZN10S1378C4_nt3v44Ev();
extern void _ZN10S1378C4_nt3v45Ev();
extern void _ZN10S1378C4_nt3v46Ev();
extern void _ZN10S1378C4_nt3v47Ev();
extern void _ZN10S1378C4_nt3v48Ev();
extern void _ZN10S1378C4_nt3v49Ev();
extern void _ZN10S1378C4_nt3v50Ev();
extern void _ZN10S1378C4_nt3v51Ev();
extern void _ZN10S1378C4_nt3v52Ev();
extern void _ZN10S1378C4_nt3v53Ev();
extern void _ZN10S1378C4_nt3v54Ev();
extern void _ZN10S1378C4_nt3v55Ev();
extern void _ZN10S1378C4_nt3v56Ev();
extern void _ZN10S1378C4_nt3v57Ev();
extern void _ZN10S1378C4_nt3v58Ev();
extern void _ZN10S1378C4_nt3v59Ev();
extern void _ZN10S1378C4_nt3v60Ev();
extern void _ZN10S1378C4_nt3v61Ev();
extern void _ZN10S1378C4_nt3v62Ev();
extern void _ZN10S1378C4_nt3v63Ev();
extern void _ZN10S1378C4_nt3v64Ev();
extern void _ZN10S1378C4_nt3v65Ev();
extern void _ZN10S1378C4_nt3v66Ev();
extern void _ZN10S1378C3_nt3v67Ev();
extern void _ZN10S1378C3_nt3v68Ev();
extern void _ZN10S1378C3_nt3v69Ev();
extern void _ZN10S1378C3_nt3v70Ev();
extern void _ZN10S1378C3_nt3v71Ev();
extern void _ZN10S1378C3_nt3v72Ev();
extern void _ZN10S1378C3_nt3v73Ev();
extern void _ZN10S1378C3_nt3v74Ev();
extern void _ZN10S1378C3_nt3v75Ev();
extern void _ZN10S1378C3_nt3v76Ev();
extern void _ZN10S1378C3_nt3v77Ev();
extern void _ZN10S1378C3_nt3v78Ev();
extern void _ZN10S1378C3_nt3v79Ev();
extern void _ZN10S1378C3_nt3v80Ev();
extern void _ZN10S1378C3_nt3v81Ev();
extern void _ZN10S1378C3_nt3v82Ev();
extern void _ZN10S1378C3_nt3v83Ev();
extern void _ZN10S1378C3_nt3v84Ev();
extern void _ZN10S1378C3_nt3v85Ev();
extern void _ZN10S1378C3_nt3v86Ev();
extern void _ZN10S1378C3_nt3v87Ev();
extern void _ZN10S1378C3_nt3v88Ev();
extern void _ZN10S1378C3_nt3v89Ev();
extern void _ZN10S1378C3_nt3v90Ev();
extern void _ZN10S1378C3_nt3v91Ev();
extern void _ZN10S1378C3_nt3v92Ev();
extern void _ZN10S1378C3_nt3v93Ev();
extern void _ZN10S1378C3_nt3v94Ev();
extern void _ZN10S1378C3_nt3v95Ev();
extern void _ZN10S1378C3_nt3v96Ev();
extern void _ZN10S1378C3_nt3v97Ev();
extern void _ZN10S1378C3_nt3v98Ev();
extern void _ZN10S1378C3_nt3v99Ev();
extern void _ZN10S1378C3_nt4v100Ev();
extern void _ZN10S1378C3_nt4v101Ev();
extern void _ZN10S1378C3_nt4v102Ev();
extern void _ZN10S1378C3_nt4v103Ev();
extern void _ZN10S1378C3_nt4v104Ev();
extern void _ZN10S1378C3_nt4v105Ev();
extern void _ZN10S1378C3_nt4v106Ev();
extern void _ZN10S1378C3_nt4v107Ev();
extern void _ZN10S1378C3_nt4v108Ev();
extern void _ZN10S1378C3_nt4v109Ev();
extern void _ZN10S1378C3_nt4v110Ev();
extern void _ZN10S1378C3_nt4v111Ev();
extern void _ZN10S1378C3_nt4v112Ev();
extern void _ZN10S1378C3_nt4v113Ev();
extern void _ZN10S1378C3_nt4v114Ev();
extern void _ZN10S1378C3_nt4v115Ev();
extern void _ZN10S1378C3_nt4v116Ev();
extern void _ZN10S1378C3_nt4v117Ev();
extern void _ZN10S1378C3_nt4v118Ev();
extern void _ZN10S1378C3_nt4v119Ev();
extern void _ZN10S1378C3_nt4v120Ev();
extern void _ZN10S1378C3_nt4v121Ev();
extern void _ZN10S1378C3_nt4v122Ev();
extern void _ZN10S1378C3_nt4v123Ev();
extern void _ZN10S1378C3_nt4v124Ev();
extern void _ZN10S1378C3_nt4v125Ev();
extern void _ZN10S1378C3_nt4v126Ev();
extern void _ZN10S1378C3_nt4v127Ev();
extern void _ZN10S1378C3_nt4v128Ev();
extern void _ZN10S1378C3_nt4v129Ev();
extern void _ZN10S1378C3_nt4v130Ev();
extern void _ZN10S1378C3_nt4v131Ev();
extern void _ZN10S1378C3_nt4v132Ev();
extern void _ZN10S1378C3_nt4v133Ev();
extern void _ZN10S1378C3_nt4v134Ev();
extern void _ZN10S1378C3_nt4v135Ev();
extern void _ZN10S1378C3_nt4v136Ev();
extern void _ZN10S1378C3_nt4v137Ev();
extern void _ZN10S1378C3_nt4v138Ev();
extern void _ZN10S1378C3_nt4v139Ev();
extern void _ZN10S1378C3_nt4v140Ev();
extern void _ZN10S1378C3_nt4v141Ev();
extern void _ZN10S1378C3_nt4v142Ev();
extern void _ZN10S1378C3_nt4v143Ev();
extern void _ZN10S1378C3_nt4v144Ev();
extern void _ZN10S1378C3_nt4v145Ev();
extern void _ZN10S1378C3_nt4v146Ev();
extern void _ZN10S1378C3_nt4v147Ev();
extern void _ZN10S1378C3_nt4v148Ev();
extern void _ZN10S1378C3_nt4v149Ev();
extern void _ZN10S1378C3_nt4v150Ev();
extern void _ZN10S1378C3_nt4v151Ev();
extern void _ZN10S1378C3_nt4v152Ev();
extern void _ZN10S1378C3_nt4v153Ev();
extern void _ZN10S1378C3_nt4v154Ev();
extern void _ZN10S1378C3_nt4v155Ev();
extern void _ZN10S1378C3_nt4v156Ev();
extern void _ZN10S1378C3_nt4v157Ev();
extern void _ZN10S1378C3_nt4v158Ev();
extern void _ZN10S1378C3_nt4v159Ev();
extern void _ZN10S1378C3_nt4v160Ev();
extern void _ZN10S1378C3_nt4v161Ev();
extern void _ZN10S1378C3_nt4v162Ev();
extern void _ZN10S1378C3_nt4v163Ev();
extern void _ZN10S1378C3_nt4v164Ev();
extern void _ZN10S1378C3_nt4v165Ev();
extern void _ZN10S1378C3_nt4v166Ev();
extern void _ZN10S1378C3_nt4v167Ev();
extern void _ZN10S1378C3_nt4v168Ev();
extern void _ZN10S1378C3_nt4v169Ev();
extern void _ZN10S1378C3_nt4v170Ev();
extern void _ZN10S1378C3_nt4v171Ev();
extern void _ZN10S1378C3_nt4v172Ev();
extern void _ZN10S1378C3_nt4v173Ev();
extern void _ZN10S1378C3_nt4v174Ev();
extern void _ZN10S1378C3_nt4v175Ev();
extern void _ZN10S1378C3_nt4v176Ev();
extern void _ZN10S1378C3_nt4v177Ev();
extern void _ZN10S1378C3_nt4v178Ev();
extern void _ZN10S1378C3_nt4v179Ev();
extern void _ZN10S1378C3_nt4v180Ev();
extern void _ZN10S1378C3_nt4v181Ev();
extern void _ZN10S1378C3_nt4v182Ev();
extern void _ZN10S1378C3_nt4v183Ev();
extern void _ZN10S1378C3_nt4v184Ev();
extern void _ZN10S1378C3_nt4v185Ev();
extern void _ZN10S1378C3_nt4v186Ev();
extern void _ZN10S1378C3_nt4v187Ev();
extern void _ZN10S1378C3_nt4v188Ev();
extern void _ZN10S1378C3_nt4v189Ev();
extern void _ZN10S1378C3_nt4v190Ev();
extern void _ZN10S1378C3_nt4v191Ev();
extern void _ZN10S1378C3_nt4v192Ev();
extern void _ZN10S1378C3_nt4v193Ev();
extern void _ZN10S1378C3_nt4v194Ev();
extern void _ZN10S1378C3_nt4v195Ev();
extern void _ZN10S1378C3_nt4v196Ev();
extern void _ZN10S1378C3_nt4v197Ev();
extern void _ZN10S1378C3_nt4v198Ev();
extern void _ZN10S1378C3_nt4v199Ev();
extern void _ZN10S1378C3_nt4v200Ev();
extern void _ZN10S1378C3_nt4v201Ev();
extern void _ZN10S1378C3_nt4v202Ev();
extern void _ZN10S1378C3_nt4v203Ev();
extern void _ZN10S1378C3_nt4v204Ev();
extern void _ZN10S1378C3_nt4v205Ev();
extern void _ZN10S1378C3_nt4v206Ev();
extern void _ZN10S1378C3_nt4v207Ev();
extern void _ZN10S1378C3_nt4v208Ev();
extern void _ZN10S1378C3_nt4v209Ev();
extern void _ZN10S1378C2_nt4v210Ev();
extern void _ZN10S1378C2_nt4v211Ev();
static  VTBL_ENTRY vtc_S1378C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1378C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1378C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1378C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1378C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S1378C2_nt4v211Ev,
};
extern VTBL_ENTRY _ZTI10S1378C2_nt[];
VTBL_ENTRY *P__ZTI10S1378C2_nt = _ZTI10S1378C2_nt; 
extern  VTBL_ENTRY _ZTV10S1378C2_nt[];
Class_Descriptor cd_S1378C2_nt = {  "S1378C2_nt", // class name
  bases_S1378C2_nt, 2,
  &(vtc_S1378C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,436), // object size
  NSPAIRA(_ZTI10S1378C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1378C2_nt),213, //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  S1378C23  : S1378C8_nt {
};
//SIG(-1 S1378C23) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1378C23()
{
  extern Class_Descriptor cd_S1378C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1378C23, buf);
    S1378C23 &lv = *(new (buf) S1378C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1378C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1378C23)");
    check_base_class_offset(lv, (S1378C8_nt*), 0, "S1378C23");
    test_class_info(&lv, &cd_S1378C23);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1378C23(Test_S1378C23, "S1378C23", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1378C8_nt;
static Base_Class bases_S1378C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1378C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1378C23 = {  "S1378C23", // class name
  bases_S1378C23, 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  S1378C22  : S1378C23 {
};
//SIG(-1 S1378C22) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1378C22()
{
  extern Class_Descriptor cd_S1378C22;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1378C22, buf);
    S1378C22 &lv = *(new (buf) S1378C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1378C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1378C22)");
    check_base_class_offset(lv, (S1378C8_nt*)(S1378C23*), 0, "S1378C22");
    check_base_class_offset(lv, (S1378C23*), 0, "S1378C22");
    test_class_info(&lv, &cd_S1378C22);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1378C22(Test_S1378C22, "S1378C22", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1378C8_nt;
extern Class_Descriptor cd_S1378C23;
static Base_Class bases_S1378C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1378C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1378C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1378C22 = {  "S1378C22", // class name
  bases_S1378C22, 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  S1378C1  : S1378C2_nt {
  void *s1378c1f0[4];
  ::S1378C22 s1378c1f1;
  ::S1378C22 s1378c1f2;
  virtual  ~S1378C1(); // _ZN7S1378C1D1Ev
  virtual void  v1(); // _ZN7S1378C12v1Ev
  virtual void  v2(); // _ZN7S1378C12v2Ev
  S1378C1(); // tgen
};
//SIG(1 S1378C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 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 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC6 FC9{ m Fi} Fi Fc[4] Fp[2] FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[5] Fp[2] Fi[3] FC5 FC5 FC5 FC10{ BC11{ BC8}} FC10 Fi Fp[2] FC12{ m Fi[3]} FC12 FC12 FC12 Fp FC5 FC10 FC12 FC12 Fi FC12 FC12 Fp Fi Fc FC12 FC12 Fp Fi Fp FC10 FC13{ BC14{ BC8}} FC13} vd v210 v211} vd v1 v2 Fp[4] FC15{ BC16{ BC8}} FC15}


 S1378C1 ::~S1378C1(){ note_dtor("S1378C1", this);}
void  S1378C1 ::v1(){vfunc_called(this, "_ZN7S1378C12v1Ev");}
void  S1378C1 ::v2(){vfunc_called(this, "_ZN7S1378C12v2Ev");}
S1378C1 ::S1378C1(){ note_ctor("S1378C1", this);} // tgen

static void Test_S1378C1()
{
  extern Class_Descriptor cd_S1378C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(80,120)];
    init_test(&cd_S1378C1, buf);
    S1378C1 *dp, &lv = *(dp=new (buf) S1378C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(632,476), "sizeof(S1378C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1378C1)");
    check_base_class_offset(lv, (S1378C4_nt*)(S1378C3_nt*)(S1378C2_nt*), 0, "S1378C1");
    check_base_class_offset(lv, (S1378C3_nt*)(S1378C2_nt*), 0, "S1378C1");
    check_base_class_offset(lv, (S1378C2_nt*), 0, "S1378C1");
    check_field_offset(lv, s1378c1f0, ABISELECT(568,436), "S1378C1.s1378c1f0");
    check_field_offset(lv, s1378c1f1, ABISELECT(600,452), "S1378C1.s1378c1f1");
    check_field_offset(lv, s1378c1f2, ABISELECT(616,464), "S1378C1.s1378c1f2");
    test_class_info(&lv, &cd_S1378C1);
    dp->~S1378C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1378C1(Test_S1378C1, "S1378C1", ABISELECT(632,476));

#else // __cplusplus

extern void _ZN7S1378C1C1Ev();
extern void _ZN7S1378C1D1Ev();
Name_Map name_map_S1378C1[] = {
  NSPAIR(_ZN7S1378C1C1Ev),
  NSPAIR(_ZN7S1378C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1378C4_nt;
extern VTBL_ENTRY _ZTI10S1378C4_nt[];
extern  VTBL_ENTRY _ZTV10S1378C4_nt[];
extern Class_Descriptor cd_S1378C3_nt;
extern VTBL_ENTRY _ZTI10S1378C3_nt[];
extern  VTBL_ENTRY _ZTV10S1378C3_nt[];
extern Class_Descriptor cd_S1378C2_nt;
extern VTBL_ENTRY _ZTI10S1378C2_nt[];
extern  VTBL_ENTRY _ZTV10S1378C2_nt[];
static Base_Class bases_S1378C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1378C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1378C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1378C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1378C1[];
extern void _ZN7S1378C1D1Ev();
extern void _ZN7S1378C1D0Ev();
extern void _ZN10S1378C4_nt2v3Ev();
extern void _ZN10S1378C4_nt2v4Ev();
extern void _ZN10S1378C4_nt2v5Ev();
extern void _ZN10S1378C4_nt2v6Ev();
extern void _ZN10S1378C4_nt2v7Ev();
extern void _ZN10S1378C4_nt2v8Ev();
extern void _ZN10S1378C4_nt2v9Ev();
extern void _ZN10S1378C4_nt3v10Ev();
extern void _ZN10S1378C4_nt3v11Ev();
extern void _ZN10S1378C4_nt3v12Ev();
extern void _ZN10S1378C4_nt3v13Ev();
extern void _ZN10S1378C4_nt3v14Ev();
extern void _ZN10S1378C4_nt3v15Ev();
extern void _ZN10S1378C4_nt3v16Ev();
extern void _ZN10S1378C4_nt3v17Ev();
extern void _ZN10S1378C4_nt3v18Ev();
extern void _ZN10S1378C4_nt3v19Ev();
extern void _ZN10S1378C4_nt3v20Ev();
extern void _ZN10S1378C4_nt3v21Ev();
extern void _ZN10S1378C4_nt3v22Ev();
extern void _ZN10S1378C4_nt3v23Ev();
extern void _ZN10S1378C4_nt3v24Ev();
extern void _ZN10S1378C4_nt3v25Ev();
extern void _ZN10S1378C4_nt3v26Ev();
extern void _ZN10S1378C4_nt3v27Ev();
extern void _ZN10S1378C4_nt3v28Ev();
extern void _ZN10S1378C4_nt3v29Ev();
extern void _ZN10S1378C4_nt3v30Ev();
extern void _ZN10S1378C4_nt3v31Ev();
extern void _ZN10S1378C4_nt3v32Ev();
extern void _ZN10S1378C4_nt3v33Ev();
extern void _ZN10S1378C4_nt3v34Ev();
extern void _ZN10S1378C4_nt3v35Ev();
extern void _ZN10S1378C4_nt3v36Ev();
extern void _ZN10S1378C4_nt3v37Ev();
extern void _ZN10S1378C4_nt3v38Ev();
extern void _ZN10S1378C4_nt3v39Ev();
extern void _ZN10S1378C4_nt3v40Ev();
extern void _ZN10S1378C4_nt3v41Ev();
extern void _ZN10S1378C4_nt3v42Ev();
extern void _ZN10S1378C4_nt3v43Ev();
extern void _ZN10S1378C4_nt3v44Ev();
extern void _ZN10S1378C4_nt3v45Ev();
extern void _ZN10S1378C4_nt3v46Ev();
extern void _ZN10S1378C4_nt3v47Ev();
extern void _ZN10S1378C4_nt3v48Ev();
extern void _ZN10S1378C4_nt3v49Ev();
extern void _ZN10S1378C4_nt3v50Ev();
extern void _ZN10S1378C4_nt3v51Ev();
extern void _ZN10S1378C4_nt3v52Ev();
extern void _ZN10S1378C4_nt3v53Ev();
extern void _ZN10S1378C4_nt3v54Ev();
extern void _ZN10S1378C4_nt3v55Ev();
extern void _ZN10S1378C4_nt3v56Ev();
extern void _ZN10S1378C4_nt3v57Ev();
extern void _ZN10S1378C4_nt3v58Ev();
extern void _ZN10S1378C4_nt3v59Ev();
extern void _ZN10S1378C4_nt3v60Ev();
extern void _ZN10S1378C4_nt3v61Ev();
extern void _ZN10S1378C4_nt3v62Ev();
extern void _ZN10S1378C4_nt3v63Ev();
extern void _ZN10S1378C4_nt3v64Ev();
extern void _ZN10S1378C4_nt3v65Ev();
extern void _ZN10S1378C4_nt3v66Ev();
extern void _ZN10S1378C3_nt3v67Ev();
extern void _ZN10S1378C3_nt3v68Ev();
extern void _ZN10S1378C3_nt3v69Ev();
extern void _ZN10S1378C3_nt3v70Ev();
extern void _ZN10S1378C3_nt3v71Ev();
extern void _ZN10S1378C3_nt3v72Ev();
extern void _ZN10S1378C3_nt3v73Ev();
extern void _ZN10S1378C3_nt3v74Ev();
extern void _ZN10S1378C3_nt3v75Ev();
extern void _ZN10S1378C3_nt3v76Ev();
extern void _ZN10S1378C3_nt3v77Ev();
extern void _ZN10S1378C3_nt3v78Ev();
extern void _ZN10S1378C3_nt3v79Ev();
extern void _ZN10S1378C3_nt3v80Ev();
extern void _ZN10S1378C3_nt3v81Ev();
extern void _ZN10S1378C3_nt3v82Ev();
extern void _ZN10S1378C3_nt3v83Ev();
extern void _ZN10S1378C3_nt3v84Ev();
extern void _ZN10S1378C3_nt3v85Ev();
extern void _ZN10S1378C3_nt3v86Ev();
extern void _ZN10S1378C3_nt3v87Ev();
extern void _ZN10S1378C3_nt3v88Ev();
extern void _ZN10S1378C3_nt3v89Ev();
extern void _ZN10S1378C3_nt3v90Ev();
extern void _ZN10S1378C3_nt3v91Ev();
extern void _ZN10S1378C3_nt3v92Ev();
extern void _ZN10S1378C3_nt3v93Ev();
extern void _ZN10S1378C3_nt3v94Ev();
extern void _ZN10S1378C3_nt3v95Ev();
extern void _ZN10S1378C3_nt3v96Ev();
extern void _ZN10S1378C3_nt3v97Ev();
extern void _ZN10S1378C3_nt3v98Ev();
extern void _ZN10S1378C3_nt3v99Ev();
extern void _ZN10S1378C3_nt4v100Ev();
extern void _ZN10S1378C3_nt4v101Ev();
extern void _ZN10S1378C3_nt4v102Ev();
extern void _ZN10S1378C3_nt4v103Ev();
extern void _ZN10S1378C3_nt4v104Ev();
extern void _ZN10S1378C3_nt4v105Ev();
extern void _ZN10S1378C3_nt4v106Ev();
extern void _ZN10S1378C3_nt4v107Ev();
extern void _ZN10S1378C3_nt4v108Ev();
extern void _ZN10S1378C3_nt4v109Ev();
extern void _ZN10S1378C3_nt4v110Ev();
extern void _ZN10S1378C3_nt4v111Ev();
extern void _ZN10S1378C3_nt4v112Ev();
extern void _ZN10S1378C3_nt4v113Ev();
extern void _ZN10S1378C3_nt4v114Ev();
extern void _ZN10S1378C3_nt4v115Ev();
extern void _ZN10S1378C3_nt4v116Ev();
extern void _ZN10S1378C3_nt4v117Ev();
extern void _ZN10S1378C3_nt4v118Ev();
extern void _ZN10S1378C3_nt4v119Ev();
extern void _ZN10S1378C3_nt4v120Ev();
extern void _ZN10S1378C3_nt4v121Ev();
extern void _ZN10S1378C3_nt4v122Ev();
extern void _ZN10S1378C3_nt4v123Ev();
extern void _ZN10S1378C3_nt4v124Ev();
extern void _ZN10S1378C3_nt4v125Ev();
extern void _ZN10S1378C3_nt4v126Ev();
extern void _ZN10S1378C3_nt4v127Ev();
extern void _ZN10S1378C3_nt4v128Ev();
extern void _ZN10S1378C3_nt4v129Ev();
extern void _ZN10S1378C3_nt4v130Ev();
extern void _ZN10S1378C3_nt4v131Ev();
extern void _ZN10S1378C3_nt4v132Ev();
extern void _ZN10S1378C3_nt4v133Ev();
extern void _ZN10S1378C3_nt4v134Ev();
extern void _ZN10S1378C3_nt4v135Ev();
extern void _ZN10S1378C3_nt4v136Ev();
extern void _ZN10S1378C3_nt4v137Ev();
extern void _ZN10S1378C3_nt4v138Ev();
extern void _ZN10S1378C3_nt4v139Ev();
extern void _ZN10S1378C3_nt4v140Ev();
extern void _ZN10S1378C3_nt4v141Ev();
extern void _ZN10S1378C3_nt4v142Ev();
extern void _ZN10S1378C3_nt4v143Ev();
extern void _ZN10S1378C3_nt4v144Ev();
extern void _ZN10S1378C3_nt4v145Ev();
extern void _ZN10S1378C3_nt4v146Ev();
extern void _ZN10S1378C3_nt4v147Ev();
extern void _ZN10S1378C3_nt4v148Ev();
extern void _ZN10S1378C3_nt4v149Ev();
extern void _ZN10S1378C3_nt4v150Ev();
extern void _ZN10S1378C3_nt4v151Ev();
extern void _ZN10S1378C3_nt4v152Ev();
extern void _ZN10S1378C3_nt4v153Ev();
extern void _ZN10S1378C3_nt4v154Ev();
extern void _ZN10S1378C3_nt4v155Ev();
extern void _ZN10S1378C3_nt4v156Ev();
extern void _ZN10S1378C3_nt4v157Ev();
extern void _ZN10S1378C3_nt4v158Ev();
extern void _ZN10S1378C3_nt4v159Ev();
extern void _ZN10S1378C3_nt4v160Ev();
extern void _ZN10S1378C3_nt4v161Ev();
extern void _ZN10S1378C3_nt4v162Ev();
extern void _ZN10S1378C3_nt4v163Ev();
extern void _ZN10S1378C3_nt4v164Ev();
extern void _ZN10S1378C3_nt4v165Ev();
extern void _ZN10S1378C3_nt4v166Ev();
extern void _ZN10S1378C3_nt4v167Ev();
extern void _ZN10S1378C3_nt4v168Ev();
extern void _ZN10S1378C3_nt4v169Ev();
extern void _ZN10S1378C3_nt4v170Ev();
extern void _ZN10S1378C3_nt4v171Ev();
extern void _ZN10S1378C3_nt4v172Ev();
extern void _ZN10S1378C3_nt4v173Ev();
extern void _ZN10S1378C3_nt4v174Ev();
extern void _ZN10S1378C3_nt4v175Ev();
extern void _ZN10S1378C3_nt4v176Ev();
extern void _ZN10S1378C3_nt4v177Ev();
extern void _ZN10S1378C3_nt4v178Ev();
extern void _ZN10S1378C3_nt4v179Ev();
extern void _ZN10S1378C3_nt4v180Ev();
extern void _ZN10S1378C3_nt4v181Ev();
extern void _ZN10S1378C3_nt4v182Ev();
extern void _ZN10S1378C3_nt4v183Ev();
extern void _ZN10S1378C3_nt4v184Ev();
extern void _ZN10S1378C3_nt4v185Ev();
extern void _ZN10S1378C3_nt4v186Ev();
extern void _ZN10S1378C3_nt4v187Ev();
extern void _ZN10S1378C3_nt4v188Ev();
extern void _ZN10S1378C3_nt4v189Ev();
extern void _ZN10S1378C3_nt4v190Ev();
extern void _ZN10S1378C3_nt4v191Ev();
extern void _ZN10S1378C3_nt4v192Ev();
extern void _ZN10S1378C3_nt4v193Ev();
extern void _ZN10S1378C3_nt4v194Ev();
extern void _ZN10S1378C3_nt4v195Ev();
extern void _ZN10S1378C3_nt4v196Ev();
extern void _ZN10S1378C3_nt4v197Ev();
extern void _ZN10S1378C3_nt4v198Ev();
extern void _ZN10S1378C3_nt4v199Ev();
extern void _ZN10S1378C3_nt4v200Ev();
extern void _ZN10S1378C3_nt4v201Ev();
extern void _ZN10S1378C3_nt4v202Ev();
extern void _ZN10S1378C3_nt4v203Ev();
extern void _ZN10S1378C3_nt4v204Ev();
extern void _ZN10S1378C3_nt4v205Ev();
extern void _ZN10S1378C3_nt4v206Ev();
extern void _ZN10S1378C3_nt4v207Ev();
extern void _ZN10S1378C3_nt4v208Ev();
extern void _ZN10S1378C3_nt4v209Ev();
extern void _ZN10S1378C2_nt4v210Ev();
extern void _ZN10S1378C2_nt4v211Ev();
extern void _ZN7S1378C12v1Ev();
extern void _ZN7S1378C12v2Ev();
static  VTBL_ENTRY vtc_S1378C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1378C1[0]),
  (VTBL_ENTRY)&_ZN7S1378C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1378C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1378C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1378C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1378C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S1378C2_nt4v211Ev,
  (VTBL_ENTRY)&_ZN7S1378C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1378C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1378C1[];
extern  VTBL_ENTRY _ZTV7S1378C1[];
Class_Descriptor cd_S1378C1 = {  "S1378C1", // class name
  bases_S1378C1, 3,
  &(vtc_S1378C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(632,476), // object size
  NSPAIRA(_ZTI7S1378C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1378C1),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  S5166C6_nt  {
  void  mf5166c6(); // _ZN10S5166C6_nt8mf5166c6Ev
};
//SIG(-1 S5166C6_nt) C1{ m}


void  S5166C6_nt ::mf5166c6(){}

//skip512 S5166C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5166C5_nt  {
  void *s5166c5f0;
  int s5166c5f1;
  ::S5166C6_nt s5166c5f2;
  ::S5166C6_nt s5166c5f3;
  void  mf5166c5(); // _ZN10S5166C5_nt8mf5166c5Ev
};
//SIG(-1 S5166C5_nt) C1{ m Fp Fi FC2{ m} FC2}


void  S5166C5_nt ::mf5166c5(){}

//skip512 S5166C5_nt

#else // __cplusplus

Class_Descriptor cd_S5166C5_nt = {  "S5166C5_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  S5166C4_nt  : S5166C5_nt {
};
//SIG(-1 S5166C4_nt) C1{ BC2{ m Fp Fi FC3{ m} FC3}}



//skip512 S5166C4_nt

#else // __cplusplus

extern Class_Descriptor cd_S5166C5_nt;
static Base_Class bases_S5166C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S5166C3_nt  {
  void *s5166c3f0;
  int s5166c3f1;
  ::S5166C4_nt s5166c3f2;
  ::S5166C4_nt s5166c3f3;
  int s5166c3f4;
  virtual  ~S5166C3_nt(); // _ZN10S5166C3_ntD1Ev
  virtual void  v4(); // _ZN10S5166C3_nt2v4Ev
  virtual void  v5(); // _ZN10S5166C3_nt2v5Ev
  virtual void  v6(); // _ZN10S5166C3_nt2v6Ev
  virtual void  v7(); // _ZN10S5166C3_nt2v7Ev
  virtual void  v8(); // _ZN10S5166C3_nt2v8Ev
  virtual void  v9(); // _ZN10S5166C3_nt2v9Ev
  virtual void  v10(); // _ZN10S5166C3_nt3v10Ev
  virtual void  v11(); // _ZN10S5166C3_nt3v11Ev
  virtual void  v12(); // _ZN10S5166C3_nt3v12Ev
  virtual void  v13(); // _ZN10S5166C3_nt3v13Ev
  virtual void  v14(); // _ZN10S5166C3_nt3v14Ev
  virtual void  v15(); // _ZN10S5166C3_nt3v15Ev
  virtual void  v16(); // _ZN10S5166C3_nt3v16Ev
  virtual void  v17(); // _ZN10S5166C3_nt3v17Ev
  virtual void  v18(); // _ZN10S5166C3_nt3v18Ev
  virtual void  v19(); // _ZN10S5166C3_nt3v19Ev
  virtual void  v20(); // _ZN10S5166C3_nt3v20Ev
  virtual void  v21(); // _ZN10S5166C3_nt3v21Ev
  virtual void  v22(); // _ZN10S5166C3_nt3v22Ev
  virtual void  v23(); // _ZN10S5166C3_nt3v23Ev
  virtual void  v24(); // _ZN10S5166C3_nt3v24Ev
  virtual void  v25(); // _ZN10S5166C3_nt3v25Ev
  virtual void  v26(); // _ZN10S5166C3_nt3v26Ev
  S5166C3_nt(); // tgen
};
//SIG(-1 S5166C3_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp Fi FC2{ BC3{ m Fp Fi FC4{ m} FC4}} FC2 Fi}


 S5166C3_nt ::~S5166C3_nt(){ note_dtor("S5166C3_nt", this);}
void  S5166C3_nt ::v4(){vfunc_called(this, "_ZN10S5166C3_nt2v4Ev");}
void  S5166C3_nt ::v5(){vfunc_called(this, "_ZN10S5166C3_nt2v5Ev");}
void  S5166C3_nt ::v6(){vfunc_called(this, "_ZN10S5166C3_nt2v6Ev");}
void  S5166C3_nt ::v7(){vfunc_called(this, "_ZN10S5166C3_nt2v7Ev");}
void  S5166C3_nt ::v8(){vfunc_called(this, "_ZN10S5166C3_nt2v8Ev");}
void  S5166C3_nt ::v9(){vfunc_called(this, "_ZN10S5166C3_nt2v9Ev");}
void  S5166C3_nt ::v10(){vfunc_called(this, "_ZN10S5166C3_nt3v10Ev");}
void  S5166C3_nt ::v11(){vfunc_called(this, "_ZN10S5166C3_nt3v11Ev");}
void  S5166C3_nt ::v12(){vfunc_called(this, "_ZN10S5166C3_nt3v12Ev");}
void  S5166C3_nt ::v13(){vfunc_called(this, "_ZN10S5166C3_nt3v13Ev");}
void  S5166C3_nt ::v14(){vfunc_called(this, "_ZN10S5166C3_nt3v14Ev");}
void  S5166C3_nt ::v15(){vfunc_called(this, "_ZN10S5166C3_nt3v15Ev");}
void  S5166C3_nt ::v16(){vfunc_called(this, "_ZN10S5166C3_nt3v16Ev");}
void  S5166C3_nt ::v17(){vfunc_called(this, "_ZN10S5166C3_nt3v17Ev");}
void  S5166C3_nt ::v18(){vfunc_called(this, "_ZN10S5166C3_nt3v18Ev");}
void  S5166C3_nt ::v19(){vfunc_called(this, "_ZN10S5166C3_nt3v19Ev");}
void  S5166C3_nt ::v20(){vfunc_called(this, "_ZN10S5166C3_nt3v20Ev");}
void  S5166C3_nt ::v21(){vfunc_called(this, "_ZN10S5166C3_nt3v21Ev");}
void  S5166C3_nt ::v22(){vfunc_called(this, "_ZN10S5166C3_nt3v22Ev");}
void  S5166C3_nt ::v23(){vfunc_called(this, "_ZN10S5166C3_nt3v23Ev");}
void  S5166C3_nt ::v24(){vfunc_called(this, "_ZN10S5166C3_nt3v24Ev");}
void  S5166C3_nt ::v25(){vfunc_called(this, "_ZN10S5166C3_nt3v25Ev");}
void  S5166C3_nt ::v26(){vfunc_called(this, "_ZN10S5166C3_nt3v26Ev");}
S5166C3_nt ::S5166C3_nt(){ note_ctor("S5166C3_nt", this);} // tgen

//skip512 S5166C3_nt

#else // __cplusplus

extern void _ZN10S5166C3_ntC1Ev();
extern void _ZN10S5166C3_ntD1Ev();
Name_Map name_map_S5166C3_nt[] = {
  NSPAIR(_ZN10S5166C3_ntC1Ev),
  NSPAIR(_ZN10S5166C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S5166C3_nt[];
extern void _ZN10S5166C3_ntD1Ev();
extern void _ZN10S5166C3_ntD0Ev();
extern void _ZN10S5166C3_nt2v4Ev();
extern void _ZN10S5166C3_nt2v5Ev();
extern void _ZN10S5166C3_nt2v6Ev();
extern void _ZN10S5166C3_nt2v7Ev();
extern void _ZN10S5166C3_nt2v8Ev();
extern void _ZN10S5166C3_nt2v9Ev();
extern void _ZN10S5166C3_nt3v10Ev();
extern void _ZN10S5166C3_nt3v11Ev();
extern void _ZN10S5166C3_nt3v12Ev();
extern void _ZN10S5166C3_nt3v13Ev();
extern void _ZN10S5166C3_nt3v14Ev();
extern void _ZN10S5166C3_nt3v15Ev();
extern void _ZN10S5166C3_nt3v16Ev();
extern void _ZN10S5166C3_nt3v17Ev();
extern void _ZN10S5166C3_nt3v18Ev();
extern void _ZN10S5166C3_nt3v19Ev();
extern void _ZN10S5166C3_nt3v20Ev();
extern void _ZN10S5166C3_nt3v21Ev();
extern void _ZN10S5166C3_nt3v22Ev();
extern void _ZN10S5166C3_nt3v23Ev();
extern void _ZN10S5166C3_nt3v24Ev();
extern void _ZN10S5166C3_nt3v25Ev();
extern void _ZN10S5166C3_nt3v26Ev();
static  VTBL_ENTRY vtc_S5166C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5166C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S5166C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v26Ev,
};
extern VTBL_ENTRY _ZTI10S5166C3_nt[];
VTBL_ENTRY *P__ZTI10S5166C3_nt = _ZTI10S5166C3_nt; 
extern  VTBL_ENTRY _ZTV10S5166C3_nt[];
Class_Descriptor cd_S5166C3_nt = {  "S5166C3_nt", // class name
  0,0,//no base classes
  &(vtc_S5166C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI10S5166C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S5166C3_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  S5166C13_nt  {
  __tsi64 s5166c13f0[2];
  void  mf5166c13(); // _ZN11S5166C13_nt9mf5166c13Ev
};
//SIG(-1 S5166C13_nt) C1{ m FL[2]}


void  S5166C13_nt ::mf5166c13(){}

//skip512 S5166C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5166C12_nt  {
  ::S5166C13_nt s5166c12f0;
  void  mf5166c12(); // _ZN11S5166C12_nt9mf5166c12Ev
};
//SIG(-1 S5166C12_nt) C1{ m FC2{ m FL[2]}}


void  S5166C12_nt ::mf5166c12(){}

//skip512 S5166C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5166C16_nt  {
  ::S5166C12_nt s5166c16f0;
  void  mf5166c16(); // _ZN11S5166C16_nt9mf5166c16Ev
};
//SIG(-1 S5166C16_nt) C1{ m FC2{ m FC3{ m FL[2]}}}


void  S5166C16_nt ::mf5166c16(){}

//skip512 S5166C16_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5166C17_nt  {
  ::S5166C12_nt s5166c17f0;
  ::S5166C12_nt s5166c17f1;
  ::S5166C12_nt s5166c17f2;
  ::S5166C12_nt s5166c17f3;
  void  mf5166c17(); // _ZN11S5166C17_nt9mf5166c17Ev
};
//SIG(-1 S5166C17_nt) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC2 FC2}


void  S5166C17_nt ::mf5166c17(){}

//skip512 S5166C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5166C20  {
  void  mf5166c20(); // _ZN8S5166C209mf5166c20Ev
};
//SIG(-1 S5166C20) C1{ m}


void  S5166C20 ::mf5166c20(){}

static void Test_S5166C20()
{
  {
    init_simple_test("S5166C20");
    S5166C20 lv;
    check2(sizeof(lv), 1, "sizeof(S5166C20)");
    check2(__alignof__(lv), 1, "__alignof__(S5166C20)");
  }
}
static Arrange_To_Call_Me vS5166C20(Test_S5166C20, "S5166C20", 1);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5166C19_nt  {
  void *s5166c19f0;
  int s5166c19f1;
  ::S5166C20 s5166c19f2;
  void  mf5166c19(); // _ZN11S5166C19_nt9mf5166c19Ev
};
//SIG(-1 S5166C19_nt) C1{ m Fp Fi FC2{ m}}


void  S5166C19_nt ::mf5166c19(){}

//skip512 S5166C19_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5166C18_nt  {
  ::S5166C19_nt s5166c18f0;
  int s5166c18f1;
  void  mf5166c18(); // _ZN11S5166C18_nt9mf5166c18Ev
};
//SIG(-1 S5166C18_nt) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S5166C18_nt ::mf5166c18(){}

//skip512 S5166C18_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5166C23  {
  void  mf5166c23(); // _ZN8S5166C239mf5166c23Ev
};
//SIG(-1 S5166C23) C1{ m}


void  S5166C23 ::mf5166c23(){}

static void Test_S5166C23()
{
  {
    init_simple_test("S5166C23");
    S5166C23 lv;
    check2(sizeof(lv), 1, "sizeof(S5166C23)");
    check2(__alignof__(lv), 1, "__alignof__(S5166C23)");
  }
}
static Arrange_To_Call_Me vS5166C23(Test_S5166C23, "S5166C23", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S5166C23[];
VTBL_ENTRY *P__ZTI8S5166C23 = _ZTI8S5166C23; 
Class_Descriptor cd_S5166C23 = {  "S5166C23", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S5166C23),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  S5166C21  {
  void *s5166c21f0;
  int s5166c21f1;
  ::S5166C20 s5166c21f2;
  ::S5166C23 s5166c21f3;
  void  mf5166c21(); // _ZN8S5166C219mf5166c21Ev
};
//SIG(-1 S5166C21) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S5166C21 ::mf5166c21(){}

static void Test_S5166C21()
{
  {
    init_simple_test("S5166C21");
    S5166C21 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S5166C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5166C21)");
    check_field_offset(lv, s5166c21f0, 0, "S5166C21.s5166c21f0");
    check_field_offset(lv, s5166c21f1, ABISELECT(8,4), "S5166C21.s5166c21f1");
    check_field_offset(lv, s5166c21f2, ABISELECT(12,8), "S5166C21.s5166c21f2");
    check_field_offset(lv, s5166c21f3, ABISELECT(13,9), "S5166C21.s5166c21f3");
  }
}
static Arrange_To_Call_Me vS5166C21(Test_S5166C21, "S5166C21", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5166C27  {
  void  mf5166c27(); // _ZN8S5166C279mf5166c27Ev
};
//SIG(-1 S5166C27) C1{ m}


void  S5166C27 ::mf5166c27(){}

static void Test_S5166C27()
{
  {
    init_simple_test("S5166C27");
    S5166C27 lv;
    check2(sizeof(lv), 1, "sizeof(S5166C27)");
    check2(__alignof__(lv), 1, "__alignof__(S5166C27)");
  }
}
static Arrange_To_Call_Me vS5166C27(Test_S5166C27, "S5166C27", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S5166C27[];
VTBL_ENTRY *P__ZTI8S5166C27 = _ZTI8S5166C27; 
Class_Descriptor cd_S5166C27 = {  "S5166C27", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S5166C27),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  S5166C25  {
  void *s5166c25f0;
  int s5166c25f1;
  ::S5166C23 s5166c25f2;
  ::S5166C27 s5166c25f3;
  void  mf5166c25(); // _ZN8S5166C259mf5166c25Ev
};
//SIG(-1 S5166C25) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S5166C25 ::mf5166c25(){}

static void Test_S5166C25()
{
  {
    init_simple_test("S5166C25");
    S5166C25 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S5166C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5166C25)");
    check_field_offset(lv, s5166c25f0, 0, "S5166C25.s5166c25f0");
    check_field_offset(lv, s5166c25f1, ABISELECT(8,4), "S5166C25.s5166c25f1");
    check_field_offset(lv, s5166c25f2, ABISELECT(12,8), "S5166C25.s5166c25f2");
    check_field_offset(lv, s5166c25f3, ABISELECT(13,9), "S5166C25.s5166c25f3");
  }
}
static Arrange_To_Call_Me vS5166C25(Test_S5166C25, "S5166C25", ABISELECT(16,12));

#else // __cplusplus

Class_Descriptor cd_S5166C25 = {  "S5166C25", // 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  S5166C24  : S5166C25 {
};
//SIG(-1 S5166C24) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



static void Test_S5166C24()
{
  extern Class_Descriptor cd_S5166C24;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S5166C24, buf);
    S5166C24 &lv = *(new (buf) S5166C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S5166C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5166C24)");
    check_base_class_offset(lv, (S5166C25*), 0, "S5166C24");
    test_class_info(&lv, &cd_S5166C24);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5166C24(Test_S5166C24, "S5166C24", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S5166C25;
static Base_Class bases_S5166C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S5166C24 = {  "S5166C24", // class name
  bases_S5166C24, 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  S5166C28_nt  {
  void *s5166c28f0;
  int s5166c28f1[2];
  ::S5166C27 s5166c28f2;
  void  mf5166c28(); // _ZN11S5166C28_nt9mf5166c28Ev
};
//SIG(-1 S5166C28_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S5166C28_nt ::mf5166c28(){}

//skip512 S5166C28_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S5166C37  {
  void  mf5166c37(); // _ZN8S5166C379mf5166c37Ev
};
//SIG(-1 S5166C37) C1{ m}


void  S5166C37 ::mf5166c37(){}

static void Test_S5166C37()
{
  {
    init_simple_test("S5166C37");
    S5166C37 lv;
    check2(sizeof(lv), 1, "sizeof(S5166C37)");
    check2(__alignof__(lv), 1, "__alignof__(S5166C37)");
  }
}
static Arrange_To_Call_Me vS5166C37(Test_S5166C37, "S5166C37", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S5166C37[];
VTBL_ENTRY *P__ZTI8S5166C37 = _ZTI8S5166C37; 
Class_Descriptor cd_S5166C37 = {  "S5166C37", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S5166C37),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  S5166C36  {
  void *s5166c36f0;
  int s5166c36f1[2];
  ::S5166C37 s5166c36f2;
  void  mf5166c36(); // _ZN8S5166C369mf5166c36Ev
};
//SIG(-1 S5166C36) C1{ m Fp Fi[2] FC2{ m}}


void  S5166C36 ::mf5166c36(){}

static void Test_S5166C36()
{
  {
    init_simple_test("S5166C36");
    S5166C36 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S5166C36)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5166C36)");
    check_field_offset(lv, s5166c36f0, 0, "S5166C36.s5166c36f0");
    check_field_offset(lv, s5166c36f1, ABISELECT(8,4), "S5166C36.s5166c36f1");
    check_field_offset(lv, s5166c36f2, ABISELECT(16,12), "S5166C36.s5166c36f2");
  }
}
static Arrange_To_Call_Me vS5166C36(Test_S5166C36, "S5166C36", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5166C2_nt  : S5166C3_nt {
  ::S5166C12_nt s5166c2f0;
  ::S5166C12_nt s5166c2f1;
  ::S5166C12_nt s5166c2f2;
  ::S5166C12_nt s5166c2f3;
  ::S5166C16_nt s5166c2f4;
  ::S5166C17_nt s5166c2f5;
  ::S5166C17_nt s5166c2f6;
  ::S5166C12_nt s5166c2f7;
  ::S5166C12_nt s5166c2f8;
  ::S5166C12_nt s5166c2f9;
  void *s5166c2f10;
  ::S5166C16_nt s5166c2f11;
  ::S5166C18_nt s5166c2f12;
  int s5166c2f13;
  void *s5166c2f14[7];
  ::S5166C21 s5166c2f15;
  int s5166c2f16:8;
  int s5166c2f17:8;
  int s5166c2f18:16;
  int s5166c2f19:16;
  int s5166c2f20:8;
  int s5166c2f21:8;
  int s5166c2f22:8;
  int s5166c2f23:32;
  int s5166c2f24:8;
  int s5166c2f25:4;
  int s5166c2f26:4;
  int s5166c2f27:4;
  int s5166c2f28:4;
  int s5166c2f29:4;
  int s5166c2f30:4;
  int s5166c2f31:4;
  int s5166c2f32:4;
  int s5166c2f33:4;
  int s5166c2f34:4;
  unsigned char s5166c2f35:1;
  unsigned char s5166c2f36:1;
  unsigned char s5166c2f37:1;
  unsigned char s5166c2f38:1;
  unsigned char s5166c2f39:1;
  unsigned char s5166c2f40:1;
  unsigned char s5166c2f41:1;
  unsigned char s5166c2f42:1;
  unsigned char s5166c2f43:1;
  unsigned char s5166c2f44:1;
  unsigned char s5166c2f45:1;
  unsigned char s5166c2f46:1;
  unsigned char s5166c2f47:1;
  unsigned char s5166c2f48:1;
  unsigned char s5166c2f49:1;
  unsigned char s5166c2f50:1;
  unsigned char s5166c2f51:1;
  unsigned char s5166c2f52:1;
  unsigned char s5166c2f53:1;
  unsigned char s5166c2f54:1;
  unsigned char s5166c2f55:1;
  unsigned char s5166c2f56:1;
  unsigned char s5166c2f57:1;
  unsigned char s5166c2f58:1;
  unsigned char s5166c2f59:1;
  unsigned char s5166c2f60:1;
  unsigned char s5166c2f61:1;
  unsigned char s5166c2f62:1;
  unsigned char s5166c2f63:1;
  unsigned char s5166c2f64:1;
  unsigned char s5166c2f65:1;
  unsigned char s5166c2f66:1;
  unsigned char s5166c2f67:1;
  unsigned char s5166c2f68:1;
  unsigned char s5166c2f69:1;
  unsigned char s5166c2f70:1;
  unsigned char s5166c2f71:1;
  unsigned char s5166c2f72:1;
  unsigned char s5166c2f73:1;
  unsigned char s5166c2f74:1;
  unsigned char s5166c2f75:1;
  int s5166c2f76[7];
  void *s5166c2f77[6];
  int s5166c2f78:8;
  int s5166c2f79:8;
  int s5166c2f80:8;
  int s5166c2f81:8;
  int s5166c2f82:8;
  int s5166c2f83:8;
  ::S5166C24 s5166c2f84;
  void *s5166c2f85[4];
  int s5166c2f86:8;
  int s5166c2f87:8;
  int s5166c2f88:8;
  int s5166c2f89:8;
  int s5166c2f90:8;
  int s5166c2f91:16;
  int s5166c2f92:16;
  int s5166c2f93:16;
  int s5166c2f94:4;
  int s5166c2f95:4;
  int s5166c2f96:4;
  int s5166c2f97:4;
  int s5166c2f98:4;
  int s5166c2f99:4;
  int s5166c2f100:4;
  int s5166c2f101:4;
  int s5166c2f102:4;
  int s5166c2f103:4;
  int s5166c2f104:4;
  int s5166c2f105:4;
  int s5166c2f106:8;
  int s5166c2f107:8;
  int s5166c2f108:8;
  void *s5166c2f109[7];
  ::S5166C28_nt s5166c2f110;
  void *s5166c2f111[2];
  int s5166c2f112:16;
  int s5166c2f113:16;
  ::S5166C24 s5166c2f114;
  ::S5166C28_nt s5166c2f115;
  ::S5166C36 s5166c2f116;
  void *s5166c2f117[2];
  int s5166c2f118:24;
  int s5166c2f119:8;
  void *s5166c2f120;
  virtual  ~S5166C2_nt(); // _ZN10S5166C2_ntD1Ev
  virtual void  v27(); // _ZN10S5166C2_nt3v27Ev
  virtual void  v28(); // _ZN10S5166C2_nt3v28Ev
  virtual void  v29(); // _ZN10S5166C2_nt3v29Ev
  virtual void  v30(); // _ZN10S5166C2_nt3v30Ev
  virtual void  v31(); // _ZN10S5166C2_nt3v31Ev
  virtual void  v32(); // _ZN10S5166C2_nt3v32Ev
  virtual void  v33(); // _ZN10S5166C2_nt3v33Ev
  virtual void  v34(); // _ZN10S5166C2_nt3v34Ev
  virtual void  v35(); // _ZN10S5166C2_nt3v35Ev
  virtual void  v36(); // _ZN10S5166C2_nt3v36Ev
  virtual void  v37(); // _ZN10S5166C2_nt3v37Ev
  virtual void  v38(); // _ZN10S5166C2_nt3v38Ev
  virtual void  v39(); // _ZN10S5166C2_nt3v39Ev
  virtual void  v40(); // _ZN10S5166C2_nt3v40Ev
  virtual void  v41(); // _ZN10S5166C2_nt3v41Ev
  virtual void  v42(); // _ZN10S5166C2_nt3v42Ev
  virtual void  v43(); // _ZN10S5166C2_nt3v43Ev
  virtual void  v44(); // _ZN10S5166C2_nt3v44Ev
  virtual void  v45(); // _ZN10S5166C2_nt3v45Ev
  virtual void  v46(); // _ZN10S5166C2_nt3v46Ev
  virtual void  v47(); // _ZN10S5166C2_nt3v47Ev
  virtual void  v48(); // _ZN10S5166C2_nt3v48Ev
  virtual void  v49(); // _ZN10S5166C2_nt3v49Ev
  virtual void  v50(); // _ZN10S5166C2_nt3v50Ev
  virtual void  v51(); // _ZN10S5166C2_nt3v51Ev
  virtual void  v52(); // _ZN10S5166C2_nt3v52Ev
  virtual void  v53(); // _ZN10S5166C2_nt3v53Ev
  virtual void  v54(); // _ZN10S5166C2_nt3v54Ev
  virtual void  v55(); // _ZN10S5166C2_nt3v55Ev
  virtual void  v56(); // _ZN10S5166C2_nt3v56Ev
  virtual void  v57(); // _ZN10S5166C2_nt3v57Ev
  virtual void  v58(); // _ZN10S5166C2_nt3v58Ev
  virtual void  v59(); // _ZN10S5166C2_nt3v59Ev
  virtual void  v60(); // _ZN10S5166C2_nt3v60Ev
  virtual void  v61(); // _ZN10S5166C2_nt3v61Ev
  virtual void  v62(); // _ZN10S5166C2_nt3v62Ev
  virtual void  v63(); // _ZN10S5166C2_nt3v63Ev
  virtual void  v64(); // _ZN10S5166C2_nt3v64Ev
  virtual void  v65(); // _ZN10S5166C2_nt3v65Ev
  virtual void  v66(); // _ZN10S5166C2_nt3v66Ev
  virtual void  v67(); // _ZN10S5166C2_nt3v67Ev
  virtual void  v68(); // _ZN10S5166C2_nt3v68Ev
  virtual void  v69(); // _ZN10S5166C2_nt3v69Ev
  virtual void  v70(); // _ZN10S5166C2_nt3v70Ev
  virtual void  v71(); // _ZN10S5166C2_nt3v71Ev
  virtual void  v72(); // _ZN10S5166C2_nt3v72Ev
  virtual void  v73(); // _ZN10S5166C2_nt3v73Ev
  virtual void  v74(); // _ZN10S5166C2_nt3v74Ev
  virtual void  v75(); // _ZN10S5166C2_nt3v75Ev
  virtual void  v76(); // _ZN10S5166C2_nt3v76Ev
  virtual void  v77(); // _ZN10S5166C2_nt3v77Ev
  virtual void  v78(); // _ZN10S5166C2_nt3v78Ev
  virtual void  v79(); // _ZN10S5166C2_nt3v79Ev
  virtual void  v80(); // _ZN10S5166C2_nt3v80Ev
  virtual void  v81(); // _ZN10S5166C2_nt3v81Ev
  virtual void  v82(); // _ZN10S5166C2_nt3v82Ev
  virtual void  v83(); // _ZN10S5166C2_nt3v83Ev
  virtual void  v84(); // _ZN10S5166C2_nt3v84Ev
  virtual void  v85(); // _ZN10S5166C2_nt3v85Ev
  virtual void  v86(); // _ZN10S5166C2_nt3v86Ev
  virtual void  v87(); // _ZN10S5166C2_nt3v87Ev
  virtual void  v88(); // _ZN10S5166C2_nt3v88Ev
  virtual void  v89(); // _ZN10S5166C2_nt3v89Ev
  virtual void  v90(); // _ZN10S5166C2_nt3v90Ev
  virtual void  v91(); // _ZN10S5166C2_nt3v91Ev
  virtual void  v92(); // _ZN10S5166C2_nt3v92Ev
  virtual void  v93(); // _ZN10S5166C2_nt3v93Ev
  virtual void  v94(); // _ZN10S5166C2_nt3v94Ev
  virtual void  v95(); // _ZN10S5166C2_nt3v95Ev
  virtual void  v96(); // _ZN10S5166C2_nt3v96Ev
  virtual void  v97(); // _ZN10S5166C2_nt3v97Ev
  virtual void  v98(); // _ZN10S5166C2_nt3v98Ev
  virtual void  v99(); // _ZN10S5166C2_nt3v99Ev
  virtual void  v100(); // _ZN10S5166C2_nt4v100Ev
  virtual void  v101(); // _ZN10S5166C2_nt4v101Ev
  virtual void  v102(); // _ZN10S5166C2_nt4v102Ev
  virtual void  v103(); // _ZN10S5166C2_nt4v103Ev
  virtual void  v104(); // _ZN10S5166C2_nt4v104Ev
  S5166C2_nt(); // tgen
};
//SIG(-1 S5166C2_nt) C1{ BC2{ vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 Fp Fi FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC3 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 FC6{ m FC7{ m FL[2]}} FC6 FC6 FC6 FC8{ m FC6} FC9{ m FC6 FC6 FC6 FC6} FC9 FC6 FC6 FC6 Fp FC8 FC10{ m FC11{ m Fp Fi FC12{ m}} Fi} Fi Fp[7] FC13{ m Fp Fi FC12 FC14{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC15{ BC16{ m Fp Fi FC14 FC17{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC18{ m Fp Fi[2] FC17} Fp[2] Fi:16 Fi:16 FC15 FC18 FC19{ m Fp Fi[2] FC20{ m}} Fp[2] Fi:24 Fi:8 Fp}


 S5166C2_nt ::~S5166C2_nt(){ note_dtor("S5166C2_nt", this);}
void  S5166C2_nt ::v27(){vfunc_called(this, "_ZN10S5166C2_nt3v27Ev");}
void  S5166C2_nt ::v28(){vfunc_called(this, "_ZN10S5166C2_nt3v28Ev");}
void  S5166C2_nt ::v29(){vfunc_called(this, "_ZN10S5166C2_nt3v29Ev");}
void  S5166C2_nt ::v30(){vfunc_called(this, "_ZN10S5166C2_nt3v30Ev");}
void  S5166C2_nt ::v31(){vfunc_called(this, "_ZN10S5166C2_nt3v31Ev");}
void  S5166C2_nt ::v32(){vfunc_called(this, "_ZN10S5166C2_nt3v32Ev");}
void  S5166C2_nt ::v33(){vfunc_called(this, "_ZN10S5166C2_nt3v33Ev");}
void  S5166C2_nt ::v34(){vfunc_called(this, "_ZN10S5166C2_nt3v34Ev");}
void  S5166C2_nt ::v35(){vfunc_called(this, "_ZN10S5166C2_nt3v35Ev");}
void  S5166C2_nt ::v36(){vfunc_called(this, "_ZN10S5166C2_nt3v36Ev");}
void  S5166C2_nt ::v37(){vfunc_called(this, "_ZN10S5166C2_nt3v37Ev");}
void  S5166C2_nt ::v38(){vfunc_called(this, "_ZN10S5166C2_nt3v38Ev");}
void  S5166C2_nt ::v39(){vfunc_called(this, "_ZN10S5166C2_nt3v39Ev");}
void  S5166C2_nt ::v40(){vfunc_called(this, "_ZN10S5166C2_nt3v40Ev");}
void  S5166C2_nt ::v41(){vfunc_called(this, "_ZN10S5166C2_nt3v41Ev");}
void  S5166C2_nt ::v42(){vfunc_called(this, "_ZN10S5166C2_nt3v42Ev");}
void  S5166C2_nt ::v43(){vfunc_called(this, "_ZN10S5166C2_nt3v43Ev");}
void  S5166C2_nt ::v44(){vfunc_called(this, "_ZN10S5166C2_nt3v44Ev");}
void  S5166C2_nt ::v45(){vfunc_called(this, "_ZN10S5166C2_nt3v45Ev");}
void  S5166C2_nt ::v46(){vfunc_called(this, "_ZN10S5166C2_nt3v46Ev");}
void  S5166C2_nt ::v47(){vfunc_called(this, "_ZN10S5166C2_nt3v47Ev");}
void  S5166C2_nt ::v48(){vfunc_called(this, "_ZN10S5166C2_nt3v48Ev");}
void  S5166C2_nt ::v49(){vfunc_called(this, "_ZN10S5166C2_nt3v49Ev");}
void  S5166C2_nt ::v50(){vfunc_called(this, "_ZN10S5166C2_nt3v50Ev");}
void  S5166C2_nt ::v51(){vfunc_called(this, "_ZN10S5166C2_nt3v51Ev");}
void  S5166C2_nt ::v52(){vfunc_called(this, "_ZN10S5166C2_nt3v52Ev");}
void  S5166C2_nt ::v53(){vfunc_called(this, "_ZN10S5166C2_nt3v53Ev");}
void  S5166C2_nt ::v54(){vfunc_called(this, "_ZN10S5166C2_nt3v54Ev");}
void  S5166C2_nt ::v55(){vfunc_called(this, "_ZN10S5166C2_nt3v55Ev");}
void  S5166C2_nt ::v56(){vfunc_called(this, "_ZN10S5166C2_nt3v56Ev");}
void  S5166C2_nt ::v57(){vfunc_called(this, "_ZN10S5166C2_nt3v57Ev");}
void  S5166C2_nt ::v58(){vfunc_called(this, "_ZN10S5166C2_nt3v58Ev");}
void  S5166C2_nt ::v59(){vfunc_called(this, "_ZN10S5166C2_nt3v59Ev");}
void  S5166C2_nt ::v60(){vfunc_called(this, "_ZN10S5166C2_nt3v60Ev");}
void  S5166C2_nt ::v61(){vfunc_called(this, "_ZN10S5166C2_nt3v61Ev");}
void  S5166C2_nt ::v62(){vfunc_called(this, "_ZN10S5166C2_nt3v62Ev");}
void  S5166C2_nt ::v63(){vfunc_called(this, "_ZN10S5166C2_nt3v63Ev");}
void  S5166C2_nt ::v64(){vfunc_called(this, "_ZN10S5166C2_nt3v64Ev");}
void  S5166C2_nt ::v65(){vfunc_called(this, "_ZN10S5166C2_nt3v65Ev");}
void  S5166C2_nt ::v66(){vfunc_called(this, "_ZN10S5166C2_nt3v66Ev");}
void  S5166C2_nt ::v67(){vfunc_called(this, "_ZN10S5166C2_nt3v67Ev");}
void  S5166C2_nt ::v68(){vfunc_called(this, "_ZN10S5166C2_nt3v68Ev");}
void  S5166C2_nt ::v69(){vfunc_called(this, "_ZN10S5166C2_nt3v69Ev");}
void  S5166C2_nt ::v70(){vfunc_called(this, "_ZN10S5166C2_nt3v70Ev");}
void  S5166C2_nt ::v71(){vfunc_called(this, "_ZN10S5166C2_nt3v71Ev");}
void  S5166C2_nt ::v72(){vfunc_called(this, "_ZN10S5166C2_nt3v72Ev");}
void  S5166C2_nt ::v73(){vfunc_called(this, "_ZN10S5166C2_nt3v73Ev");}
void  S5166C2_nt ::v74(){vfunc_called(this, "_ZN10S5166C2_nt3v74Ev");}
void  S5166C2_nt ::v75(){vfunc_called(this, "_ZN10S5166C2_nt3v75Ev");}
void  S5166C2_nt ::v76(){vfunc_called(this, "_ZN10S5166C2_nt3v76Ev");}
void  S5166C2_nt ::v77(){vfunc_called(this, "_ZN10S5166C2_nt3v77Ev");}
void  S5166C2_nt ::v78(){vfunc_called(this, "_ZN10S5166C2_nt3v78Ev");}
void  S5166C2_nt ::v79(){vfunc_called(this, "_ZN10S5166C2_nt3v79Ev");}
void  S5166C2_nt ::v80(){vfunc_called(this, "_ZN10S5166C2_nt3v80Ev");}
void  S5166C2_nt ::v81(){vfunc_called(this, "_ZN10S5166C2_nt3v81Ev");}
void  S5166C2_nt ::v82(){vfunc_called(this, "_ZN10S5166C2_nt3v82Ev");}
void  S5166C2_nt ::v83(){vfunc_called(this, "_ZN10S5166C2_nt3v83Ev");}
void  S5166C2_nt ::v84(){vfunc_called(this, "_ZN10S5166C2_nt3v84Ev");}
void  S5166C2_nt ::v85(){vfunc_called(this, "_ZN10S5166C2_nt3v85Ev");}
void  S5166C2_nt ::v86(){vfunc_called(this, "_ZN10S5166C2_nt3v86Ev");}
void  S5166C2_nt ::v87(){vfunc_called(this, "_ZN10S5166C2_nt3v87Ev");}
void  S5166C2_nt ::v88(){vfunc_called(this, "_ZN10S5166C2_nt3v88Ev");}
void  S5166C2_nt ::v89(){vfunc_called(this, "_ZN10S5166C2_nt3v89Ev");}
void  S5166C2_nt ::v90(){vfunc_called(this, "_ZN10S5166C2_nt3v90Ev");}
void  S5166C2_nt ::v91(){vfunc_called(this, "_ZN10S5166C2_nt3v91Ev");}
void  S5166C2_nt ::v92(){vfunc_called(this, "_ZN10S5166C2_nt3v92Ev");}
void  S5166C2_nt ::v93(){vfunc_called(this, "_ZN10S5166C2_nt3v93Ev");}
void  S5166C2_nt ::v94(){vfunc_called(this, "_ZN10S5166C2_nt3v94Ev");}
void  S5166C2_nt ::v95(){vfunc_called(this, "_ZN10S5166C2_nt3v95Ev");}
void  S5166C2_nt ::v96(){vfunc_called(this, "_ZN10S5166C2_nt3v96Ev");}
void  S5166C2_nt ::v97(){vfunc_called(this, "_ZN10S5166C2_nt3v97Ev");}
void  S5166C2_nt ::v98(){vfunc_called(this, "_ZN10S5166C2_nt3v98Ev");}
void  S5166C2_nt ::v99(){vfunc_called(this, "_ZN10S5166C2_nt3v99Ev");}
void  S5166C2_nt ::v100(){vfunc_called(this, "_ZN10S5166C2_nt4v100Ev");}
void  S5166C2_nt ::v101(){vfunc_called(this, "_ZN10S5166C2_nt4v101Ev");}
void  S5166C2_nt ::v102(){vfunc_called(this, "_ZN10S5166C2_nt4v102Ev");}
void  S5166C2_nt ::v103(){vfunc_called(this, "_ZN10S5166C2_nt4v103Ev");}
void  S5166C2_nt ::v104(){vfunc_called(this, "_ZN10S5166C2_nt4v104Ev");}
S5166C2_nt ::S5166C2_nt(){ note_ctor("S5166C2_nt", this);} // tgen

//skip512 S5166C2_nt

#else // __cplusplus

extern void _ZN10S5166C2_ntC1Ev();
extern void _ZN10S5166C2_ntD1Ev();
Name_Map name_map_S5166C2_nt[] = {
  NSPAIR(_ZN10S5166C2_ntC1Ev),
  NSPAIR(_ZN10S5166C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C3_nt;
extern VTBL_ENTRY _ZTI10S5166C3_nt[];
extern  VTBL_ENTRY _ZTV10S5166C3_nt[];
static Base_Class bases_S5166C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI10S5166C2_nt[];
extern void _ZN10S5166C2_ntD1Ev();
extern void _ZN10S5166C2_ntD0Ev();
extern void _ZN10S5166C3_nt2v4Ev();
extern void _ZN10S5166C3_nt2v5Ev();
extern void _ZN10S5166C3_nt2v6Ev();
extern void _ZN10S5166C3_nt2v7Ev();
extern void _ZN10S5166C3_nt2v8Ev();
extern void _ZN10S5166C3_nt2v9Ev();
extern void _ZN10S5166C3_nt3v10Ev();
extern void _ZN10S5166C3_nt3v11Ev();
extern void _ZN10S5166C3_nt3v12Ev();
extern void _ZN10S5166C3_nt3v13Ev();
extern void _ZN10S5166C3_nt3v14Ev();
extern void _ZN10S5166C3_nt3v15Ev();
extern void _ZN10S5166C3_nt3v16Ev();
extern void _ZN10S5166C3_nt3v17Ev();
extern void _ZN10S5166C3_nt3v18Ev();
extern void _ZN10S5166C3_nt3v19Ev();
extern void _ZN10S5166C3_nt3v20Ev();
extern void _ZN10S5166C3_nt3v21Ev();
extern void _ZN10S5166C3_nt3v22Ev();
extern void _ZN10S5166C3_nt3v23Ev();
extern void _ZN10S5166C3_nt3v24Ev();
extern void _ZN10S5166C3_nt3v25Ev();
extern void _ZN10S5166C3_nt3v26Ev();
extern void _ZN10S5166C2_nt3v27Ev();
extern void _ZN10S5166C2_nt3v28Ev();
extern void _ZN10S5166C2_nt3v29Ev();
extern void _ZN10S5166C2_nt3v30Ev();
extern void _ZN10S5166C2_nt3v31Ev();
extern void _ZN10S5166C2_nt3v32Ev();
extern void _ZN10S5166C2_nt3v33Ev();
extern void _ZN10S5166C2_nt3v34Ev();
extern void _ZN10S5166C2_nt3v35Ev();
extern void _ZN10S5166C2_nt3v36Ev();
extern void _ZN10S5166C2_nt3v37Ev();
extern void _ZN10S5166C2_nt3v38Ev();
extern void _ZN10S5166C2_nt3v39Ev();
extern void _ZN10S5166C2_nt3v40Ev();
extern void _ZN10S5166C2_nt3v41Ev();
extern void _ZN10S5166C2_nt3v42Ev();
extern void _ZN10S5166C2_nt3v43Ev();
extern void _ZN10S5166C2_nt3v44Ev();
extern void _ZN10S5166C2_nt3v45Ev();
extern void _ZN10S5166C2_nt3v46Ev();
extern void _ZN10S5166C2_nt3v47Ev();
extern void _ZN10S5166C2_nt3v48Ev();
extern void _ZN10S5166C2_nt3v49Ev();
extern void _ZN10S5166C2_nt3v50Ev();
extern void _ZN10S5166C2_nt3v51Ev();
extern void _ZN10S5166C2_nt3v52Ev();
extern void _ZN10S5166C2_nt3v53Ev();
extern void _ZN10S5166C2_nt3v54Ev();
extern void _ZN10S5166C2_nt3v55Ev();
extern void _ZN10S5166C2_nt3v56Ev();
extern void _ZN10S5166C2_nt3v57Ev();
extern void _ZN10S5166C2_nt3v58Ev();
extern void _ZN10S5166C2_nt3v59Ev();
extern void _ZN10S5166C2_nt3v60Ev();
extern void _ZN10S5166C2_nt3v61Ev();
extern void _ZN10S5166C2_nt3v62Ev();
extern void _ZN10S5166C2_nt3v63Ev();
extern void _ZN10S5166C2_nt3v64Ev();
extern void _ZN10S5166C2_nt3v65Ev();
extern void _ZN10S5166C2_nt3v66Ev();
extern void _ZN10S5166C2_nt3v67Ev();
extern void _ZN10S5166C2_nt3v68Ev();
extern void _ZN10S5166C2_nt3v69Ev();
extern void _ZN10S5166C2_nt3v70Ev();
extern void _ZN10S5166C2_nt3v71Ev();
extern void _ZN10S5166C2_nt3v72Ev();
extern void _ZN10S5166C2_nt3v73Ev();
extern void _ZN10S5166C2_nt3v74Ev();
extern void _ZN10S5166C2_nt3v75Ev();
extern void _ZN10S5166C2_nt3v76Ev();
extern void _ZN10S5166C2_nt3v77Ev();
extern void _ZN10S5166C2_nt3v78Ev();
extern void _ZN10S5166C2_nt3v79Ev();
extern void _ZN10S5166C2_nt3v80Ev();
extern void _ZN10S5166C2_nt3v81Ev();
extern void _ZN10S5166C2_nt3v82Ev();
extern void _ZN10S5166C2_nt3v83Ev();
extern void _ZN10S5166C2_nt3v84Ev();
extern void _ZN10S5166C2_nt3v85Ev();
extern void _ZN10S5166C2_nt3v86Ev();
extern void _ZN10S5166C2_nt3v87Ev();
extern void _ZN10S5166C2_nt3v88Ev();
extern void _ZN10S5166C2_nt3v89Ev();
extern void _ZN10S5166C2_nt3v90Ev();
extern void _ZN10S5166C2_nt3v91Ev();
extern void _ZN10S5166C2_nt3v92Ev();
extern void _ZN10S5166C2_nt3v93Ev();
extern void _ZN10S5166C2_nt3v94Ev();
extern void _ZN10S5166C2_nt3v95Ev();
extern void _ZN10S5166C2_nt3v96Ev();
extern void _ZN10S5166C2_nt3v97Ev();
extern void _ZN10S5166C2_nt3v98Ev();
extern void _ZN10S5166C2_nt3v99Ev();
extern void _ZN10S5166C2_nt4v100Ev();
extern void _ZN10S5166C2_nt4v101Ev();
extern void _ZN10S5166C2_nt4v102Ev();
extern void _ZN10S5166C2_nt4v103Ev();
extern void _ZN10S5166C2_nt4v104Ev();
static  VTBL_ENTRY vtc_S5166C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5166C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S5166C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt4v104Ev,
};
extern VTBL_ENTRY _ZTI10S5166C2_nt[];
VTBL_ENTRY *P__ZTI10S5166C2_nt = _ZTI10S5166C2_nt; 
extern  VTBL_ENTRY _ZTV10S5166C2_nt[];
Class_Descriptor cd_S5166C2_nt = {  "S5166C2_nt", // class name
  bases_S5166C2_nt, 1,
  &(vtc_S5166C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,632), // object size
  NSPAIRA(_ZTI10S5166C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S5166C2_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  S5166C38_nt  {
  int s5166c38f0[3];
  char s5166c38f1;
  int s5166c38f2:4;
  int s5166c38f3:4;
  unsigned char s5166c38f4:1;
  unsigned char s5166c38f5:1;
  unsigned char s5166c38f6:1;
  unsigned char s5166c38f7:1;
  int s5166c38f8:8;
  int s5166c38f9:4;
  void *s5166c38f10;
  int s5166c38f11;
  void  mf5166c38(); // _ZN11S5166C38_nt9mf5166c38Ev
  virtual  ~S5166C38_nt(); // _ZN11S5166C38_ntD1Ev
  S5166C38_nt(); // tgen
};
//SIG(-1 S5166C38_nt) C1{ vd m Fi[3] Fc Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fi:8 Fi:4 Fp Fi}


void  S5166C38_nt ::mf5166c38(){}
 S5166C38_nt ::~S5166C38_nt(){ note_dtor("S5166C38_nt", this);}
S5166C38_nt ::S5166C38_nt(){ note_ctor("S5166C38_nt", this);} // tgen

//skip512 S5166C38_nt

#else // __cplusplus

extern void _ZN11S5166C38_ntC1Ev();
extern void _ZN11S5166C38_ntD1Ev();
Name_Map name_map_S5166C38_nt[] = {
  NSPAIR(_ZN11S5166C38_ntC1Ev),
  NSPAIR(_ZN11S5166C38_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S5166C38_nt[];
extern void _ZN11S5166C38_ntD1Ev();
extern void _ZN11S5166C38_ntD0Ev();
static  VTBL_ENTRY vtc_S5166C38_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S5166C38_nt[0]),
  (VTBL_ENTRY)&_ZN11S5166C38_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S5166C38_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S5166C38_nt[];
VTBL_ENTRY *P__ZTI11S5166C38_nt = _ZTI11S5166C38_nt; 
extern  VTBL_ENTRY _ZTV11S5166C38_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5166C1  : S5166C2_nt {
  int s5166c1f0;
  char s5166c1f1;
  void *s5166c1f2;
  int s5166c1f3[7];
  char s5166c1f4;
  int s5166c1f5[2];
  char s5166c1f6;
  int s5166c1f7;
  char s5166c1f8[4];
  int s5166c1f9;
  void *s5166c1f10[4];
  int s5166c1f11[3];
  ::S5166C38_nt s5166c1f12;
  ::S5166C38_nt s5166c1f13;
  virtual  ~S5166C1(); // _ZN7S5166C1D1Ev
  virtual void  v1(); // _ZN7S5166C12v1Ev
  virtual void  v2(); // _ZN7S5166C12v2Ev
  virtual void  v3(); // _ZN7S5166C12v3Ev
  S5166C1(); // tgen
};
//SIG(1 S5166C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fp Fi FC4{ BC5{ m Fp Fi FC6{ m} FC6}} FC4 Fi} 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 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 FC7{ m FC8{ m FL[2]}} FC7 FC7 FC7 FC9{ m FC7} FC10{ m FC7 FC7 FC7 FC7} FC10 FC7 FC7 FC7 Fp FC9 FC11{ m FC12{ m Fp Fi FC13{ m}} Fi} Fi Fp[7] FC14{ m Fp Fi FC13 FC15{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC16{ BC17{ m Fp Fi FC15 FC18{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC19{ m Fp Fi[2] FC18} Fp[2] Fi:16 Fi:16 FC16 FC19 FC20{ m Fp Fi[2] FC21{ m}} Fp[2] Fi:24 Fi:8 Fp} vd v1 v2 v3 Fi Fc Fp Fi[7] Fc Fi[2] Fc Fi Fc[4] Fi Fp[4] Fi[3] FC22{ vd m Fi[3] Fc Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fi:8 Fi:4 Fp Fi} FC22}


 S5166C1 ::~S5166C1(){ note_dtor("S5166C1", this);}
void  S5166C1 ::v1(){vfunc_called(this, "_ZN7S5166C12v1Ev");}
void  S5166C1 ::v2(){vfunc_called(this, "_ZN7S5166C12v2Ev");}
void  S5166C1 ::v3(){vfunc_called(this, "_ZN7S5166C12v3Ev");}
S5166C1 ::S5166C1(){ note_ctor("S5166C1", this);} // tgen

static void Test_S5166C1()
{
  extern Class_Descriptor cd_S5166C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(130,197)];
    init_test(&cd_S5166C1, buf);
    S5166C1 *dp, &lv = *(dp=new (buf) S5166C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1032,784), "sizeof(S5166C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5166C1)");
    check_base_class_offset(lv, (S5166C3_nt*)(S5166C2_nt*), 0, "S5166C1");
    check_base_class_offset(lv, (S5166C2_nt*), 0, "S5166C1");
    check_field_offset(lv, s5166c1f0, ABISELECT(832,632), "S5166C1.s5166c1f0");
    check_field_offset(lv, s5166c1f1, ABISELECT(836,636), "S5166C1.s5166c1f1");
    check_field_offset(lv, s5166c1f2, ABISELECT(840,640), "S5166C1.s5166c1f2");
    check_field_offset(lv, s5166c1f3, ABISELECT(848,644), "S5166C1.s5166c1f3");
    check_field_offset(lv, s5166c1f4, ABISELECT(876,672), "S5166C1.s5166c1f4");
    check_field_offset(lv, s5166c1f5, ABISELECT(880,676), "S5166C1.s5166c1f5");
    check_field_offset(lv, s5166c1f6, ABISELECT(888,684), "S5166C1.s5166c1f6");
    check_field_offset(lv, s5166c1f7, ABISELECT(892,688), "S5166C1.s5166c1f7");
    check_field_offset(lv, s5166c1f8, ABISELECT(896,692), "S5166C1.s5166c1f8");
    check_field_offset(lv, s5166c1f9, ABISELECT(900,696), "S5166C1.s5166c1f9");
    check_field_offset(lv, s5166c1f10, ABISELECT(904,700), "S5166C1.s5166c1f10");
    check_field_offset(lv, s5166c1f11, ABISELECT(936,716), "S5166C1.s5166c1f11");
    check_field_offset(lv, s5166c1f12, ABISELECT(952,728), "S5166C1.s5166c1f12");
    check_field_offset(lv, s5166c1f13, ABISELECT(992,756), "S5166C1.s5166c1f13");
    test_class_info(&lv, &cd_S5166C1);
    dp->~S5166C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5166C1(Test_S5166C1, "S5166C1", ABISELECT(1032,784));

#else // __cplusplus

extern void _ZN7S5166C1C1Ev();
extern void _ZN7S5166C1D1Ev();
Name_Map name_map_S5166C1[] = {
  NSPAIR(_ZN7S5166C1C1Ev),
  NSPAIR(_ZN7S5166C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C3_nt;
extern VTBL_ENTRY _ZTI10S5166C3_nt[];
extern  VTBL_ENTRY _ZTV10S5166C3_nt[];
extern Class_Descriptor cd_S5166C2_nt;
extern VTBL_ENTRY _ZTI10S5166C2_nt[];
extern  VTBL_ENTRY _ZTV10S5166C2_nt[];
static Base_Class bases_S5166C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5166C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5166C1[];
extern void _ZN7S5166C1D1Ev();
extern void _ZN7S5166C1D0Ev();
extern void _ZN10S5166C3_nt2v4Ev();
extern void _ZN10S5166C3_nt2v5Ev();
extern void _ZN10S5166C3_nt2v6Ev();
extern void _ZN10S5166C3_nt2v7Ev();
extern void _ZN10S5166C3_nt2v8Ev();
extern void _ZN10S5166C3_nt2v9Ev();
extern void _ZN10S5166C3_nt3v10Ev();
extern void _ZN10S5166C3_nt3v11Ev();
extern void _ZN10S5166C3_nt3v12Ev();
extern void _ZN10S5166C3_nt3v13Ev();
extern void _ZN10S5166C3_nt3v14Ev();
extern void _ZN10S5166C3_nt3v15Ev();
extern void _ZN10S5166C3_nt3v16Ev();
extern void _ZN10S5166C3_nt3v17Ev();
extern void _ZN10S5166C3_nt3v18Ev();
extern void _ZN10S5166C3_nt3v19Ev();
extern void _ZN10S5166C3_nt3v20Ev();
extern void _ZN10S5166C3_nt3v21Ev();
extern void _ZN10S5166C3_nt3v22Ev();
extern void _ZN10S5166C3_nt3v23Ev();
extern void _ZN10S5166C3_nt3v24Ev();
extern void _ZN10S5166C3_nt3v25Ev();
extern void _ZN10S5166C3_nt3v26Ev();
extern void _ZN10S5166C2_nt3v27Ev();
extern void _ZN10S5166C2_nt3v28Ev();
extern void _ZN10S5166C2_nt3v29Ev();
extern void _ZN10S5166C2_nt3v30Ev();
extern void _ZN10S5166C2_nt3v31Ev();
extern void _ZN10S5166C2_nt3v32Ev();
extern void _ZN10S5166C2_nt3v33Ev();
extern void _ZN10S5166C2_nt3v34Ev();
extern void _ZN10S5166C2_nt3v35Ev();
extern void _ZN10S5166C2_nt3v36Ev();
extern void _ZN10S5166C2_nt3v37Ev();
extern void _ZN10S5166C2_nt3v38Ev();
extern void _ZN10S5166C2_nt3v39Ev();
extern void _ZN10S5166C2_nt3v40Ev();
extern void _ZN10S5166C2_nt3v41Ev();
extern void _ZN10S5166C2_nt3v42Ev();
extern void _ZN10S5166C2_nt3v43Ev();
extern void _ZN10S5166C2_nt3v44Ev();
extern void _ZN10S5166C2_nt3v45Ev();
extern void _ZN10S5166C2_nt3v46Ev();
extern void _ZN10S5166C2_nt3v47Ev();
extern void _ZN10S5166C2_nt3v48Ev();
extern void _ZN10S5166C2_nt3v49Ev();
extern void _ZN10S5166C2_nt3v50Ev();
extern void _ZN10S5166C2_nt3v51Ev();
extern void _ZN10S5166C2_nt3v52Ev();
extern void _ZN10S5166C2_nt3v53Ev();
extern void _ZN10S5166C2_nt3v54Ev();
extern void _ZN10S5166C2_nt3v55Ev();
extern void _ZN10S5166C2_nt3v56Ev();
extern void _ZN10S5166C2_nt3v57Ev();
extern void _ZN10S5166C2_nt3v58Ev();
extern void _ZN10S5166C2_nt3v59Ev();
extern void _ZN10S5166C2_nt3v60Ev();
extern void _ZN10S5166C2_nt3v61Ev();
extern void _ZN10S5166C2_nt3v62Ev();
extern void _ZN10S5166C2_nt3v63Ev();
extern void _ZN10S5166C2_nt3v64Ev();
extern void _ZN10S5166C2_nt3v65Ev();
extern void _ZN10S5166C2_nt3v66Ev();
extern void _ZN10S5166C2_nt3v67Ev();
extern void _ZN10S5166C2_nt3v68Ev();
extern void _ZN10S5166C2_nt3v69Ev();
extern void _ZN10S5166C2_nt3v70Ev();
extern void _ZN10S5166C2_nt3v71Ev();
extern void _ZN10S5166C2_nt3v72Ev();
extern void _ZN10S5166C2_nt3v73Ev();
extern void _ZN10S5166C2_nt3v74Ev();
extern void _ZN10S5166C2_nt3v75Ev();
extern void _ZN10S5166C2_nt3v76Ev();
extern void _ZN10S5166C2_nt3v77Ev();
extern void _ZN10S5166C2_nt3v78Ev();
extern void _ZN10S5166C2_nt3v79Ev();
extern void _ZN10S5166C2_nt3v80Ev();
extern void _ZN10S5166C2_nt3v81Ev();
extern void _ZN10S5166C2_nt3v82Ev();
extern void _ZN10S5166C2_nt3v83Ev();
extern void _ZN10S5166C2_nt3v84Ev();
extern void _ZN10S5166C2_nt3v85Ev();
extern void _ZN10S5166C2_nt3v86Ev();
extern void _ZN10S5166C2_nt3v87Ev();
extern void _ZN10S5166C2_nt3v88Ev();
extern void _ZN10S5166C2_nt3v89Ev();
extern void _ZN10S5166C2_nt3v90Ev();
extern void _ZN10S5166C2_nt3v91Ev();
extern void _ZN10S5166C2_nt3v92Ev();
extern void _ZN10S5166C2_nt3v93Ev();
extern void _ZN10S5166C2_nt3v94Ev();
extern void _ZN10S5166C2_nt3v95Ev();
extern void _ZN10S5166C2_nt3v96Ev();
extern void _ZN10S5166C2_nt3v97Ev();
extern void _ZN10S5166C2_nt3v98Ev();
extern void _ZN10S5166C2_nt3v99Ev();
extern void _ZN10S5166C2_nt4v100Ev();
extern void _ZN10S5166C2_nt4v101Ev();
extern void _ZN10S5166C2_nt4v102Ev();
extern void _ZN10S5166C2_nt4v103Ev();
extern void _ZN10S5166C2_nt4v104Ev();
extern void _ZN7S5166C12v1Ev();
extern void _ZN7S5166C12v2Ev();
extern void _ZN7S5166C12v3Ev();
static  VTBL_ENTRY vtc_S5166C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5166C1[0]),
  (VTBL_ENTRY)&_ZN7S5166C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5166C1D0Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S5166C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S5166C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN7S5166C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5166C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5166C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5166C1[];
extern  VTBL_ENTRY _ZTV7S5166C1[];
Class_Descriptor cd_S5166C1 = {  "S5166C1", // class name
  bases_S5166C1, 2,
  &(vtc_S5166C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1032,784), // object size
  NSPAIRA(_ZTI7S5166C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5166C1),108, //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  S1C11_nt  {
  void *s1c11f0;
  int s1c11f1;
  void  mf1c11(); // _ZN8S1C11_nt6mf1c11Ev
  virtual  ~S1C11_nt(); // _ZN8S1C11_ntD1Ev
  S1C11_nt(); // tgen
};
//SIG(-1 S1C11_nt) C1{ vd m Fp Fi}


void  S1C11_nt ::mf1c11(){}
 S1C11_nt ::~S1C11_nt(){ note_dtor("S1C11_nt", this);}
S1C11_nt ::S1C11_nt(){ note_ctor("S1C11_nt", this);} // tgen

//skip512 S1C11_nt

#else // __cplusplus

extern void _ZN8S1C11_ntC1Ev();
extern void _ZN8S1C11_ntD1Ev();
Name_Map name_map_S1C11_nt[] = {
  NSPAIR(_ZN8S1C11_ntC1Ev),
  NSPAIR(_ZN8S1C11_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern void _ZN8S1C11_ntD1Ev();
extern void _ZN8S1C11_ntD0Ev();
static  VTBL_ENTRY vtc_S1C11_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1C11_nt[0]),
  (VTBL_ENTRY)&_ZN8S1C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN8S1C11_ntD0Ev,
};
extern VTBL_ENTRY _ZTI8S1C11_nt[];
VTBL_ENTRY *P__ZTI8S1C11_nt = _ZTI8S1C11_nt; 
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
Class_Descriptor cd_S1C11_nt = {  "S1C11_nt", // class name
  0,0,//no base classes
  &(vtc_S1C11_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S1C11_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1C11_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  S1C10  : S1C11_nt {
  virtual void  v5(); // _ZN5S1C102v5Ev
  virtual void  v6(); // _ZN5S1C102v6Ev
  virtual void  v7(); // _ZN5S1C102v7Ev
  virtual void  v8(); // _ZN5S1C102v8Ev
  virtual void  v9(); // _ZN5S1C102v9Ev
  virtual void  v10(); // _ZN5S1C103v10Ev
  virtual void  v11(); // _ZN5S1C103v11Ev
  virtual void  v12(); // _ZN5S1C103v12Ev
  virtual void  v13(); // _ZN5S1C103v13Ev
  virtual void  v14(); // _ZN5S1C103v14Ev
  virtual void  v15(); // _ZN5S1C103v15Ev
  virtual void  v16(); // _ZN5S1C103v16Ev
  virtual void  v17(); // _ZN5S1C103v17Ev
  virtual void  v18(); // _ZN5S1C103v18Ev
  virtual void  v19(); // _ZN5S1C103v19Ev
  virtual void  v20(); // _ZN5S1C103v20Ev
  virtual void  v21(); // _ZN5S1C103v21Ev
  virtual void  v22(); // _ZN5S1C103v22Ev
  virtual void  v23(); // _ZN5S1C103v23Ev
  virtual void  v24(); // _ZN5S1C103v24Ev
  virtual void  v25(); // _ZN5S1C103v25Ev
  virtual void  v26(); // _ZN5S1C103v26Ev
  virtual void  v27(); // _ZN5S1C103v27Ev
  virtual void  v28(); // _ZN5S1C103v28Ev
  virtual void  v29(); // _ZN5S1C103v29Ev
  virtual void  v30(); // _ZN5S1C103v30Ev
  virtual void  v31(); // _ZN5S1C103v31Ev
  virtual void  v32(); // _ZN5S1C103v32Ev
  virtual void  v33(); // _ZN5S1C103v33Ev
  virtual void  v34(); // _ZN5S1C103v34Ev
  virtual void  v35(); // _ZN5S1C103v35Ev
  virtual void  v36(); // _ZN5S1C103v36Ev
  virtual void  v37(); // _ZN5S1C103v37Ev
  virtual void  v38(); // _ZN5S1C103v38Ev
  virtual void  v39(); // _ZN5S1C103v39Ev
  virtual void  v40(); // _ZN5S1C103v40Ev
  virtual void  v41(); // _ZN5S1C103v41Ev
  virtual void  v42(); // _ZN5S1C103v42Ev
  virtual void  v43(); // _ZN5S1C103v43Ev
  virtual void  v44(); // _ZN5S1C103v44Ev
  virtual void  v45(); // _ZN5S1C103v45Ev
  virtual void  v46(); // _ZN5S1C103v46Ev
  virtual void  v47(); // _ZN5S1C103v47Ev
  virtual void  v48(); // _ZN5S1C103v48Ev
  virtual void  v49(); // _ZN5S1C103v49Ev
  virtual void  v50(); // _ZN5S1C103v50Ev
  virtual void  v51(); // _ZN5S1C103v51Ev
  virtual void  v52(); // _ZN5S1C103v52Ev
  virtual void  v53(); // _ZN5S1C103v53Ev
  virtual void  v54(); // _ZN5S1C103v54Ev
  virtual void  v55(); // _ZN5S1C103v55Ev
  virtual void  v56(); // _ZN5S1C103v56Ev
  virtual void  v57(); // _ZN5S1C103v57Ev
  virtual void  v58(); // _ZN5S1C103v58Ev
  virtual void  v59(); // _ZN5S1C103v59Ev
  virtual void  v60(); // _ZN5S1C103v60Ev
  virtual void  v61(); // _ZN5S1C103v61Ev
  virtual void  v62(); // _ZN5S1C103v62Ev
  virtual void  v63(); // _ZN5S1C103v63Ev
  virtual void  v64(); // _ZN5S1C103v64Ev
  virtual void  v65(); // _ZN5S1C103v65Ev
  virtual void  v66(); // _ZN5S1C103v66Ev
  virtual void  v67(); // _ZN5S1C103v67Ev
  virtual void  v68(); // _ZN5S1C103v68Ev
  virtual void  v69(); // _ZN5S1C103v69Ev
  virtual void  v70(); // _ZN5S1C103v70Ev
  virtual void  v71(); // _ZN5S1C103v71Ev
  virtual void  v72(); // _ZN5S1C103v72Ev
  virtual void  v73(); // _ZN5S1C103v73Ev
  virtual void  v74(); // _ZN5S1C103v74Ev
  virtual void  v75(); // _ZN5S1C103v75Ev
  virtual void  v76(); // _ZN5S1C103v76Ev
  virtual void  v77(); // _ZN5S1C103v77Ev
  virtual void  v78(); // _ZN5S1C103v78Ev
  virtual void  v79(); // _ZN5S1C103v79Ev
  virtual void  v80(); // _ZN5S1C103v80Ev
  virtual void  v81(); // _ZN5S1C103v81Ev
  virtual void  v82(); // _ZN5S1C103v82Ev
  virtual void  v83(); // _ZN5S1C103v83Ev
  virtual void  v84(); // _ZN5S1C103v84Ev
  virtual void  v85(); // _ZN5S1C103v85Ev
  virtual void  v86(); // _ZN5S1C103v86Ev
  virtual void  v87(); // _ZN5S1C103v87Ev
  virtual void  v88(); // _ZN5S1C103v88Ev
  virtual void  v89(); // _ZN5S1C103v89Ev
  virtual void  v90(); // _ZN5S1C103v90Ev
  virtual void  v91(); // _ZN5S1C103v91Ev
  virtual void  v92(); // _ZN5S1C103v92Ev
  virtual void  v93(); // _ZN5S1C103v93Ev
  virtual void  v94(); // _ZN5S1C103v94Ev
  virtual void  v95(); // _ZN5S1C103v95Ev
  virtual void  v96(); // _ZN5S1C103v96Ev
  virtual void  v97(); // _ZN5S1C103v97Ev
  virtual void  v98(); // _ZN5S1C103v98Ev
  virtual void  v99(); // _ZN5S1C103v99Ev
  virtual void  v100(); // _ZN5S1C104v100Ev
  virtual void  v101(); // _ZN5S1C104v101Ev
  virtual void  v102(); // _ZN5S1C104v102Ev
  virtual void  v103(); // _ZN5S1C104v103Ev
  virtual void  v104(); // _ZN5S1C104v104Ev
  virtual void  v105(); // _ZN5S1C104v105Ev
  virtual void  v106(); // _ZN5S1C104v106Ev
  virtual void  v107(); // _ZN5S1C104v107Ev
  virtual void  v108(); // _ZN5S1C104v108Ev
  virtual void  v109(); // _ZN5S1C104v109Ev
  virtual void  v110(); // _ZN5S1C104v110Ev
  virtual void  v111(); // _ZN5S1C104v111Ev
  ~S1C10(); // tgen
  S1C10(); // tgen
};
//SIG(-1 S1C10) C1{ BC2{ vd m Fp Fi} 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 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}


void  S1C10 ::v5(){vfunc_called(this, "_ZN5S1C102v5Ev");}
void  S1C10 ::v6(){vfunc_called(this, "_ZN5S1C102v6Ev");}
void  S1C10 ::v7(){vfunc_called(this, "_ZN5S1C102v7Ev");}
void  S1C10 ::v8(){vfunc_called(this, "_ZN5S1C102v8Ev");}
void  S1C10 ::v9(){vfunc_called(this, "_ZN5S1C102v9Ev");}
void  S1C10 ::v10(){vfunc_called(this, "_ZN5S1C103v10Ev");}
void  S1C10 ::v11(){vfunc_called(this, "_ZN5S1C103v11Ev");}
void  S1C10 ::v12(){vfunc_called(this, "_ZN5S1C103v12Ev");}
void  S1C10 ::v13(){vfunc_called(this, "_ZN5S1C103v13Ev");}
void  S1C10 ::v14(){vfunc_called(this, "_ZN5S1C103v14Ev");}
void  S1C10 ::v15(){vfunc_called(this, "_ZN5S1C103v15Ev");}
void  S1C10 ::v16(){vfunc_called(this, "_ZN5S1C103v16Ev");}
void  S1C10 ::v17(){vfunc_called(this, "_ZN5S1C103v17Ev");}
void  S1C10 ::v18(){vfunc_called(this, "_ZN5S1C103v18Ev");}
void  S1C10 ::v19(){vfunc_called(this, "_ZN5S1C103v19Ev");}
void  S1C10 ::v20(){vfunc_called(this, "_ZN5S1C103v20Ev");}
void  S1C10 ::v21(){vfunc_called(this, "_ZN5S1C103v21Ev");}
void  S1C10 ::v22(){vfunc_called(this, "_ZN5S1C103v22Ev");}
void  S1C10 ::v23(){vfunc_called(this, "_ZN5S1C103v23Ev");}
void  S1C10 ::v24(){vfunc_called(this, "_ZN5S1C103v24Ev");}
void  S1C10 ::v25(){vfunc_called(this, "_ZN5S1C103v25Ev");}
void  S1C10 ::v26(){vfunc_called(this, "_ZN5S1C103v26Ev");}
void  S1C10 ::v27(){vfunc_called(this, "_ZN5S1C103v27Ev");}
void  S1C10 ::v28(){vfunc_called(this, "_ZN5S1C103v28Ev");}
void  S1C10 ::v29(){vfunc_called(this, "_ZN5S1C103v29Ev");}
void  S1C10 ::v30(){vfunc_called(this, "_ZN5S1C103v30Ev");}
void  S1C10 ::v31(){vfunc_called(this, "_ZN5S1C103v31Ev");}
void  S1C10 ::v32(){vfunc_called(this, "_ZN5S1C103v32Ev");}
void  S1C10 ::v33(){vfunc_called(this, "_ZN5S1C103v33Ev");}
void  S1C10 ::v34(){vfunc_called(this, "_ZN5S1C103v34Ev");}
void  S1C10 ::v35(){vfunc_called(this, "_ZN5S1C103v35Ev");}
void  S1C10 ::v36(){vfunc_called(this, "_ZN5S1C103v36Ev");}
void  S1C10 ::v37(){vfunc_called(this, "_ZN5S1C103v37Ev");}
void  S1C10 ::v38(){vfunc_called(this, "_ZN5S1C103v38Ev");}
void  S1C10 ::v39(){vfunc_called(this, "_ZN5S1C103v39Ev");}
void  S1C10 ::v40(){vfunc_called(this, "_ZN5S1C103v40Ev");}
void  S1C10 ::v41(){vfunc_called(this, "_ZN5S1C103v41Ev");}
void  S1C10 ::v42(){vfunc_called(this, "_ZN5S1C103v42Ev");}
void  S1C10 ::v43(){vfunc_called(this, "_ZN5S1C103v43Ev");}
void  S1C10 ::v44(){vfunc_called(this, "_ZN5S1C103v44Ev");}
void  S1C10 ::v45(){vfunc_called(this, "_ZN5S1C103v45Ev");}
void  S1C10 ::v46(){vfunc_called(this, "_ZN5S1C103v46Ev");}
void  S1C10 ::v47(){vfunc_called(this, "_ZN5S1C103v47Ev");}
void  S1C10 ::v48(){vfunc_called(this, "_ZN5S1C103v48Ev");}
void  S1C10 ::v49(){vfunc_called(this, "_ZN5S1C103v49Ev");}
void  S1C10 ::v50(){vfunc_called(this, "_ZN5S1C103v50Ev");}
void  S1C10 ::v51(){vfunc_called(this, "_ZN5S1C103v51Ev");}
void  S1C10 ::v52(){vfunc_called(this, "_ZN5S1C103v52Ev");}
void  S1C10 ::v53(){vfunc_called(this, "_ZN5S1C103v53Ev");}
void  S1C10 ::v54(){vfunc_called(this, "_ZN5S1C103v54Ev");}
void  S1C10 ::v55(){vfunc_called(this, "_ZN5S1C103v55Ev");}
void  S1C10 ::v56(){vfunc_called(this, "_ZN5S1C103v56Ev");}
void  S1C10 ::v57(){vfunc_called(this, "_ZN5S1C103v57Ev");}
void  S1C10 ::v58(){vfunc_called(this, "_ZN5S1C103v58Ev");}
void  S1C10 ::v59(){vfunc_called(this, "_ZN5S1C103v59Ev");}
void  S1C10 ::v60(){vfunc_called(this, "_ZN5S1C103v60Ev");}
void  S1C10 ::v61(){vfunc_called(this, "_ZN5S1C103v61Ev");}
void  S1C10 ::v62(){vfunc_called(this, "_ZN5S1C103v62Ev");}
void  S1C10 ::v63(){vfunc_called(this, "_ZN5S1C103v63Ev");}
void  S1C10 ::v64(){vfunc_called(this, "_ZN5S1C103v64Ev");}
void  S1C10 ::v65(){vfunc_called(this, "_ZN5S1C103v65Ev");}
void  S1C10 ::v66(){vfunc_called(this, "_ZN5S1C103v66Ev");}
void  S1C10 ::v67(){vfunc_called(this, "_ZN5S1C103v67Ev");}
void  S1C10 ::v68(){vfunc_called(this, "_ZN5S1C103v68Ev");}
void  S1C10 ::v69(){vfunc_called(this, "_ZN5S1C103v69Ev");}
void  S1C10 ::v70(){vfunc_called(this, "_ZN5S1C103v70Ev");}
void  S1C10 ::v71(){vfunc_called(this, "_ZN5S1C103v71Ev");}
void  S1C10 ::v72(){vfunc_called(this, "_ZN5S1C103v72Ev");}
void  S1C10 ::v73(){vfunc_called(this, "_ZN5S1C103v73Ev");}
void  S1C10 ::v74(){vfunc_called(this, "_ZN5S1C103v74Ev");}
void  S1C10 ::v75(){vfunc_called(this, "_ZN5S1C103v75Ev");}
void  S1C10 ::v76(){vfunc_called(this, "_ZN5S1C103v76Ev");}
void  S1C10 ::v77(){vfunc_called(this, "_ZN5S1C103v77Ev");}
void  S1C10 ::v78(){vfunc_called(this, "_ZN5S1C103v78Ev");}
void  S1C10 ::v79(){vfunc_called(this, "_ZN5S1C103v79Ev");}
void  S1C10 ::v80(){vfunc_called(this, "_ZN5S1C103v80Ev");}
void  S1C10 ::v81(){vfunc_called(this, "_ZN5S1C103v81Ev");}
void  S1C10 ::v82(){vfunc_called(this, "_ZN5S1C103v82Ev");}
void  S1C10 ::v83(){vfunc_called(this, "_ZN5S1C103v83Ev");}
void  S1C10 ::v84(){vfunc_called(this, "_ZN5S1C103v84Ev");}
void  S1C10 ::v85(){vfunc_called(this, "_ZN5S1C103v85Ev");}
void  S1C10 ::v86(){vfunc_called(this, "_ZN5S1C103v86Ev");}
void  S1C10 ::v87(){vfunc_called(this, "_ZN5S1C103v87Ev");}
void  S1C10 ::v88(){vfunc_called(this, "_ZN5S1C103v88Ev");}
void  S1C10 ::v89(){vfunc_called(this, "_ZN5S1C103v89Ev");}
void  S1C10 ::v90(){vfunc_called(this, "_ZN5S1C103v90Ev");}
void  S1C10 ::v91(){vfunc_called(this, "_ZN5S1C103v91Ev");}
void  S1C10 ::v92(){vfunc_called(this, "_ZN5S1C103v92Ev");}
void  S1C10 ::v93(){vfunc_called(this, "_ZN5S1C103v93Ev");}
void  S1C10 ::v94(){vfunc_called(this, "_ZN5S1C103v94Ev");}
void  S1C10 ::v95(){vfunc_called(this, "_ZN5S1C103v95Ev");}
void  S1C10 ::v96(){vfunc_called(this, "_ZN5S1C103v96Ev");}
void  S1C10 ::v97(){vfunc_called(this, "_ZN5S1C103v97Ev");}
void  S1C10 ::v98(){vfunc_called(this, "_ZN5S1C103v98Ev");}
void  S1C10 ::v99(){vfunc_called(this, "_ZN5S1C103v99Ev");}
void  S1C10 ::v100(){vfunc_called(this, "_ZN5S1C104v100Ev");}
void  S1C10 ::v101(){vfunc_called(this, "_ZN5S1C104v101Ev");}
void  S1C10 ::v102(){vfunc_called(this, "_ZN5S1C104v102Ev");}
void  S1C10 ::v103(){vfunc_called(this, "_ZN5S1C104v103Ev");}
void  S1C10 ::v104(){vfunc_called(this, "_ZN5S1C104v104Ev");}
void  S1C10 ::v105(){vfunc_called(this, "_ZN5S1C104v105Ev");}
void  S1C10 ::v106(){vfunc_called(this, "_ZN5S1C104v106Ev");}
void  S1C10 ::v107(){vfunc_called(this, "_ZN5S1C104v107Ev");}
void  S1C10 ::v108(){vfunc_called(this, "_ZN5S1C104v108Ev");}
void  S1C10 ::v109(){vfunc_called(this, "_ZN5S1C104v109Ev");}
void  S1C10 ::v110(){vfunc_called(this, "_ZN5S1C104v110Ev");}
void  S1C10 ::v111(){vfunc_called(this, "_ZN5S1C104v111Ev");}
S1C10 ::~S1C10(){ note_dtor("S1C10", this);} // tgen
S1C10 ::S1C10(){ note_ctor("S1C10", this);} // tgen

static void Test_S1C10()
{
  extern Class_Descriptor cd_S1C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1C10, buf);
    S1C10 *dp, &lv = *(dp=new (buf) S1C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1C10)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S1C10");
    test_class_info(&lv, &cd_S1C10);
    dp->~S1C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1C10(Test_S1C10, "S1C10", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S1C10C1Ev();
extern void _ZN5S1C10D1Ev();
Name_Map name_map_S1C10[] = {
  NSPAIR(_ZN5S1C10C1Ev),
  NSPAIR(_ZN5S1C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S1C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI5S1C10[];
extern void _ZN5S1C10D1Ev();
extern void _ZN5S1C10D0Ev();
extern void _ZN5S1C102v5Ev();
extern void _ZN5S1C102v6Ev();
extern void _ZN5S1C102v7Ev();
extern void _ZN5S1C102v8Ev();
extern void _ZN5S1C102v9Ev();
extern void _ZN5S1C103v10Ev();
extern void _ZN5S1C103v11Ev();
extern void _ZN5S1C103v12Ev();
extern void _ZN5S1C103v13Ev();
extern void _ZN5S1C103v14Ev();
extern void _ZN5S1C103v15Ev();
extern void _ZN5S1C103v16Ev();
extern void _ZN5S1C103v17Ev();
extern void _ZN5S1C103v18Ev();
extern void _ZN5S1C103v19Ev();
extern void _ZN5S1C103v20Ev();
extern void _ZN5S1C103v21Ev();
extern void _ZN5S1C103v22Ev();
extern void _ZN5S1C103v23Ev();
extern void _ZN5S1C103v24Ev();
extern void _ZN5S1C103v25Ev();
extern void _ZN5S1C103v26Ev();
extern void _ZN5S1C103v27Ev();
extern void _ZN5S1C103v28Ev();
extern void _ZN5S1C103v29Ev();
extern void _ZN5S1C103v30Ev();
extern void _ZN5S1C103v31Ev();
extern void _ZN5S1C103v32Ev();
extern void _ZN5S1C103v33Ev();
extern void _ZN5S1C103v34Ev();
extern void _ZN5S1C103v35Ev();
extern void _ZN5S1C103v36Ev();
extern void _ZN5S1C103v37Ev();
extern void _ZN5S1C103v38Ev();
extern void _ZN5S1C103v39Ev();
extern void _ZN5S1C103v40Ev();
extern void _ZN5S1C103v41Ev();
extern void _ZN5S1C103v42Ev();
extern void _ZN5S1C103v43Ev();
extern void _ZN5S1C103v44Ev();
extern void _ZN5S1C103v45Ev();
extern void _ZN5S1C103v46Ev();
extern void _ZN5S1C103v47Ev();
extern void _ZN5S1C103v48Ev();
extern void _ZN5S1C103v49Ev();
extern void _ZN5S1C103v50Ev();
extern void _ZN5S1C103v51Ev();
extern void _ZN5S1C103v52Ev();
extern void _ZN5S1C103v53Ev();
extern void _ZN5S1C103v54Ev();
extern void _ZN5S1C103v55Ev();
extern void _ZN5S1C103v56Ev();
extern void _ZN5S1C103v57Ev();
extern void _ZN5S1C103v58Ev();
extern void _ZN5S1C103v59Ev();
extern void _ZN5S1C103v60Ev();
extern void _ZN5S1C103v61Ev();
extern void _ZN5S1C103v62Ev();
extern void _ZN5S1C103v63Ev();
extern void _ZN5S1C103v64Ev();
extern void _ZN5S1C103v65Ev();
extern void _ZN5S1C103v66Ev();
extern void _ZN5S1C103v67Ev();
extern void _ZN5S1C103v68Ev();
extern void _ZN5S1C103v69Ev();
extern void _ZN5S1C103v70Ev();
extern void _ZN5S1C103v71Ev();
extern void _ZN5S1C103v72Ev();
extern void _ZN5S1C103v73Ev();
extern void _ZN5S1C103v74Ev();
extern void _ZN5S1C103v75Ev();
extern void _ZN5S1C103v76Ev();
extern void _ZN5S1C103v77Ev();
extern void _ZN5S1C103v78Ev();
extern void _ZN5S1C103v79Ev();
extern void _ZN5S1C103v80Ev();
extern void _ZN5S1C103v81Ev();
extern void _ZN5S1C103v82Ev();
extern void _ZN5S1C103v83Ev();
extern void _ZN5S1C103v84Ev();
extern void _ZN5S1C103v85Ev();
extern void _ZN5S1C103v86Ev();
extern void _ZN5S1C103v87Ev();
extern void _ZN5S1C103v88Ev();
extern void _ZN5S1C103v89Ev();
extern void _ZN5S1C103v90Ev();
extern void _ZN5S1C103v91Ev();
extern void _ZN5S1C103v92Ev();
extern void _ZN5S1C103v93Ev();
extern void _ZN5S1C103v94Ev();
extern void _ZN5S1C103v95Ev();
extern void _ZN5S1C103v96Ev();
extern void _ZN5S1C103v97Ev();
extern void _ZN5S1C103v98Ev();
extern void _ZN5S1C103v99Ev();
extern void _ZN5S1C104v100Ev();
extern void _ZN5S1C104v101Ev();
extern void _ZN5S1C104v102Ev();
extern void _ZN5S1C104v103Ev();
extern void _ZN5S1C104v104Ev();
extern void _ZN5S1C104v105Ev();
extern void _ZN5S1C104v106Ev();
extern void _ZN5S1C104v107Ev();
extern void _ZN5S1C104v108Ev();
extern void _ZN5S1C104v109Ev();
extern void _ZN5S1C104v110Ev();
extern void _ZN5S1C104v111Ev();
static  VTBL_ENTRY vtc_S1C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S1C10[0]),
  (VTBL_ENTRY)&_ZN5S1C10D1Ev,
  (VTBL_ENTRY)&_ZN5S1C10D0Ev,
  (VTBL_ENTRY)&_ZN5S1C102v5Ev,
  (VTBL_ENTRY)&_ZN5S1C102v6Ev,
  (VTBL_ENTRY)&_ZN5S1C102v7Ev,
  (VTBL_ENTRY)&_ZN5S1C102v8Ev,
  (VTBL_ENTRY)&_ZN5S1C102v9Ev,
  (VTBL_ENTRY)&_ZN5S1C103v10Ev,
  (VTBL_ENTRY)&_ZN5S1C103v11Ev,
  (VTBL_ENTRY)&_ZN5S1C103v12Ev,
  (VTBL_ENTRY)&_ZN5S1C103v13Ev,
  (VTBL_ENTRY)&_ZN5S1C103v14Ev,
  (VTBL_ENTRY)&_ZN5S1C103v15Ev,
  (VTBL_ENTRY)&_ZN5S1C103v16Ev,
  (VTBL_ENTRY)&_ZN5S1C103v17Ev,
  (VTBL_ENTRY)&_ZN5S1C103v18Ev,
  (VTBL_ENTRY)&_ZN5S1C103v19Ev,
  (VTBL_ENTRY)&_ZN5S1C103v20Ev,
  (VTBL_ENTRY)&_ZN5S1C103v21Ev,
  (VTBL_ENTRY)&_ZN5S1C103v22Ev,
  (VTBL_ENTRY)&_ZN5S1C103v23Ev,
  (VTBL_ENTRY)&_ZN5S1C103v24Ev,
  (VTBL_ENTRY)&_ZN5S1C103v25Ev,
  (VTBL_ENTRY)&_ZN5S1C103v26Ev,
  (VTBL_ENTRY)&_ZN5S1C103v27Ev,
  (VTBL_ENTRY)&_ZN5S1C103v28Ev,
  (VTBL_ENTRY)&_ZN5S1C103v29Ev,
  (VTBL_ENTRY)&_ZN5S1C103v30Ev,
  (VTBL_ENTRY)&_ZN5S1C103v31Ev,
  (VTBL_ENTRY)&_ZN5S1C103v32Ev,
  (VTBL_ENTRY)&_ZN5S1C103v33Ev,
  (VTBL_ENTRY)&_ZN5S1C103v34Ev,
  (VTBL_ENTRY)&_ZN5S1C103v35Ev,
  (VTBL_ENTRY)&_ZN5S1C103v36Ev,
  (VTBL_ENTRY)&_ZN5S1C103v37Ev,
  (VTBL_ENTRY)&_ZN5S1C103v38Ev,
  (VTBL_ENTRY)&_ZN5S1C103v39Ev,
  (VTBL_ENTRY)&_ZN5S1C103v40Ev,
  (VTBL_ENTRY)&_ZN5S1C103v41Ev,
  (VTBL_ENTRY)&_ZN5S1C103v42Ev,
  (VTBL_ENTRY)&_ZN5S1C103v43Ev,
  (VTBL_ENTRY)&_ZN5S1C103v44Ev,
  (VTBL_ENTRY)&_ZN5S1C103v45Ev,
  (VTBL_ENTRY)&_ZN5S1C103v46Ev,
  (VTBL_ENTRY)&_ZN5S1C103v47Ev,
  (VTBL_ENTRY)&_ZN5S1C103v48Ev,
  (VTBL_ENTRY)&_ZN5S1C103v49Ev,
  (VTBL_ENTRY)&_ZN5S1C103v50Ev,
  (VTBL_ENTRY)&_ZN5S1C103v51Ev,
  (VTBL_ENTRY)&_ZN5S1C103v52Ev,
  (VTBL_ENTRY)&_ZN5S1C103v53Ev,
  (VTBL_ENTRY)&_ZN5S1C103v54Ev,
  (VTBL_ENTRY)&_ZN5S1C103v55Ev,
  (VTBL_ENTRY)&_ZN5S1C103v56Ev,
  (VTBL_ENTRY)&_ZN5S1C103v57Ev,
  (VTBL_ENTRY)&_ZN5S1C103v58Ev,
  (VTBL_ENTRY)&_ZN5S1C103v59Ev,
  (VTBL_ENTRY)&_ZN5S1C103v60Ev,
  (VTBL_ENTRY)&_ZN5S1C103v61Ev,
  (VTBL_ENTRY)&_ZN5S1C103v62Ev,
  (VTBL_ENTRY)&_ZN5S1C103v63Ev,
  (VTBL_ENTRY)&_ZN5S1C103v64Ev,
  (VTBL_ENTRY)&_ZN5S1C103v65Ev,
  (VTBL_ENTRY)&_ZN5S1C103v66Ev,
  (VTBL_ENTRY)&_ZN5S1C103v67Ev,
  (VTBL_ENTRY)&_ZN5S1C103v68Ev,
  (VTBL_ENTRY)&_ZN5S1C103v69Ev,
  (VTBL_ENTRY)&_ZN5S1C103v70Ev,
  (VTBL_ENTRY)&_ZN5S1C103v71Ev,
  (VTBL_ENTRY)&_ZN5S1C103v72Ev,
  (VTBL_ENTRY)&_ZN5S1C103v73Ev,
  (VTBL_ENTRY)&_ZN5S1C103v74Ev,
  (VTBL_ENTRY)&_ZN5S1C103v75Ev,
  (VTBL_ENTRY)&_ZN5S1C103v76Ev,
  (VTBL_ENTRY)&_ZN5S1C103v77Ev,
  (VTBL_ENTRY)&_ZN5S1C103v78Ev,
  (VTBL_ENTRY)&_ZN5S1C103v79Ev,
  (VTBL_ENTRY)&_ZN5S1C103v80Ev,
  (VTBL_ENTRY)&_ZN5S1C103v81Ev,
  (VTBL_ENTRY)&_ZN5S1C103v82Ev,
  (VTBL_ENTRY)&_ZN5S1C103v83Ev,
  (VTBL_ENTRY)&_ZN5S1C103v84Ev,
  (VTBL_ENTRY)&_ZN5S1C103v85Ev,
  (VTBL_ENTRY)&_ZN5S1C103v86Ev,
  (VTBL_ENTRY)&_ZN5S1C103v87Ev,
  (VTBL_ENTRY)&_ZN5S1C103v88Ev,
  (VTBL_ENTRY)&_ZN5S1C103v89Ev,
  (VTBL_ENTRY)&_ZN5S1C103v90Ev,
  (VTBL_ENTRY)&_ZN5S1C103v91Ev,
  (VTBL_ENTRY)&_ZN5S1C103v92Ev,
  (VTBL_ENTRY)&_ZN5S1C103v93Ev,
  (VTBL_ENTRY)&_ZN5S1C103v94Ev,
  (VTBL_ENTRY)&_ZN5S1C103v95Ev,
  (VTBL_ENTRY)&_ZN5S1C103v96Ev,
  (VTBL_ENTRY)&_ZN5S1C103v97Ev,
  (VTBL_ENTRY)&_ZN5S1C103v98Ev,
  (VTBL_ENTRY)&_ZN5S1C103v99Ev,
  (VTBL_ENTRY)&_ZN5S1C104v100Ev,
  (VTBL_ENTRY)&_ZN5S1C104v101Ev,
  (VTBL_ENTRY)&_ZN5S1C104v102Ev,
  (VTBL_ENTRY)&_ZN5S1C104v103Ev,
  (VTBL_ENTRY)&_ZN5S1C104v104Ev,
  (VTBL_ENTRY)&_ZN5S1C104v105Ev,
  (VTBL_ENTRY)&_ZN5S1C104v106Ev,
  (VTBL_ENTRY)&_ZN5S1C104v107Ev,
  (VTBL_ENTRY)&_ZN5S1C104v108Ev,
  (VTBL_ENTRY)&_ZN5S1C104v109Ev,
  (VTBL_ENTRY)&_ZN5S1C104v110Ev,
  (VTBL_ENTRY)&_ZN5S1C104v111Ev,
};
extern VTBL_ENTRY _ZTI5S1C10[];
extern  VTBL_ENTRY _ZTV5S1C10[];
Class_Descriptor cd_S1C10 = {  "S1C10", // class name
  bases_S1C10, 1,
  &(vtc_S1C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S1C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S1C10),111, //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  S1C9  : S1C10 {
  ~S1C9(); // tgen
  S1C9(); // tgen
};
//SIG(-1 S1C9) C1{ BC2{ BC3{ vd m Fp Fi} 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 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}}


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

static void Test_S1C9()
{
  extern Class_Descriptor cd_S1C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1C9, buf);
    S1C9 *dp, &lv = *(dp=new (buf) S1C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1C9)");
    check_base_class_offset(lv, (S1C11_nt*)(S1C10*), 0, "S1C9");
    check_base_class_offset(lv, (S1C10*), 0, "S1C9");
    test_class_info(&lv, &cd_S1C9);
    dp->~S1C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1C9(Test_S1C9, "S1C9", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN4S1C9C1Ev();
extern void _ZN4S1C9D1Ev();
Name_Map name_map_S1C9[] = {
  NSPAIR(_ZN4S1C9C1Ev),
  NSPAIR(_ZN4S1C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1C10;
extern VTBL_ENTRY _ZTI5S1C10[];
extern  VTBL_ENTRY _ZTV5S1C10[];
static Base_Class bases_S1C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI4S1C9[];
extern void _ZN4S1C9D1Ev();
extern void _ZN4S1C9D0Ev();
extern void _ZN5S1C102v5Ev();
extern void _ZN5S1C102v6Ev();
extern void _ZN5S1C102v7Ev();
extern void _ZN5S1C102v8Ev();
extern void _ZN5S1C102v9Ev();
extern void _ZN5S1C103v10Ev();
extern void _ZN5S1C103v11Ev();
extern void _ZN5S1C103v12Ev();
extern void _ZN5S1C103v13Ev();
extern void _ZN5S1C103v14Ev();
extern void _ZN5S1C103v15Ev();
extern void _ZN5S1C103v16Ev();
extern void _ZN5S1C103v17Ev();
extern void _ZN5S1C103v18Ev();
extern void _ZN5S1C103v19Ev();
extern void _ZN5S1C103v20Ev();
extern void _ZN5S1C103v21Ev();
extern void _ZN5S1C103v22Ev();
extern void _ZN5S1C103v23Ev();
extern void _ZN5S1C103v24Ev();
extern void _ZN5S1C103v25Ev();
extern void _ZN5S1C103v26Ev();
extern void _ZN5S1C103v27Ev();
extern void _ZN5S1C103v28Ev();
extern void _ZN5S1C103v29Ev();
extern void _ZN5S1C103v30Ev();
extern void _ZN5S1C103v31Ev();
extern void _ZN5S1C103v32Ev();
extern void _ZN5S1C103v33Ev();
extern void _ZN5S1C103v34Ev();
extern void _ZN5S1C103v35Ev();
extern void _ZN5S1C103v36Ev();
extern void _ZN5S1C103v37Ev();
extern void _ZN5S1C103v38Ev();
extern void _ZN5S1C103v39Ev();
extern void _ZN5S1C103v40Ev();
extern void _ZN5S1C103v41Ev();
extern void _ZN5S1C103v42Ev();
extern void _ZN5S1C103v43Ev();
extern void _ZN5S1C103v44Ev();
extern void _ZN5S1C103v45Ev();
extern void _ZN5S1C103v46Ev();
extern void _ZN5S1C103v47Ev();
extern void _ZN5S1C103v48Ev();
extern void _ZN5S1C103v49Ev();
extern void _ZN5S1C103v50Ev();
extern void _ZN5S1C103v51Ev();
extern void _ZN5S1C103v52Ev();
extern void _ZN5S1C103v53Ev();
extern void _ZN5S1C103v54Ev();
extern void _ZN5S1C103v55Ev();
extern void _ZN5S1C103v56Ev();
extern void _ZN5S1C103v57Ev();
extern void _ZN5S1C103v58Ev();
extern void _ZN5S1C103v59Ev();
extern void _ZN5S1C103v60Ev();
extern void _ZN5S1C103v61Ev();
extern void _ZN5S1C103v62Ev();
extern void _ZN5S1C103v63Ev();
extern void _ZN5S1C103v64Ev();
extern void _ZN5S1C103v65Ev();
extern void _ZN5S1C103v66Ev();
extern void _ZN5S1C103v67Ev();
extern void _ZN5S1C103v68Ev();
extern void _ZN5S1C103v69Ev();
extern void _ZN5S1C103v70Ev();
extern void _ZN5S1C103v71Ev();
extern void _ZN5S1C103v72Ev();
extern void _ZN5S1C103v73Ev();
extern void _ZN5S1C103v74Ev();
extern void _ZN5S1C103v75Ev();
extern void _ZN5S1C103v76Ev();
extern void _ZN5S1C103v77Ev();
extern void _ZN5S1C103v78Ev();
extern void _ZN5S1C103v79Ev();
extern void _ZN5S1C103v80Ev();
extern void _ZN5S1C103v81Ev();
extern void _ZN5S1C103v82Ev();
extern void _ZN5S1C103v83Ev();
extern void _ZN5S1C103v84Ev();
extern void _ZN5S1C103v85Ev();
extern void _ZN5S1C103v86Ev();
extern void _ZN5S1C103v87Ev();
extern void _ZN5S1C103v88Ev();
extern void _ZN5S1C103v89Ev();
extern void _ZN5S1C103v90Ev();
extern void _ZN5S1C103v91Ev();
extern void _ZN5S1C103v92Ev();
extern void _ZN5S1C103v93Ev();
extern void _ZN5S1C103v94Ev();
extern void _ZN5S1C103v95Ev();
extern void _ZN5S1C103v96Ev();
extern void _ZN5S1C103v97Ev();
extern void _ZN5S1C103v98Ev();
extern void _ZN5S1C103v99Ev();
extern void _ZN5S1C104v100Ev();
extern void _ZN5S1C104v101Ev();
extern void _ZN5S1C104v102Ev();
extern void _ZN5S1C104v103Ev();
extern void _ZN5S1C104v104Ev();
extern void _ZN5S1C104v105Ev();
extern void _ZN5S1C104v106Ev();
extern void _ZN5S1C104v107Ev();
extern void _ZN5S1C104v108Ev();
extern void _ZN5S1C104v109Ev();
extern void _ZN5S1C104v110Ev();
extern void _ZN5S1C104v111Ev();
static  VTBL_ENTRY vtc_S1C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI4S1C9[0]),
  (VTBL_ENTRY)&_ZN4S1C9D1Ev,
  (VTBL_ENTRY)&_ZN4S1C9D0Ev,
  (VTBL_ENTRY)&_ZN5S1C102v5Ev,
  (VTBL_ENTRY)&_ZN5S1C102v6Ev,
  (VTBL_ENTRY)&_ZN5S1C102v7Ev,
  (VTBL_ENTRY)&_ZN5S1C102v8Ev,
  (VTBL_ENTRY)&_ZN5S1C102v9Ev,
  (VTBL_ENTRY)&_ZN5S1C103v10Ev,
  (VTBL_ENTRY)&_ZN5S1C103v11Ev,
  (VTBL_ENTRY)&_ZN5S1C103v12Ev,
  (VTBL_ENTRY)&_ZN5S1C103v13Ev,
  (VTBL_ENTRY)&_ZN5S1C103v14Ev,
  (VTBL_ENTRY)&_ZN5S1C103v15Ev,
  (VTBL_ENTRY)&_ZN5S1C103v16Ev,
  (VTBL_ENTRY)&_ZN5S1C103v17Ev,
  (VTBL_ENTRY)&_ZN5S1C103v18Ev,
  (VTBL_ENTRY)&_ZN5S1C103v19Ev,
  (VTBL_ENTRY)&_ZN5S1C103v20Ev,
  (VTBL_ENTRY)&_ZN5S1C103v21Ev,
  (VTBL_ENTRY)&_ZN5S1C103v22Ev,
  (VTBL_ENTRY)&_ZN5S1C103v23Ev,
  (VTBL_ENTRY)&_ZN5S1C103v24Ev,
  (VTBL_ENTRY)&_ZN5S1C103v25Ev,
  (VTBL_ENTRY)&_ZN5S1C103v26Ev,
  (VTBL_ENTRY)&_ZN5S1C103v27Ev,
  (VTBL_ENTRY)&_ZN5S1C103v28Ev,
  (VTBL_ENTRY)&_ZN5S1C103v29Ev,
  (VTBL_ENTRY)&_ZN5S1C103v30Ev,
  (VTBL_ENTRY)&_ZN5S1C103v31Ev,
  (VTBL_ENTRY)&_ZN5S1C103v32Ev,
  (VTBL_ENTRY)&_ZN5S1C103v33Ev,
  (VTBL_ENTRY)&_ZN5S1C103v34Ev,
  (VTBL_ENTRY)&_ZN5S1C103v35Ev,
  (VTBL_ENTRY)&_ZN5S1C103v36Ev,
  (VTBL_ENTRY)&_ZN5S1C103v37Ev,
  (VTBL_ENTRY)&_ZN5S1C103v38Ev,
  (VTBL_ENTRY)&_ZN5S1C103v39Ev,
  (VTBL_ENTRY)&_ZN5S1C103v40Ev,
  (VTBL_ENTRY)&_ZN5S1C103v41Ev,
  (VTBL_ENTRY)&_ZN5S1C103v42Ev,
  (VTBL_ENTRY)&_ZN5S1C103v43Ev,
  (VTBL_ENTRY)&_ZN5S1C103v44Ev,
  (VTBL_ENTRY)&_ZN5S1C103v45Ev,
  (VTBL_ENTRY)&_ZN5S1C103v46Ev,
  (VTBL_ENTRY)&_ZN5S1C103v47Ev,
  (VTBL_ENTRY)&_ZN5S1C103v48Ev,
  (VTBL_ENTRY)&_ZN5S1C103v49Ev,
  (VTBL_ENTRY)&_ZN5S1C103v50Ev,
  (VTBL_ENTRY)&_ZN5S1C103v51Ev,
  (VTBL_ENTRY)&_ZN5S1C103v52Ev,
  (VTBL_ENTRY)&_ZN5S1C103v53Ev,
  (VTBL_ENTRY)&_ZN5S1C103v54Ev,
  (VTBL_ENTRY)&_ZN5S1C103v55Ev,
  (VTBL_ENTRY)&_ZN5S1C103v56Ev,
  (VTBL_ENTRY)&_ZN5S1C103v57Ev,
  (VTBL_ENTRY)&_ZN5S1C103v58Ev,
  (VTBL_ENTRY)&_ZN5S1C103v59Ev,
  (VTBL_ENTRY)&_ZN5S1C103v60Ev,
  (VTBL_ENTRY)&_ZN5S1C103v61Ev,
  (VTBL_ENTRY)&_ZN5S1C103v62Ev,
  (VTBL_ENTRY)&_ZN5S1C103v63Ev,
  (VTBL_ENTRY)&_ZN5S1C103v64Ev,
  (VTBL_ENTRY)&_ZN5S1C103v65Ev,
  (VTBL_ENTRY)&_ZN5S1C103v66Ev,
  (VTBL_ENTRY)&_ZN5S1C103v67Ev,
  (VTBL_ENTRY)&_ZN5S1C103v68Ev,
  (VTBL_ENTRY)&_ZN5S1C103v69Ev,
  (VTBL_ENTRY)&_ZN5S1C103v70Ev,
  (VTBL_ENTRY)&_ZN5S1C103v71Ev,
  (VTBL_ENTRY)&_ZN5S1C103v72Ev,
  (VTBL_ENTRY)&_ZN5S1C103v73Ev,
  (VTBL_ENTRY)&_ZN5S1C103v74Ev,
  (VTBL_ENTRY)&_ZN5S1C103v75Ev,
  (VTBL_ENTRY)&_ZN5S1C103v76Ev,
  (VTBL_ENTRY)&_ZN5S1C103v77Ev,
  (VTBL_ENTRY)&_ZN5S1C103v78Ev,
  (VTBL_ENTRY)&_ZN5S1C103v79Ev,
  (VTBL_ENTRY)&_ZN5S1C103v80Ev,
  (VTBL_ENTRY)&_ZN5S1C103v81Ev,
  (VTBL_ENTRY)&_ZN5S1C103v82Ev,
  (VTBL_ENTRY)&_ZN5S1C103v83Ev,
  (VTBL_ENTRY)&_ZN5S1C103v84Ev,
  (VTBL_ENTRY)&_ZN5S1C103v85Ev,
  (VTBL_ENTRY)&_ZN5S1C103v86Ev,
  (VTBL_ENTRY)&_ZN5S1C103v87Ev,
  (VTBL_ENTRY)&_ZN5S1C103v88Ev,
  (VTBL_ENTRY)&_ZN5S1C103v89Ev,
  (VTBL_ENTRY)&_ZN5S1C103v90Ev,
  (VTBL_ENTRY)&_ZN5S1C103v91Ev,
  (VTBL_ENTRY)&_ZN5S1C103v92Ev,
  (VTBL_ENTRY)&_ZN5S1C103v93Ev,
  (VTBL_ENTRY)&_ZN5S1C103v94Ev,
  (VTBL_ENTRY)&_ZN5S1C103v95Ev,
  (VTBL_ENTRY)&_ZN5S1C103v96Ev,
  (VTBL_ENTRY)&_ZN5S1C103v97Ev,
  (VTBL_ENTRY)&_ZN5S1C103v98Ev,
  (VTBL_ENTRY)&_ZN5S1C103v99Ev,
  (VTBL_ENTRY)&_ZN5S1C104v100Ev,
  (VTBL_ENTRY)&_ZN5S1C104v101Ev,
  (VTBL_ENTRY)&_ZN5S1C104v102Ev,
  (VTBL_ENTRY)&_ZN5S1C104v103Ev,
  (VTBL_ENTRY)&_ZN5S1C104v104Ev,
  (VTBL_ENTRY)&_ZN5S1C104v105Ev,
  (VTBL_ENTRY)&_ZN5S1C104v106Ev,
  (VTBL_ENTRY)&_ZN5S1C104v107Ev,
  (VTBL_ENTRY)&_ZN5S1C104v108Ev,
  (VTBL_ENTRY)&_ZN5S1C104v109Ev,
  (VTBL_ENTRY)&_ZN5S1C104v110Ev,
  (VTBL_ENTRY)&_ZN5S1C104v111Ev,
};
extern VTBL_ENTRY _ZTI4S1C9[];
extern  VTBL_ENTRY _ZTV4S1C9[];
Class_Descriptor cd_S1C9 = {  "S1C9", // class name
  bases_S1C9, 2,
  &(vtc_S1C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI4S1C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV4S1C9),111, //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  S1C8  : S1C9 {
  virtual void  v112(); // _ZN4S1C84v112Ev
  virtual void  v113(); // _ZN4S1C84v113Ev
  virtual void  v114(); // _ZN4S1C84v114Ev
  virtual void  v115(); // _ZN4S1C84v115Ev
  virtual void  v116(); // _ZN4S1C84v116Ev
  virtual void  v117(); // _ZN4S1C84v117Ev
  virtual void  v118(); // _ZN4S1C84v118Ev
  virtual void  v119(); // _ZN4S1C84v119Ev
  virtual void  v120(); // _ZN4S1C84v120Ev
  virtual void  v121(); // _ZN4S1C84v121Ev
  virtual void  v122(); // _ZN4S1C84v122Ev
  virtual void  v123(); // _ZN4S1C84v123Ev
  virtual void  v124(); // _ZN4S1C84v124Ev
  virtual void  v125(); // _ZN4S1C84v125Ev
  virtual void  v126(); // _ZN4S1C84v126Ev
  virtual void  v127(); // _ZN4S1C84v127Ev
  virtual void  v128(); // _ZN4S1C84v128Ev
  virtual void  v129(); // _ZN4S1C84v129Ev
  virtual void  v130(); // _ZN4S1C84v130Ev
  virtual void  v131(); // _ZN4S1C84v131Ev
  virtual void  v132(); // _ZN4S1C84v132Ev
  virtual void  v133(); // _ZN4S1C84v133Ev
  virtual void  v134(); // _ZN4S1C84v134Ev
  virtual void  v135(); // _ZN4S1C84v135Ev
  virtual void  v136(); // _ZN4S1C84v136Ev
  virtual void  v137(); // _ZN4S1C84v137Ev
  ~S1C8(); // tgen
  S1C8(); // tgen
};
//SIG(-1 S1C8) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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 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}} 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}


void  S1C8 ::v112(){vfunc_called(this, "_ZN4S1C84v112Ev");}
void  S1C8 ::v113(){vfunc_called(this, "_ZN4S1C84v113Ev");}
void  S1C8 ::v114(){vfunc_called(this, "_ZN4S1C84v114Ev");}
void  S1C8 ::v115(){vfunc_called(this, "_ZN4S1C84v115Ev");}
void  S1C8 ::v116(){vfunc_called(this, "_ZN4S1C84v116Ev");}
void  S1C8 ::v117(){vfunc_called(this, "_ZN4S1C84v117Ev");}
void  S1C8 ::v118(){vfunc_called(this, "_ZN4S1C84v118Ev");}
void  S1C8 ::v119(){vfunc_called(this, "_ZN4S1C84v119Ev");}
void  S1C8 ::v120(){vfunc_called(this, "_ZN4S1C84v120Ev");}
void  S1C8 ::v121(){vfunc_called(this, "_ZN4S1C84v121Ev");}
void  S1C8 ::v122(){vfunc_called(this, "_ZN4S1C84v122Ev");}
void  S1C8 ::v123(){vfunc_called(this, "_ZN4S1C84v123Ev");}
void  S1C8 ::v124(){vfunc_called(this, "_ZN4S1C84v124Ev");}
void  S1C8 ::v125(){vfunc_called(this, "_ZN4S1C84v125Ev");}
void  S1C8 ::v126(){vfunc_called(this, "_ZN4S1C84v126Ev");}
void  S1C8 ::v127(){vfunc_called(this, "_ZN4S1C84v127Ev");}
void  S1C8 ::v128(){vfunc_called(this, "_ZN4S1C84v128Ev");}
void  S1C8 ::v129(){vfunc_called(this, "_ZN4S1C84v129Ev");}
void  S1C8 ::v130(){vfunc_called(this, "_ZN4S1C84v130Ev");}
void  S1C8 ::v131(){vfunc_called(this, "_ZN4S1C84v131Ev");}
void  S1C8 ::v132(){vfunc_called(this, "_ZN4S1C84v132Ev");}
void  S1C8 ::v133(){vfunc_called(this, "_ZN4S1C84v133Ev");}
void  S1C8 ::v134(){vfunc_called(this, "_ZN4S1C84v134Ev");}
void  S1C8 ::v135(){vfunc_called(this, "_ZN4S1C84v135Ev");}
void  S1C8 ::v136(){vfunc_called(this, "_ZN4S1C84v136Ev");}
void  S1C8 ::v137(){vfunc_called(this, "_ZN4S1C84v137Ev");}
S1C8 ::~S1C8(){ note_dtor("S1C8", this);} // tgen
S1C8 ::S1C8(){ note_ctor("S1C8", this);} // tgen

static void Test_S1C8()
{
  extern Class_Descriptor cd_S1C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1C8, buf);
    S1C8 *dp, &lv = *(dp=new (buf) S1C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1C8)");
    check_base_class_offset(lv, (S1C11_nt*)(S1C10*)(S1C9*), 0, "S1C8");
    check_base_class_offset(lv, (S1C10*)(S1C9*), 0, "S1C8");
    check_base_class_offset(lv, (S1C9*), 0, "S1C8");
    test_class_info(&lv, &cd_S1C8);
    dp->~S1C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1C8(Test_S1C8, "S1C8", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN4S1C8C1Ev();
extern void _ZN4S1C8D1Ev();
Name_Map name_map_S1C8[] = {
  NSPAIR(_ZN4S1C8C1Ev),
  NSPAIR(_ZN4S1C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1C10;
extern VTBL_ENTRY _ZTI5S1C10[];
extern  VTBL_ENTRY _ZTV5S1C10[];
extern Class_Descriptor cd_S1C9;
extern VTBL_ENTRY _ZTI4S1C9[];
extern  VTBL_ENTRY _ZTV4S1C9[];
static Base_Class bases_S1C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI4S1C8[];
extern void _ZN4S1C8D1Ev();
extern void _ZN4S1C8D0Ev();
extern void _ZN5S1C102v5Ev();
extern void _ZN5S1C102v6Ev();
extern void _ZN5S1C102v7Ev();
extern void _ZN5S1C102v8Ev();
extern void _ZN5S1C102v9Ev();
extern void _ZN5S1C103v10Ev();
extern void _ZN5S1C103v11Ev();
extern void _ZN5S1C103v12Ev();
extern void _ZN5S1C103v13Ev();
extern void _ZN5S1C103v14Ev();
extern void _ZN5S1C103v15Ev();
extern void _ZN5S1C103v16Ev();
extern void _ZN5S1C103v17Ev();
extern void _ZN5S1C103v18Ev();
extern void _ZN5S1C103v19Ev();
extern void _ZN5S1C103v20Ev();
extern void _ZN5S1C103v21Ev();
extern void _ZN5S1C103v22Ev();
extern void _ZN5S1C103v23Ev();
extern void _ZN5S1C103v24Ev();
extern void _ZN5S1C103v25Ev();
extern void _ZN5S1C103v26Ev();
extern void _ZN5S1C103v27Ev();
extern void _ZN5S1C103v28Ev();
extern void _ZN5S1C103v29Ev();
extern void _ZN5S1C103v30Ev();
extern void _ZN5S1C103v31Ev();
extern void _ZN5S1C103v32Ev();
extern void _ZN5S1C103v33Ev();
extern void _ZN5S1C103v34Ev();
extern void _ZN5S1C103v35Ev();
extern void _ZN5S1C103v36Ev();
extern void _ZN5S1C103v37Ev();
extern void _ZN5S1C103v38Ev();
extern void _ZN5S1C103v39Ev();
extern void _ZN5S1C103v40Ev();
extern void _ZN5S1C103v41Ev();
extern void _ZN5S1C103v42Ev();
extern void _ZN5S1C103v43Ev();
extern void _ZN5S1C103v44Ev();
extern void _ZN5S1C103v45Ev();
extern void _ZN5S1C103v46Ev();
extern void _ZN5S1C103v47Ev();
extern void _ZN5S1C103v48Ev();
extern void _ZN5S1C103v49Ev();
extern void _ZN5S1C103v50Ev();
extern void _ZN5S1C103v51Ev();
extern void _ZN5S1C103v52Ev();
extern void _ZN5S1C103v53Ev();
extern void _ZN5S1C103v54Ev();
extern void _ZN5S1C103v55Ev();
extern void _ZN5S1C103v56Ev();
extern void _ZN5S1C103v57Ev();
extern void _ZN5S1C103v58Ev();
extern void _ZN5S1C103v59Ev();
extern void _ZN5S1C103v60Ev();
extern void _ZN5S1C103v61Ev();
extern void _ZN5S1C103v62Ev();
extern void _ZN5S1C103v63Ev();
extern void _ZN5S1C103v64Ev();
extern void _ZN5S1C103v65Ev();
extern void _ZN5S1C103v66Ev();
extern void _ZN5S1C103v67Ev();
extern void _ZN5S1C103v68Ev();
extern void _ZN5S1C103v69Ev();
extern void _ZN5S1C103v70Ev();
extern void _ZN5S1C103v71Ev();
extern void _ZN5S1C103v72Ev();
extern void _ZN5S1C103v73Ev();
extern void _ZN5S1C103v74Ev();
extern void _ZN5S1C103v75Ev();
extern void _ZN5S1C103v76Ev();
extern void _ZN5S1C103v77Ev();
extern void _ZN5S1C103v78Ev();
extern void _ZN5S1C103v79Ev();
extern void _ZN5S1C103v80Ev();
extern void _ZN5S1C103v81Ev();
extern void _ZN5S1C103v82Ev();
extern void _ZN5S1C103v83Ev();
extern void _ZN5S1C103v84Ev();
extern void _ZN5S1C103v85Ev();
extern void _ZN5S1C103v86Ev();
extern void _ZN5S1C103v87Ev();
extern void _ZN5S1C103v88Ev();
extern void _ZN5S1C103v89Ev();
extern void _ZN5S1C103v90Ev();
extern void _ZN5S1C103v91Ev();
extern void _ZN5S1C103v92Ev();
extern void _ZN5S1C103v93Ev();
extern void _ZN5S1C103v94Ev();
extern void _ZN5S1C103v95Ev();
extern void _ZN5S1C103v96Ev();
extern void _ZN5S1C103v97Ev();
extern void _ZN5S1C103v98Ev();
extern void _ZN5S1C103v99Ev();
extern void _ZN5S1C104v100Ev();
extern void _ZN5S1C104v101Ev();
extern void _ZN5S1C104v102Ev();
extern void _ZN5S1C104v103Ev();
extern void _ZN5S1C104v104Ev();
extern void _ZN5S1C104v105Ev();
extern void _ZN5S1C104v106Ev();
extern void _ZN5S1C104v107Ev();
extern void _ZN5S1C104v108Ev();
extern void _ZN5S1C104v109Ev();
extern void _ZN5S1C104v110Ev();
extern void _ZN5S1C104v111Ev();
extern void _ZN4S1C84v112Ev();
extern void _ZN4S1C84v113Ev();
extern void _ZN4S1C84v114Ev();
extern void _ZN4S1C84v115Ev();
extern void _ZN4S1C84v116Ev();
extern void _ZN4S1C84v117Ev();
extern void _ZN4S1C84v118Ev();
extern void _ZN4S1C84v119Ev();
extern void _ZN4S1C84v120Ev();
extern void _ZN4S1C84v121Ev();
extern void _ZN4S1C84v122Ev();
extern void _ZN4S1C84v123Ev();
extern void _ZN4S1C84v124Ev();
extern void _ZN4S1C84v125Ev();
extern void _ZN4S1C84v126Ev();
extern void _ZN4S1C84v127Ev();
extern void _ZN4S1C84v128Ev();
extern void _ZN4S1C84v129Ev();
extern void _ZN4S1C84v130Ev();
extern void _ZN4S1C84v131Ev();
extern void _ZN4S1C84v132Ev();
extern void _ZN4S1C84v133Ev();
extern void _ZN4S1C84v134Ev();
extern void _ZN4S1C84v135Ev();
extern void _ZN4S1C84v136Ev();
extern void _ZN4S1C84v137Ev();
static  VTBL_ENTRY vtc_S1C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI4S1C8[0]),
  (VTBL_ENTRY)&_ZN4S1C8D1Ev,
  (VTBL_ENTRY)&_ZN4S1C8D0Ev,
  (VTBL_ENTRY)&_ZN5S1C102v5Ev,
  (VTBL_ENTRY)&_ZN5S1C102v6Ev,
  (VTBL_ENTRY)&_ZN5S1C102v7Ev,
  (VTBL_ENTRY)&_ZN5S1C102v8Ev,
  (VTBL_ENTRY)&_ZN5S1C102v9Ev,
  (VTBL_ENTRY)&_ZN5S1C103v10Ev,
  (VTBL_ENTRY)&_ZN5S1C103v11Ev,
  (VTBL_ENTRY)&_ZN5S1C103v12Ev,
  (VTBL_ENTRY)&_ZN5S1C103v13Ev,
  (VTBL_ENTRY)&_ZN5S1C103v14Ev,
  (VTBL_ENTRY)&_ZN5S1C103v15Ev,
  (VTBL_ENTRY)&_ZN5S1C103v16Ev,
  (VTBL_ENTRY)&_ZN5S1C103v17Ev,
  (VTBL_ENTRY)&_ZN5S1C103v18Ev,
  (VTBL_ENTRY)&_ZN5S1C103v19Ev,
  (VTBL_ENTRY)&_ZN5S1C103v20Ev,
  (VTBL_ENTRY)&_ZN5S1C103v21Ev,
  (VTBL_ENTRY)&_ZN5S1C103v22Ev,
  (VTBL_ENTRY)&_ZN5S1C103v23Ev,
  (VTBL_ENTRY)&_ZN5S1C103v24Ev,
  (VTBL_ENTRY)&_ZN5S1C103v25Ev,
  (VTBL_ENTRY)&_ZN5S1C103v26Ev,
  (VTBL_ENTRY)&_ZN5S1C103v27Ev,
  (VTBL_ENTRY)&_ZN5S1C103v28Ev,
  (VTBL_ENTRY)&_ZN5S1C103v29Ev,
  (VTBL_ENTRY)&_ZN5S1C103v30Ev,
  (VTBL_ENTRY)&_ZN5S1C103v31Ev,
  (VTBL_ENTRY)&_ZN5S1C103v32Ev,
  (VTBL_ENTRY)&_ZN5S1C103v33Ev,
  (VTBL_ENTRY)&_ZN5S1C103v34Ev,
  (VTBL_ENTRY)&_ZN5S1C103v35Ev,
  (VTBL_ENTRY)&_ZN5S1C103v36Ev,
  (VTBL_ENTRY)&_ZN5S1C103v37Ev,
  (VTBL_ENTRY)&_ZN5S1C103v38Ev,
  (VTBL_ENTRY)&_ZN5S1C103v39Ev,
  (VTBL_ENTRY)&_ZN5S1C103v40Ev,
  (VTBL_ENTRY)&_ZN5S1C103v41Ev,
  (VTBL_ENTRY)&_ZN5S1C103v42Ev,
  (VTBL_ENTRY)&_ZN5S1C103v43Ev,
  (VTBL_ENTRY)&_ZN5S1C103v44Ev,
  (VTBL_ENTRY)&_ZN5S1C103v45Ev,
  (VTBL_ENTRY)&_ZN5S1C103v46Ev,
  (VTBL_ENTRY)&_ZN5S1C103v47Ev,
  (VTBL_ENTRY)&_ZN5S1C103v48Ev,
  (VTBL_ENTRY)&_ZN5S1C103v49Ev,
  (VTBL_ENTRY)&_ZN5S1C103v50Ev,
  (VTBL_ENTRY)&_ZN5S1C103v51Ev,
  (VTBL_ENTRY)&_ZN5S1C103v52Ev,
  (VTBL_ENTRY)&_ZN5S1C103v53Ev,
  (VTBL_ENTRY)&_ZN5S1C103v54Ev,
  (VTBL_ENTRY)&_ZN5S1C103v55Ev,
  (VTBL_ENTRY)&_ZN5S1C103v56Ev,
  (VTBL_ENTRY)&_ZN5S1C103v57Ev,
  (VTBL_ENTRY)&_ZN5S1C103v58Ev,
  (VTBL_ENTRY)&_ZN5S1C103v59Ev,
  (VTBL_ENTRY)&_ZN5S1C103v60Ev,
  (VTBL_ENTRY)&_ZN5S1C103v61Ev,
  (VTBL_ENTRY)&_ZN5S1C103v62Ev,
  (VTBL_ENTRY)&_ZN5S1C103v63Ev,
  (VTBL_ENTRY)&_ZN5S1C103v64Ev,
  (VTBL_ENTRY)&_ZN5S1C103v65Ev,
  (VTBL_ENTRY)&_ZN5S1C103v66Ev,
  (VTBL_ENTRY)&_ZN5S1C103v67Ev,
  (VTBL_ENTRY)&_ZN5S1C103v68Ev,
  (VTBL_ENTRY)&_ZN5S1C103v69Ev,
  (VTBL_ENTRY)&_ZN5S1C103v70Ev,
  (VTBL_ENTRY)&_ZN5S1C103v71Ev,
  (VTBL_ENTRY)&_ZN5S1C103v72Ev,
  (VTBL_ENTRY)&_ZN5S1C103v73Ev,
  (VTBL_ENTRY)&_ZN5S1C103v74Ev,
  (VTBL_ENTRY)&_ZN5S1C103v75Ev,
  (VTBL_ENTRY)&_ZN5S1C103v76Ev,
  (VTBL_ENTRY)&_ZN5S1C103v77Ev,
  (VTBL_ENTRY)&_ZN5S1C103v78Ev,
  (VTBL_ENTRY)&_ZN5S1C103v79Ev,
  (VTBL_ENTRY)&_ZN5S1C103v80Ev,
  (VTBL_ENTRY)&_ZN5S1C103v81Ev,
  (VTBL_ENTRY)&_ZN5S1C103v82Ev,
  (VTBL_ENTRY)&_ZN5S1C103v83Ev,
  (VTBL_ENTRY)&_ZN5S1C103v84Ev,
  (VTBL_ENTRY)&_ZN5S1C103v85Ev,
  (VTBL_ENTRY)&_ZN5S1C103v86Ev,
  (VTBL_ENTRY)&_ZN5S1C103v87Ev,
  (VTBL_ENTRY)&_ZN5S1C103v88Ev,
  (VTBL_ENTRY)&_ZN5S1C103v89Ev,
  (VTBL_ENTRY)&_ZN5S1C103v90Ev,
  (VTBL_ENTRY)&_ZN5S1C103v91Ev,
  (VTBL_ENTRY)&_ZN5S1C103v92Ev,
  (VTBL_ENTRY)&_ZN5S1C103v93Ev,
  (VTBL_ENTRY)&_ZN5S1C103v94Ev,
  (VTBL_ENTRY)&_ZN5S1C103v95Ev,
  (VTBL_ENTRY)&_ZN5S1C103v96Ev,
  (VTBL_ENTRY)&_ZN5S1C103v97Ev,
  (VTBL_ENTRY)&_ZN5S1C103v98Ev,
  (VTBL_ENTRY)&_ZN5S1C103v99Ev,
  (VTBL_ENTRY)&_ZN5S1C104v100Ev,
  (VTBL_ENTRY)&_ZN5S1C104v101Ev,
  (VTBL_ENTRY)&_ZN5S1C104v102Ev,
  (VTBL_ENTRY)&_ZN5S1C104v103Ev,
  (VTBL_ENTRY)&_ZN5S1C104v104Ev,
  (VTBL_ENTRY)&_ZN5S1C104v105Ev,
  (VTBL_ENTRY)&_ZN5S1C104v106Ev,
  (VTBL_ENTRY)&_ZN5S1C104v107Ev,
  (VTBL_ENTRY)&_ZN5S1C104v108Ev,
  (VTBL_ENTRY)&_ZN5S1C104v109Ev,
  (VTBL_ENTRY)&_ZN5S1C104v110Ev,
  (VTBL_ENTRY)&_ZN5S1C104v111Ev,
  (VTBL_ENTRY)&_ZN4S1C84v112Ev,
  (VTBL_ENTRY)&_ZN4S1C84v113Ev,
  (VTBL_ENTRY)&_ZN4S1C84v114Ev,
  (VTBL_ENTRY)&_ZN4S1C84v115Ev,
  (VTBL_ENTRY)&_ZN4S1C84v116Ev,
  (VTBL_ENTRY)&_ZN4S1C84v117Ev,
  (VTBL_ENTRY)&_ZN4S1C84v118Ev,
  (VTBL_ENTRY)&_ZN4S1C84v119Ev,
  (VTBL_ENTRY)&_ZN4S1C84v120Ev,
  (VTBL_ENTRY)&_ZN4S1C84v121Ev,
  (VTBL_ENTRY)&_ZN4S1C84v122Ev,
  (VTBL_ENTRY)&_ZN4S1C84v123Ev,
  (VTBL_ENTRY)&_ZN4S1C84v124Ev,
  (VTBL_ENTRY)&_ZN4S1C84v125Ev,
  (VTBL_ENTRY)&_ZN4S1C84v126Ev,
  (VTBL_ENTRY)&_ZN4S1C84v127Ev,
  (VTBL_ENTRY)&_ZN4S1C84v128Ev,
  (VTBL_ENTRY)&_ZN4S1C84v129Ev,
  (VTBL_ENTRY)&_ZN4S1C84v130Ev,
  (VTBL_ENTRY)&_ZN4S1C84v131Ev,
  (VTBL_ENTRY)&_ZN4S1C84v132Ev,
  (VTBL_ENTRY)&_ZN4S1C84v133Ev,
  (VTBL_ENTRY)&_ZN4S1C84v134Ev,
  (VTBL_ENTRY)&_ZN4S1C84v135Ev,
  (VTBL_ENTRY)&_ZN4S1C84v136Ev,
  (VTBL_ENTRY)&_ZN4S1C84v137Ev,
};
extern VTBL_ENTRY _ZTI4S1C8[];
extern  VTBL_ENTRY _ZTV4S1C8[];
Class_Descriptor cd_S1C8 = {  "S1C8", // class name
  bases_S1C8, 3,
  &(vtc_S1C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI4S1C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV4S1C8),137, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1C7  : S1C8 {
  virtual void  v138(); // _ZN4S1C74v138Ev
  virtual void  v139(); // _ZN4S1C74v139Ev
  virtual void  v140(); // _ZN4S1C74v140Ev
  virtual void  v141(); // _ZN4S1C74v141Ev
  virtual void  v142(); // _ZN4S1C74v142Ev
  virtual void  v143(); // _ZN4S1C74v143Ev
  virtual void  v144(); // _ZN4S1C74v144Ev
  virtual void  v145(); // _ZN4S1C74v145Ev
  virtual void  v146(); // _ZN4S1C74v146Ev
  virtual void  v147(); // _ZN4S1C74v147Ev
  virtual void  v148(); // _ZN4S1C74v148Ev
  virtual void  v149(); // _ZN4S1C74v149Ev
  virtual void  v150(); // _ZN4S1C74v150Ev
  virtual void  v151(); // _ZN4S1C74v151Ev
  virtual void  v152(); // _ZN4S1C74v152Ev
  virtual void  v153(); // _ZN4S1C74v153Ev
  virtual void  v154(); // _ZN4S1C74v154Ev
  virtual void  v155(); // _ZN4S1C74v155Ev
  ~S1C7(); // tgen
  S1C7(); // tgen
};
//SIG(-1 S1C7) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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 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 v149 v150 v151} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S1C7 ::v138(){vfunc_called(this, "_ZN4S1C74v138Ev");}
void  S1C7 ::v139(){vfunc_called(this, "_ZN4S1C74v139Ev");}
void  S1C7 ::v140(){vfunc_called(this, "_ZN4S1C74v140Ev");}
void  S1C7 ::v141(){vfunc_called(this, "_ZN4S1C74v141Ev");}
void  S1C7 ::v142(){vfunc_called(this, "_ZN4S1C74v142Ev");}
void  S1C7 ::v143(){vfunc_called(this, "_ZN4S1C74v143Ev");}
void  S1C7 ::v144(){vfunc_called(this, "_ZN4S1C74v144Ev");}
void  S1C7 ::v145(){vfunc_called(this, "_ZN4S1C74v145Ev");}
void  S1C7 ::v146(){vfunc_called(this, "_ZN4S1C74v146Ev");}
void  S1C7 ::v147(){vfunc_called(this, "_ZN4S1C74v147Ev");}
void  S1C7 ::v148(){vfunc_called(this, "_ZN4S1C74v148Ev");}
void  S1C7 ::v149(){vfunc_called(this, "_ZN4S1C74v149Ev");}
void  S1C7 ::v150(){vfunc_called(this, "_ZN4S1C74v150Ev");}
void  S1C7 ::v151(){vfunc_called(this, "_ZN4S1C74v151Ev");}
void  S1C7 ::v152(){vfunc_called(this, "_ZN4S1C74v152Ev");}
void  S1C7 ::v153(){vfunc_called(this, "_ZN4S1C74v153Ev");}
void  S1C7 ::v154(){vfunc_called(this, "_ZN4S1C74v154Ev");}
void  S1C7 ::v155(){vfunc_called(this, "_ZN4S1C74v155Ev");}
S1C7 ::~S1C7(){ note_dtor("S1C7", this);} // tgen
S1C7 ::S1C7(){ note_ctor("S1C7", this);} // tgen

static void Test_S1C7()
{
  extern Class_Descriptor cd_S1C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1C7, buf);
    S1C7 *dp, &lv = *(dp=new (buf) S1C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1C7)");
    check_base_class_offset(lv, (S1C11_nt*)(S1C10*)(S1C9*)(S1C8*), 0, "S1C7");
    check_base_class_offset(lv, (S1C10*)(S1C9*)(S1C8*), 0, "S1C7");
    check_base_class_offset(lv, (S1C9*)(S1C8*), 0, "S1C7");
    check_base_class_offset(lv, (S1C8*), 0, "S1C7");
    test_class_info(&lv, &cd_S1C7);
    dp->~S1C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1C7(Test_S1C7, "S1C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN4S1C7C1Ev();
extern void _ZN4S1C7D1Ev();
Name_Map name_map_S1C7[] = {
  NSPAIR(_ZN4S1C7C1Ev),
  NSPAIR(_ZN4S1C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1C10;
extern VTBL_ENTRY _ZTI5S1C10[];
extern  VTBL_ENTRY _ZTV5S1C10[];
extern Class_Descriptor cd_S1C9;
extern VTBL_ENTRY _ZTI4S1C9[];
extern  VTBL_ENTRY _ZTV4S1C9[];
extern Class_Descriptor cd_S1C8;
extern VTBL_ENTRY _ZTI4S1C8[];
extern  VTBL_ENTRY _ZTV4S1C8[];
static Base_Class bases_S1C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI4S1C7[];
extern void _ZN4S1C7D1Ev();
extern void _ZN4S1C7D0Ev();
extern void _ZN5S1C102v5Ev();
extern void _ZN5S1C102v6Ev();
extern void _ZN5S1C102v7Ev();
extern void _ZN5S1C102v8Ev();
extern void _ZN5S1C102v9Ev();
extern void _ZN5S1C103v10Ev();
extern void _ZN5S1C103v11Ev();
extern void _ZN5S1C103v12Ev();
extern void _ZN5S1C103v13Ev();
extern void _ZN5S1C103v14Ev();
extern void _ZN5S1C103v15Ev();
extern void _ZN5S1C103v16Ev();
extern void _ZN5S1C103v17Ev();
extern void _ZN5S1C103v18Ev();
extern void _ZN5S1C103v19Ev();
extern void _ZN5S1C103v20Ev();
extern void _ZN5S1C103v21Ev();
extern void _ZN5S1C103v22Ev();
extern void _ZN5S1C103v23Ev();
extern void _ZN5S1C103v24Ev();
extern void _ZN5S1C103v25Ev();
extern void _ZN5S1C103v26Ev();
extern void _ZN5S1C103v27Ev();
extern void _ZN5S1C103v28Ev();
extern void _ZN5S1C103v29Ev();
extern void _ZN5S1C103v30Ev();
extern void _ZN5S1C103v31Ev();
extern void _ZN5S1C103v32Ev();
extern void _ZN5S1C103v33Ev();
extern void _ZN5S1C103v34Ev();
extern void _ZN5S1C103v35Ev();
extern void _ZN5S1C103v36Ev();
extern void _ZN5S1C103v37Ev();
extern void _ZN5S1C103v38Ev();
extern void _ZN5S1C103v39Ev();
extern void _ZN5S1C103v40Ev();
extern void _ZN5S1C103v41Ev();
extern void _ZN5S1C103v42Ev();
extern void _ZN5S1C103v43Ev();
extern void _ZN5S1C103v44Ev();
extern void _ZN5S1C103v45Ev();
extern void _ZN5S1C103v46Ev();
extern void _ZN5S1C103v47Ev();
extern void _ZN5S1C103v48Ev();
extern void _ZN5S1C103v49Ev();
extern void _ZN5S1C103v50Ev();
extern void _ZN5S1C103v51Ev();
extern void _ZN5S1C103v52Ev();
extern void _ZN5S1C103v53Ev();
extern void _ZN5S1C103v54Ev();
extern void _ZN5S1C103v55Ev();
extern void _ZN5S1C103v56Ev();
extern void _ZN5S1C103v57Ev();
extern void _ZN5S1C103v58Ev();
extern void _ZN5S1C103v59Ev();
extern void _ZN5S1C103v60Ev();
extern void _ZN5S1C103v61Ev();
extern void _ZN5S1C103v62Ev();
extern void _ZN5S1C103v63Ev();
extern void _ZN5S1C103v64Ev();
extern void _ZN5S1C103v65Ev();
extern void _ZN5S1C103v66Ev();
extern void _ZN5S1C103v67Ev();
extern void _ZN5S1C103v68Ev();
extern void _ZN5S1C103v69Ev();
extern void _ZN5S1C103v70Ev();
extern void _ZN5S1C103v71Ev();
extern void _ZN5S1C103v72Ev();
extern void _ZN5S1C103v73Ev();
extern void _ZN5S1C103v74Ev();
extern void _ZN5S1C103v75Ev();
extern void _ZN5S1C103v76Ev();
extern void _ZN5S1C103v77Ev();
extern void _ZN5S1C103v78Ev();
extern void _ZN5S1C103v79Ev();
extern void _ZN5S1C103v80Ev();
extern void _ZN5S1C103v81Ev();
extern void _ZN5S1C103v82Ev();
extern void _ZN5S1C103v83Ev();
extern void _ZN5S1C103v84Ev();
extern void _ZN5S1C103v85Ev();
extern void _ZN5S1C103v86Ev();
extern void _ZN5S1C103v87Ev();
extern void _ZN5S1C103v88Ev();
extern void _ZN5S1C103v89Ev();
extern void _ZN5S1C103v90Ev();
extern void _ZN5S1C103v91Ev();
extern void _ZN5S1C103v92Ev();
extern void _ZN5S1C103v93Ev();
extern void _ZN5S1C103v94Ev();
extern void _ZN5S1C103v95Ev();
extern void _ZN5S1C103v96Ev();
extern void _ZN5S1C103v97Ev();
extern void _ZN5S1C103v98Ev();
extern void _ZN5S1C103v99Ev();
extern void _ZN5S1C104v100Ev();
extern void _ZN5S1C104v101Ev();
extern void _ZN5S1C104v102Ev();
extern void _ZN5S1C104v103Ev();
extern void _ZN5S1C104v104Ev();
extern void _ZN5S1C104v105Ev();
extern void _ZN5S1C104v106Ev();
extern void _ZN5S1C104v107Ev();
extern void _ZN5S1C104v108Ev();
extern void _ZN5S1C104v109Ev();
extern void _ZN5S1C104v110Ev();
extern void _ZN5S1C104v111Ev();
extern void _ZN4S1C84v112Ev();
extern void _ZN4S1C84v113Ev();
extern void _ZN4S1C84v114Ev();
extern void _ZN4S1C84v115Ev();
extern void _ZN4S1C84v116Ev();
extern void _ZN4S1C84v117Ev();
extern void _ZN4S1C84v118Ev();
extern void _ZN4S1C84v119Ev();
extern void _ZN4S1C84v120Ev();
extern void _ZN4S1C84v121Ev();
extern void _ZN4S1C84v122Ev();
extern void _ZN4S1C84v123Ev();
extern void _ZN4S1C84v124Ev();
extern void _ZN4S1C84v125Ev();
extern void _ZN4S1C84v126Ev();
extern void _ZN4S1C84v127Ev();
extern void _ZN4S1C84v128Ev();
extern void _ZN4S1C84v129Ev();
extern void _ZN4S1C84v130Ev();
extern void _ZN4S1C84v131Ev();
extern void _ZN4S1C84v132Ev();
extern void _ZN4S1C84v133Ev();
extern void _ZN4S1C84v134Ev();
extern void _ZN4S1C84v135Ev();
extern void _ZN4S1C84v136Ev();
extern void _ZN4S1C84v137Ev();
extern void _ZN4S1C74v138Ev();
extern void _ZN4S1C74v139Ev();
extern void _ZN4S1C74v140Ev();
extern void _ZN4S1C74v141Ev();
extern void _ZN4S1C74v142Ev();
extern void _ZN4S1C74v143Ev();
extern void _ZN4S1C74v144Ev();
extern void _ZN4S1C74v145Ev();
extern void _ZN4S1C74v146Ev();
extern void _ZN4S1C74v147Ev();
extern void _ZN4S1C74v148Ev();
extern void _ZN4S1C74v149Ev();
extern void _ZN4S1C74v150Ev();
extern void _ZN4S1C74v151Ev();
extern void _ZN4S1C74v152Ev();
extern void _ZN4S1C74v153Ev();
extern void _ZN4S1C74v154Ev();
extern void _ZN4S1C74v155Ev();
static  VTBL_ENTRY vtc_S1C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI4S1C7[0]),
  (VTBL_ENTRY)&_ZN4S1C7D1Ev,
  (VTBL_ENTRY)&_ZN4S1C7D0Ev,
  (VTBL_ENTRY)&_ZN5S1C102v5Ev,
  (VTBL_ENTRY)&_ZN5S1C102v6Ev,
  (VTBL_ENTRY)&_ZN5S1C102v7Ev,
  (VTBL_ENTRY)&_ZN5S1C102v8Ev,
  (VTBL_ENTRY)&_ZN5S1C102v9Ev,
  (VTBL_ENTRY)&_ZN5S1C103v10Ev,
  (VTBL_ENTRY)&_ZN5S1C103v11Ev,
  (VTBL_ENTRY)&_ZN5S1C103v12Ev,
  (VTBL_ENTRY)&_ZN5S1C103v13Ev,
  (VTBL_ENTRY)&_ZN5S1C103v14Ev,
  (VTBL_ENTRY)&_ZN5S1C103v15Ev,
  (VTBL_ENTRY)&_ZN5S1C103v16Ev,
  (VTBL_ENTRY)&_ZN5S1C103v17Ev,
  (VTBL_ENTRY)&_ZN5S1C103v18Ev,
  (VTBL_ENTRY)&_ZN5S1C103v19Ev,
  (VTBL_ENTRY)&_ZN5S1C103v20Ev,
  (VTBL_ENTRY)&_ZN5S1C103v21Ev,
  (VTBL_ENTRY)&_ZN5S1C103v22Ev,
  (VTBL_ENTRY)&_ZN5S1C103v23Ev,
  (VTBL_ENTRY)&_ZN5S1C103v24Ev,
  (VTBL_ENTRY)&_ZN5S1C103v25Ev,
  (VTBL_ENTRY)&_ZN5S1C103v26Ev,
  (VTBL_ENTRY)&_ZN5S1C103v27Ev,
  (VTBL_ENTRY)&_ZN5S1C103v28Ev,
  (VTBL_ENTRY)&_ZN5S1C103v29Ev,
  (VTBL_ENTRY)&_ZN5S1C103v30Ev,
  (VTBL_ENTRY)&_ZN5S1C103v31Ev,
  (VTBL_ENTRY)&_ZN5S1C103v32Ev,
  (VTBL_ENTRY)&_ZN5S1C103v33Ev,
  (VTBL_ENTRY)&_ZN5S1C103v34Ev,
  (VTBL_ENTRY)&_ZN5S1C103v35Ev,
  (VTBL_ENTRY)&_ZN5S1C103v36Ev,
  (VTBL_ENTRY)&_ZN5S1C103v37Ev,
  (VTBL_ENTRY)&_ZN5S1C103v38Ev,
  (VTBL_ENTRY)&_ZN5S1C103v39Ev,
  (VTBL_ENTRY)&_ZN5S1C103v40Ev,
  (VTBL_ENTRY)&_ZN5S1C103v41Ev,
  (VTBL_ENTRY)&_ZN5S1C103v42Ev,
  (VTBL_ENTRY)&_ZN5S1C103v43Ev,
  (VTBL_ENTRY)&_ZN5S1C103v44Ev,
  (VTBL_ENTRY)&_ZN5S1C103v45Ev,
  (VTBL_ENTRY)&_ZN5S1C103v46Ev,
  (VTBL_ENTRY)&_ZN5S1C103v47Ev,
  (VTBL_ENTRY)&_ZN5S1C103v48Ev,
  (VTBL_ENTRY)&_ZN5S1C103v49Ev,
  (VTBL_ENTRY)&_ZN5S1C103v50Ev,
  (VTBL_ENTRY)&_ZN5S1C103v51Ev,
  (VTBL_ENTRY)&_ZN5S1C103v52Ev,
  (VTBL_ENTRY)&_ZN5S1C103v53Ev,
  (VTBL_ENTRY)&_ZN5S1C103v54Ev,
  (VTBL_ENTRY)&_ZN5S1C103v55Ev,
  (VTBL_ENTRY)&_ZN5S1C103v56Ev,
  (VTBL_ENTRY)&_ZN5S1C103v57Ev,
  (VTBL_ENTRY)&_ZN5S1C103v58Ev,
  (VTBL_ENTRY)&_ZN5S1C103v59Ev,
  (VTBL_ENTRY)&_ZN5S1C103v60Ev,
  (VTBL_ENTRY)&_ZN5S1C103v61Ev,
  (VTBL_ENTRY)&_ZN5S1C103v62Ev,
  (VTBL_ENTRY)&_ZN5S1C103v63Ev,
  (VTBL_ENTRY)&_ZN5S1C103v64Ev,
  (VTBL_ENTRY)&_ZN5S1C103v65Ev,
  (VTBL_ENTRY)&_ZN5S1C103v66Ev,
  (VTBL_ENTRY)&_ZN5S1C103v67Ev,
  (VTBL_ENTRY)&_ZN5S1C103v68Ev,
  (VTBL_ENTRY)&_ZN5S1C103v69Ev,
  (VTBL_ENTRY)&_ZN5S1C103v70Ev,
  (VTBL_ENTRY)&_ZN5S1C103v71Ev,
  (VTBL_ENTRY)&_ZN5S1C103v72Ev,
  (VTBL_ENTRY)&_ZN5S1C103v73Ev,
  (VTBL_ENTRY)&_ZN5S1C103v74Ev,
  (VTBL_ENTRY)&_ZN5S1C103v75Ev,
  (VTBL_ENTRY)&_ZN5S1C103v76Ev,
  (VTBL_ENTRY)&_ZN5S1C103v77Ev,
  (VTBL_ENTRY)&_ZN5S1C103v78Ev,
  (VTBL_ENTRY)&_ZN5S1C103v79Ev,
  (VTBL_ENTRY)&_ZN5S1C103v80Ev,
  (VTBL_ENTRY)&_ZN5S1C103v81Ev,
  (VTBL_ENTRY)&_ZN5S1C103v82Ev,
  (VTBL_ENTRY)&_ZN5S1C103v83Ev,
  (VTBL_ENTRY)&_ZN5S1C103v84Ev,
  (VTBL_ENTRY)&_ZN5S1C103v85Ev,
  (VTBL_ENTRY)&_ZN5S1C103v86Ev,
  (VTBL_ENTRY)&_ZN5S1C103v87Ev,
  (VTBL_ENTRY)&_ZN5S1C103v88Ev,
  (VTBL_ENTRY)&_ZN5S1C103v89Ev,
  (VTBL_ENTRY)&_ZN5S1C103v90Ev,
  (VTBL_ENTRY)&_ZN5S1C103v91Ev,
  (VTBL_ENTRY)&_ZN5S1C103v92Ev,
  (VTBL_ENTRY)&_ZN5S1C103v93Ev,
  (VTBL_ENTRY)&_ZN5S1C103v94Ev,
  (VTBL_ENTRY)&_ZN5S1C103v95Ev,
  (VTBL_ENTRY)&_ZN5S1C103v96Ev,
  (VTBL_ENTRY)&_ZN5S1C103v97Ev,
  (VTBL_ENTRY)&_ZN5S1C103v98Ev,
  (VTBL_ENTRY)&_ZN5S1C103v99Ev,
  (VTBL_ENTRY)&_ZN5S1C104v100Ev,
  (VTBL_ENTRY)&_ZN5S1C104v101Ev,
  (VTBL_ENTRY)&_ZN5S1C104v102Ev,
  (VTBL_ENTRY)&_ZN5S1C104v103Ev,
  (VTBL_ENTRY)&_ZN5S1C104v104Ev,
  (VTBL_ENTRY)&_ZN5S1C104v105Ev,
  (VTBL_ENTRY)&_ZN5S1C104v106Ev,
  (VTBL_ENTRY)&_ZN5S1C104v107Ev,
  (VTBL_ENTRY)&_ZN5S1C104v108Ev,
  (VTBL_ENTRY)&_ZN5S1C104v109Ev,
  (VTBL_ENTRY)&_ZN5S1C104v110Ev,
  (VTBL_ENTRY)&_ZN5S1C104v111Ev,
  (VTBL_ENTRY)&_ZN4S1C84v112Ev,
  (VTBL_ENTRY)&_ZN4S1C84v113Ev,
  (VTBL_ENTRY)&_ZN4S1C84v114Ev,
  (VTBL_ENTRY)&_ZN4S1C84v115Ev,
  (VTBL_ENTRY)&_ZN4S1C84v116Ev,
  (VTBL_ENTRY)&_ZN4S1C84v117Ev,
  (VTBL_ENTRY)&_ZN4S1C84v118Ev,
  (VTBL_ENTRY)&_ZN4S1C84v119Ev,
  (VTBL_ENTRY)&_ZN4S1C84v120Ev,
  (VTBL_ENTRY)&_ZN4S1C84v121Ev,
  (VTBL_ENTRY)&_ZN4S1C84v122Ev,
  (VTBL_ENTRY)&_ZN4S1C84v123Ev,
  (VTBL_ENTRY)&_ZN4S1C84v124Ev,
  (VTBL_ENTRY)&_ZN4S1C84v125Ev,
  (VTBL_ENTRY)&_ZN4S1C84v126Ev,
  (VTBL_ENTRY)&_ZN4S1C84v127Ev,
  (VTBL_ENTRY)&_ZN4S1C84v128Ev,
  (VTBL_ENTRY)&_ZN4S1C84v129Ev,
  (VTBL_ENTRY)&_ZN4S1C84v130Ev,
  (VTBL_ENTRY)&_ZN4S1C84v131Ev,
  (VTBL_ENTRY)&_ZN4S1C84v132Ev,
  (VTBL_ENTRY)&_ZN4S1C84v133Ev,
  (VTBL_ENTRY)&_ZN4S1C84v134Ev,
  (VTBL_ENTRY)&_ZN4S1C84v135Ev,
  (VTBL_ENTRY)&_ZN4S1C84v136Ev,
  (VTBL_ENTRY)&_ZN4S1C84v137Ev,
  (VTBL_ENTRY)&_ZN4S1C74v138Ev,
  (VTBL_ENTRY)&_ZN4S1C74v139Ev,
  (VTBL_ENTRY)&_ZN4S1C74v140Ev,
  (VTBL_ENTRY)&_ZN4S1C74v141Ev,
  (VTBL_ENTRY)&_ZN4S1C74v142Ev,
  (VTBL_ENTRY)&_ZN4S1C74v143Ev,
  (VTBL_ENTRY)&_ZN4S1C74v144Ev,
  (VTBL_ENTRY)&_ZN4S1C74v145Ev,
  (VTBL_ENTRY)&_ZN4S1C74v146Ev,
  (VTBL_ENTRY)&_ZN4S1C74v147Ev,
  (VTBL_ENTRY)&_ZN4S1C74v148Ev,
  (VTBL_ENTRY)&_ZN4S1C74v149Ev,
  (VTBL_ENTRY)&_ZN4S1C74v150Ev,
  (VTBL_ENTRY)&_ZN4S1C74v151Ev,
  (VTBL_ENTRY)&_ZN4S1C74v152Ev,
  (VTBL_ENTRY)&_ZN4S1C74v153Ev,
  (VTBL_ENTRY)&_ZN4S1C74v154Ev,
  (VTBL_ENTRY)&_ZN4S1C74v155Ev,
};
extern VTBL_ENTRY _ZTI4S1C7[];
extern  VTBL_ENTRY _ZTV4S1C7[];
Class_Descriptor cd_S1C7 = {  "S1C7", // class name
  bases_S1C7, 4,
  &(vtc_S1C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI4S1C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV4S1C7),155, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1C6  : S1C7 {
  virtual void  v156(); // _ZN4S1C64v156Ev
  virtual void  v157(); // _ZN4S1C64v157Ev
  virtual void  v158(); // _ZN4S1C64v158Ev
  virtual void  v159(); // _ZN4S1C64v159Ev
  virtual void  v160(); // _ZN4S1C64v160Ev
  virtual void  v161(); // _ZN4S1C64v161Ev
  virtual void  v162(); // _ZN4S1C64v162Ev
  virtual void  v163(); // _ZN4S1C64v163Ev
  virtual void  v164(); // _ZN4S1C64v164Ev
  virtual void  v165(); // _ZN4S1C64v165Ev
  virtual void  v166(); // _ZN4S1C64v166Ev
  virtual void  v167(); // _ZN4S1C64v167Ev
  virtual void  v168(); // _ZN4S1C64v168Ev
  virtual void  v169(); // _ZN4S1C64v169Ev
  virtual void  v170(); // _ZN4S1C64v170Ev
  virtual void  v171(); // _ZN4S1C64v171Ev
  virtual void  v172(); // _ZN4S1C64v172Ev
  virtual void  v173(); // _ZN4S1C64v173Ev
  virtual void  v174(); // _ZN4S1C64v174Ev
  virtual void  v175(); // _ZN4S1C64v175Ev
  virtual void  v176(); // _ZN4S1C64v176Ev
  virtual void  v177(); // _ZN4S1C64v177Ev
  virtual void  v178(); // _ZN4S1C64v178Ev
  virtual void  v179(); // _ZN4S1C64v179Ev
  virtual void  v180(); // _ZN4S1C64v180Ev
  virtual void  v181(); // _ZN4S1C64v181Ev
  ~S1C6(); // tgen
  S1C6(); // tgen
};
//SIG(-1 S1C6) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m Fp Fi} 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 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 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} 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}


void  S1C6 ::v156(){vfunc_called(this, "_ZN4S1C64v156Ev");}
void  S1C6 ::v157(){vfunc_called(this, "_ZN4S1C64v157Ev");}
void  S1C6 ::v158(){vfunc_called(this, "_ZN4S1C64v158Ev");}
void  S1C6 ::v159(){vfunc_called(this, "_ZN4S1C64v159Ev");}
void  S1C6 ::v160(){vfunc_called(this, "_ZN4S1C64v160Ev");}
void  S1C6 ::v161(){vfunc_called(this, "_ZN4S1C64v161Ev");}
void  S1C6 ::v162(){vfunc_called(this, "_ZN4S1C64v162Ev");}
void  S1C6 ::v163(){vfunc_called(this, "_ZN4S1C64v163Ev");}
void  S1C6 ::v164(){vfunc_called(this, "_ZN4S1C64v164Ev");}
void  S1C6 ::v165(){vfunc_called(this, "_ZN4S1C64v165Ev");}
void  S1C6 ::v166(){vfunc_called(this, "_ZN4S1C64v166Ev");}
void  S1C6 ::v167(){vfunc_called(this, "_ZN4S1C64v167Ev");}
void  S1C6 ::v168(){vfunc_called(this, "_ZN4S1C64v168Ev");}
void  S1C6 ::v169(){vfunc_called(this, "_ZN4S1C64v169Ev");}
void  S1C6 ::v170(){vfunc_called(this, "_ZN4S1C64v170Ev");}
void  S1C6 ::v171(){vfunc_called(this, "_ZN4S1C64v171Ev");}
void  S1C6 ::v172(){vfunc_called(this, "_ZN4S1C64v172Ev");}
void  S1C6 ::v173(){vfunc_called(this, "_ZN4S1C64v173Ev");}
void  S1C6 ::v174(){vfunc_called(this, "_ZN4S1C64v174Ev");}
void  S1C6 ::v175(){vfunc_called(this, "_ZN4S1C64v175Ev");}
void  S1C6 ::v176(){vfunc_called(this, "_ZN4S1C64v176Ev");}
void  S1C6 ::v177(){vfunc_called(this, "_ZN4S1C64v177Ev");}
void  S1C6 ::v178(){vfunc_called(this, "_ZN4S1C64v178Ev");}
void  S1C6 ::v179(){vfunc_called(this, "_ZN4S1C64v179Ev");}
void  S1C6 ::v180(){vfunc_called(this, "_ZN4S1C64v180Ev");}
void  S1C6 ::v181(){vfunc_called(this, "_ZN4S1C64v181Ev");}
S1C6 ::~S1C6(){ note_dtor("S1C6", this);} // tgen
S1C6 ::S1C6(){ note_ctor("S1C6", this);} // tgen

static void Test_S1C6()
{
  extern Class_Descriptor cd_S1C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1C6, buf);
    S1C6 *dp, &lv = *(dp=new (buf) S1C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1C6)");
    check_base_class_offset(lv, (S1C11_nt*)(S1C10*)(S1C9*)(S1C8*)(S1C7*), 0, "S1C6");
    check_base_class_offset(lv, (S1C10*)(S1C9*)(S1C8*)(S1C7*), 0, "S1C6");
    check_base_class_offset(lv, (S1C9*)(S1C8*)(S1C7*), 0, "S1C6");
    check_base_class_offset(lv, (S1C8*)(S1C7*), 0, "S1C6");
    check_base_class_offset(lv, (S1C7*), 0, "S1C6");
    test_class_info(&lv, &cd_S1C6);
    dp->~S1C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1C6(Test_S1C6, "S1C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN4S1C6C1Ev();
extern void _ZN4S1C6D1Ev();
Name_Map name_map_S1C6[] = {
  NSPAIR(_ZN4S1C6C1Ev),
  NSPAIR(_ZN4S1C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1C10;
extern VTBL_ENTRY _ZTI5S1C10[];
extern  VTBL_ENTRY _ZTV5S1C10[];
extern Class_Descriptor cd_S1C9;
extern VTBL_ENTRY _ZTI4S1C9[];
extern  VTBL_ENTRY _ZTV4S1C9[];
extern Class_Descriptor cd_S1C8;
extern VTBL_ENTRY _ZTI4S1C8[];
extern  VTBL_ENTRY _ZTV4S1C8[];
extern Class_Descriptor cd_S1C7;
extern VTBL_ENTRY _ZTI4S1C7[];
extern  VTBL_ENTRY _ZTV4S1C7[];
static Base_Class bases_S1C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI4S1C6[];
extern void _ZN4S1C6D1Ev();
extern void _ZN4S1C6D0Ev();
extern void _ZN5S1C102v5Ev();
extern void _ZN5S1C102v6Ev();
extern void _ZN5S1C102v7Ev();
extern void _ZN5S1C102v8Ev();
extern void _ZN5S1C102v9Ev();
extern void _ZN5S1C103v10Ev();
extern void _ZN5S1C103v11Ev();
extern void _ZN5S1C103v12Ev();
extern void _ZN5S1C103v13Ev();
extern void _ZN5S1C103v14Ev();
extern void _ZN5S1C103v15Ev();
extern void _ZN5S1C103v16Ev();
extern void _ZN5S1C103v17Ev();
extern void _ZN5S1C103v18Ev();
extern void _ZN5S1C103v19Ev();
extern void _ZN5S1C103v20Ev();
extern void _ZN5S1C103v21Ev();
extern void _ZN5S1C103v22Ev();
extern void _ZN5S1C103v23Ev();
extern void _ZN5S1C103v24Ev();
extern void _ZN5S1C103v25Ev();
extern void _ZN5S1C103v26Ev();
extern void _ZN5S1C103v27Ev();
extern void _ZN5S1C103v28Ev();
extern void _ZN5S1C103v29Ev();
extern void _ZN5S1C103v30Ev();
extern void _ZN5S1C103v31Ev();
extern void _ZN5S1C103v32Ev();
extern void _ZN5S1C103v33Ev();
extern void _ZN5S1C103v34Ev();
extern void _ZN5S1C103v35Ev();
extern void _ZN5S1C103v36Ev();
extern void _ZN5S1C103v37Ev();
extern void _ZN5S1C103v38Ev();
extern void _ZN5S1C103v39Ev();
extern void _ZN5S1C103v40Ev();
extern void _ZN5S1C103v41Ev();
extern void _ZN5S1C103v42Ev();
extern void _ZN5S1C103v43Ev();
extern void _ZN5S1C103v44Ev();
extern void _ZN5S1C103v45Ev();
extern void _ZN5S1C103v46Ev();
extern void _ZN5S1C103v47Ev();
extern void _ZN5S1C103v48Ev();
extern void _ZN5S1C103v49Ev();
extern void _ZN5S1C103v50Ev();
extern void _ZN5S1C103v51Ev();
extern void _ZN5S1C103v52Ev();
extern void _ZN5S1C103v53Ev();
extern void _ZN5S1C103v54Ev();
extern void _ZN5S1C103v55Ev();
extern void _ZN5S1C103v56Ev();
extern void _ZN5S1C103v57Ev();
extern void _ZN5S1C103v58Ev();
extern void _ZN5S1C103v59Ev();
extern void _ZN5S1C103v60Ev();
extern void _ZN5S1C103v61Ev();
extern void _ZN5S1C103v62Ev();
extern void _ZN5S1C103v63Ev();
extern void _ZN5S1C103v64Ev();
extern void _ZN5S1C103v65Ev();
extern void _ZN5S1C103v66Ev();
extern void _ZN5S1C103v67Ev();
extern void _ZN5S1C103v68Ev();
extern void _ZN5S1C103v69Ev();
extern void _ZN5S1C103v70Ev();
extern void _ZN5S1C103v71Ev();
extern void _ZN5S1C103v72Ev();
extern void _ZN5S1C103v73Ev();
extern void _ZN5S1C103v74Ev();
extern void _ZN5S1C103v75Ev();
extern void _ZN5S1C103v76Ev();
extern void _ZN5S1C103v77Ev();
extern void _ZN5S1C103v78Ev();
extern void _ZN5S1C103v79Ev();
extern void _ZN5S1C103v80Ev();
extern void _ZN5S1C103v81Ev();
extern void _ZN5S1C103v82Ev();
extern void _ZN5S1C103v83Ev();
extern void _ZN5S1C103v84Ev();
extern void _ZN5S1C103v85Ev();
extern void _ZN5S1C103v86Ev();
extern void _ZN5S1C103v87Ev();
extern void _ZN5S1C103v88Ev();
extern void _ZN5S1C103v89Ev();
extern void _ZN5S1C103v90Ev();
extern void _ZN5S1C103v91Ev();
extern void _ZN5S1C103v92Ev();
extern void _ZN5S1C103v93Ev();
extern void _ZN5S1C103v94Ev();
extern void _ZN5S1C103v95Ev();
extern void _ZN5S1C103v96Ev();
extern void _ZN5S1C103v97Ev();
extern void _ZN5S1C103v98Ev();
extern void _ZN5S1C103v99Ev();
extern void _ZN5S1C104v100Ev();
extern void _ZN5S1C104v101Ev();
extern void _ZN5S1C104v102Ev();
extern void _ZN5S1C104v103Ev();
extern void _ZN5S1C104v104Ev();
extern void _ZN5S1C104v105Ev();
extern void _ZN5S1C104v106Ev();
extern void _ZN5S1C104v107Ev();
extern void _ZN5S1C104v108Ev();
extern void _ZN5S1C104v109Ev();
extern void _ZN5S1C104v110Ev();
extern void _ZN5S1C104v111Ev();
extern void _ZN4S1C84v112Ev();
extern void _ZN4S1C84v113Ev();
extern void _ZN4S1C84v114Ev();
extern void _ZN4S1C84v115Ev();
extern void _ZN4S1C84v116Ev();
extern void _ZN4S1C84v117Ev();
extern void _ZN4S1C84v118Ev();
extern void _ZN4S1C84v119Ev();
extern void _ZN4S1C84v120Ev();
extern void _ZN4S1C84v121Ev();
extern void _ZN4S1C84v122Ev();
extern void _ZN4S1C84v123Ev();
extern void _ZN4S1C84v124Ev();
extern void _ZN4S1C84v125Ev();
extern void _ZN4S1C84v126Ev();
extern void _ZN4S1C84v127Ev();
extern void _ZN4S1C84v128Ev();
extern void _ZN4S1C84v129Ev();
extern void _ZN4S1C84v130Ev();
extern void _ZN4S1C84v131Ev();
extern void _ZN4S1C84v132Ev();
extern void _ZN4S1C84v133Ev();
extern void _ZN4S1C84v134Ev();
extern void _ZN4S1C84v135Ev();
extern void _ZN4S1C84v136Ev();
extern void _ZN4S1C84v137Ev();
extern void _ZN4S1C74v138Ev();
extern void _ZN4S1C74v139Ev();
extern void _ZN4S1C74v140Ev();
extern void _ZN4S1C74v141Ev();
extern void _ZN4S1C74v142Ev();
extern void _ZN4S1C74v143Ev();
extern void _ZN4S1C74v144Ev();
extern void _ZN4S1C74v145Ev();
extern void _ZN4S1C74v146Ev();
extern void _ZN4S1C74v147Ev();
extern void _ZN4S1C74v148Ev();
extern void _ZN4S1C74v149Ev();
extern void _ZN4S1C74v150Ev();
extern void _ZN4S1C74v151Ev();
extern void _ZN4S1C74v152Ev();
extern void _ZN4S1C74v153Ev();
extern void _ZN4S1C74v154Ev();
extern void _ZN4S1C74v155Ev();
extern void _ZN4S1C64v156Ev();
extern void _ZN4S1C64v157Ev();
extern void _ZN4S1C64v158Ev();
extern void _ZN4S1C64v159Ev();
extern void _ZN4S1C64v160Ev();
extern void _ZN4S1C64v161Ev();
extern void _ZN4S1C64v162Ev();
extern void _ZN4S1C64v163Ev();
extern void _ZN4S1C64v164Ev();
extern void _ZN4S1C64v165Ev();
extern void _ZN4S1C64v166Ev();
extern void _ZN4S1C64v167Ev();
extern void _ZN4S1C64v168Ev();
extern void _ZN4S1C64v169Ev();
extern void _ZN4S1C64v170Ev();
extern void _ZN4S1C64v171Ev();
extern void _ZN4S1C64v172Ev();
extern void _ZN4S1C64v173Ev();
extern void _ZN4S1C64v174Ev();
extern void _ZN4S1C64v175Ev();
extern void _ZN4S1C64v176Ev();
extern void _ZN4S1C64v177Ev();
extern void _ZN4S1C64v178Ev();
extern void _ZN4S1C64v179Ev();
extern void _ZN4S1C64v180Ev();
extern void _ZN4S1C64v181Ev();
static  VTBL_ENTRY vtc_S1C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI4S1C6[0]),
  (VTBL_ENTRY)&_ZN4S1C6D1Ev,
  (VTBL_ENTRY)&_ZN4S1C6D0Ev,
  (VTBL_ENTRY)&_ZN5S1C102v5Ev,
  (VTBL_ENTRY)&_ZN5S1C102v6Ev,
  (VTBL_ENTRY)&_ZN5S1C102v7Ev,
  (VTBL_ENTRY)&_ZN5S1C102v8Ev,
  (VTBL_ENTRY)&_ZN5S1C102v9Ev,
  (VTBL_ENTRY)&_ZN5S1C103v10Ev,
  (VTBL_ENTRY)&_ZN5S1C103v11Ev,
  (VTBL_ENTRY)&_ZN5S1C103v12Ev,
  (VTBL_ENTRY)&_ZN5S1C103v13Ev,
  (VTBL_ENTRY)&_ZN5S1C103v14Ev,
  (VTBL_ENTRY)&_ZN5S1C103v15Ev,
  (VTBL_ENTRY)&_ZN5S1C103v16Ev,
  (VTBL_ENTRY)&_ZN5S1C103v17Ev,
  (VTBL_ENTRY)&_ZN5S1C103v18Ev,
  (VTBL_ENTRY)&_ZN5S1C103v19Ev,
  (VTBL_ENTRY)&_ZN5S1C103v20Ev,
  (VTBL_ENTRY)&_ZN5S1C103v21Ev,
  (VTBL_ENTRY)&_ZN5S1C103v22Ev,
  (VTBL_ENTRY)&_ZN5S1C103v23Ev,
  (VTBL_ENTRY)&_ZN5S1C103v24Ev,
  (VTBL_ENTRY)&_ZN5S1C103v25Ev,
  (VTBL_ENTRY)&_ZN5S1C103v26Ev,
  (VTBL_ENTRY)&_ZN5S1C103v27Ev,
  (VTBL_ENTRY)&_ZN5S1C103v28Ev,
  (VTBL_ENTRY)&_ZN5S1C103v29Ev,
  (VTBL_ENTRY)&_ZN5S1C103v30Ev,
  (VTBL_ENTRY)&_ZN5S1C103v31Ev,
  (VTBL_ENTRY)&_ZN5S1C103v32Ev,
  (VTBL_ENTRY)&_ZN5S1C103v33Ev,
  (VTBL_ENTRY)&_ZN5S1C103v34Ev,
  (VTBL_ENTRY)&_ZN5S1C103v35Ev,
  (VTBL_ENTRY)&_ZN5S1C103v36Ev,
  (VTBL_ENTRY)&_ZN5S1C103v37Ev,
  (VTBL_ENTRY)&_ZN5S1C103v38Ev,
  (VTBL_ENTRY)&_ZN5S1C103v39Ev,
  (VTBL_ENTRY)&_ZN5S1C103v40Ev,
  (VTBL_ENTRY)&_ZN5S1C103v41Ev,
  (VTBL_ENTRY)&_ZN5S1C103v42Ev,
  (VTBL_ENTRY)&_ZN5S1C103v43Ev,
  (VTBL_ENTRY)&_ZN5S1C103v44Ev,
  (VTBL_ENTRY)&_ZN5S1C103v45Ev,
  (VTBL_ENTRY)&_ZN5S1C103v46Ev,
  (VTBL_ENTRY)&_ZN5S1C103v47Ev,
  (VTBL_ENTRY)&_ZN5S1C103v48Ev,
  (VTBL_ENTRY)&_ZN5S1C103v49Ev,
  (VTBL_ENTRY)&_ZN5S1C103v50Ev,
  (VTBL_ENTRY)&_ZN5S1C103v51Ev,
  (VTBL_ENTRY)&_ZN5S1C103v52Ev,
  (VTBL_ENTRY)&_ZN5S1C103v53Ev,
  (VTBL_ENTRY)&_ZN5S1C103v54Ev,
  (VTBL_ENTRY)&_ZN5S1C103v55Ev,
  (VTBL_ENTRY)&_ZN5S1C103v56Ev,
  (VTBL_ENTRY)&_ZN5S1C103v57Ev,
  (VTBL_ENTRY)&_ZN5S1C103v58Ev,
  (VTBL_ENTRY)&_ZN5S1C103v59Ev,
  (VTBL_ENTRY)&_ZN5S1C103v60Ev,
  (VTBL_ENTRY)&_ZN5S1C103v61Ev,
  (VTBL_ENTRY)&_ZN5S1C103v62Ev,
  (VTBL_ENTRY)&_ZN5S1C103v63Ev,
  (VTBL_ENTRY)&_ZN5S1C103v64Ev,
  (VTBL_ENTRY)&_ZN5S1C103v65Ev,
  (VTBL_ENTRY)&_ZN5S1C103v66Ev,
  (VTBL_ENTRY)&_ZN5S1C103v67Ev,
  (VTBL_ENTRY)&_ZN5S1C103v68Ev,
  (VTBL_ENTRY)&_ZN5S1C103v69Ev,
  (VTBL_ENTRY)&_ZN5S1C103v70Ev,
  (VTBL_ENTRY)&_ZN5S1C103v71Ev,
  (VTBL_ENTRY)&_ZN5S1C103v72Ev,
  (VTBL_ENTRY)&_ZN5S1C103v73Ev,
  (VTBL_ENTRY)&_ZN5S1C103v74Ev,
  (VTBL_ENTRY)&_ZN5S1C103v75Ev,
  (VTBL_ENTRY)&_ZN5S1C103v76Ev,
  (VTBL_ENTRY)&_ZN5S1C103v77Ev,
  (VTBL_ENTRY)&_ZN5S1C103v78Ev,
  (VTBL_ENTRY)&_ZN5S1C103v79Ev,
  (VTBL_ENTRY)&_ZN5S1C103v80Ev,
  (VTBL_ENTRY)&_ZN5S1C103v81Ev,
  (VTBL_ENTRY)&_ZN5S1C103v82Ev,
  (VTBL_ENTRY)&_ZN5S1C103v83Ev,
  (VTBL_ENTRY)&_ZN5S1C103v84Ev,
  (VTBL_ENTRY)&_ZN5S1C103v85Ev,
  (VTBL_ENTRY)&_ZN5S1C103v86Ev,
  (VTBL_ENTRY)&_ZN5S1C103v87Ev,
  (VTBL_ENTRY)&_ZN5S1C103v88Ev,
  (VTBL_ENTRY)&_ZN5S1C103v89Ev,
  (VTBL_ENTRY)&_ZN5S1C103v90Ev,
  (VTBL_ENTRY)&_ZN5S1C103v91Ev,
  (VTBL_ENTRY)&_ZN5S1C103v92Ev,
  (VTBL_ENTRY)&_ZN5S1C103v93Ev,
  (VTBL_ENTRY)&_ZN5S1C103v94Ev,
  (VTBL_ENTRY)&_ZN5S1C103v95Ev,
  (VTBL_ENTRY)&_ZN5S1C103v96Ev,
  (VTBL_ENTRY)&_ZN5S1C103v97Ev,
  (VTBL_ENTRY)&_ZN5S1C103v98Ev,
  (VTBL_ENTRY)&_ZN5S1C103v99Ev,
  (VTBL_ENTRY)&_ZN5S1C104v100Ev,
  (VTBL_ENTRY)&_ZN5S1C104v101Ev,
  (VTBL_ENTRY)&_ZN5S1C104v102Ev,
  (VTBL_ENTRY)&_ZN5S1C104v103Ev,
  (VTBL_ENTRY)&_ZN5S1C104v104Ev,
  (VTBL_ENTRY)&_ZN5S1C104v105Ev,
  (VTBL_ENTRY)&_ZN5S1C104v106Ev,
  (VTBL_ENTRY)&_ZN5S1C104v107Ev,
  (VTBL_ENTRY)&_ZN5S1C104v108Ev,
  (VTBL_ENTRY)&_ZN5S1C104v109Ev,
  (VTBL_ENTRY)&_ZN5S1C104v110Ev,
  (VTBL_ENTRY)&_ZN5S1C104v111Ev,
  (VTBL_ENTRY)&_ZN4S1C84v112Ev,
  (VTBL_ENTRY)&_ZN4S1C84v113Ev,
  (VTBL_ENTRY)&_ZN4S1C84v114Ev,
  (VTBL_ENTRY)&_ZN4S1C84v115Ev,
  (VTBL_ENTRY)&_ZN4S1C84v116Ev,
  (VTBL_ENTRY)&_ZN4S1C84v117Ev,
  (VTBL_ENTRY)&_ZN4S1C84v118Ev,
  (VTBL_ENTRY)&_ZN4S1C84v119Ev,
  (VTBL_ENTRY)&_ZN4S1C84v120Ev,
  (VTBL_ENTRY)&_ZN4S1C84v121Ev,
  (VTBL_ENTRY)&_ZN4S1C84v122Ev,
  (VTBL_ENTRY)&_ZN4S1C84v123Ev,
  (VTBL_ENTRY)&_ZN4S1C84v124Ev,
  (VTBL_ENTRY)&_ZN4S1C84v125Ev,
  (VTBL_ENTRY)&_ZN4S1C84v126Ev,
  (VTBL_ENTRY)&_ZN4S1C84v127Ev,
  (VTBL_ENTRY)&_ZN4S1C84v128Ev,
  (VTBL_ENTRY)&_ZN4S1C84v129Ev,
  (VTBL_ENTRY)&_ZN4S1C84v130Ev,
  (VTBL_ENTRY)&_ZN4S1C84v131Ev,
  (VTBL_ENTRY)&_ZN4S1C84v132Ev,
  (VTBL_ENTRY)&_ZN4S1C84v133Ev,
  (VTBL_ENTRY)&_ZN4S1C84v134Ev,
  (VTBL_ENTRY)&_ZN4S1C84v135Ev,
  (VTBL_ENTRY)&_ZN4S1C84v136Ev,
  (VTBL_ENTRY)&_ZN4S1C84v137Ev,
  (VTBL_ENTRY)&_ZN4S1C74v138Ev,
  (VTBL_ENTRY)&_ZN4S1C74v139Ev,
  (VTBL_ENTRY)&_ZN4S1C74v140Ev,
  (VTBL_ENTRY)&_ZN4S1C74v141Ev,
  (VTBL_ENTRY)&_ZN4S1C74v142Ev,
  (VTBL_ENTRY)&_ZN4S1C74v143Ev,
  (VTBL_ENTRY)&_ZN4S1C74v144Ev,
  (VTBL_ENTRY)&_ZN4S1C74v145Ev,
  (VTBL_ENTRY)&_ZN4S1C74v146Ev,
  (VTBL_ENTRY)&_ZN4S1C74v147Ev,
  (VTBL_ENTRY)&_ZN4S1C74v148Ev,
  (VTBL_ENTRY)&_ZN4S1C74v149Ev,
  (VTBL_ENTRY)&_ZN4S1C74v150Ev,
  (VTBL_ENTRY)&_ZN4S1C74v151Ev,
  (VTBL_ENTRY)&_ZN4S1C74v152Ev,
  (VTBL_ENTRY)&_ZN4S1C74v153Ev,
  (VTBL_ENTRY)&_ZN4S1C74v154Ev,
  (VTBL_ENTRY)&_ZN4S1C74v155Ev,
  (VTBL_ENTRY)&_ZN4S1C64v156Ev,
  (VTBL_ENTRY)&_ZN4S1C64v157Ev,
  (VTBL_ENTRY)&_ZN4S1C64v158Ev,
  (VTBL_ENTRY)&_ZN4S1C64v159Ev,
  (VTBL_ENTRY)&_ZN4S1C64v160Ev,
  (VTBL_ENTRY)&_ZN4S1C64v161Ev,
  (VTBL_ENTRY)&_ZN4S1C64v162Ev,
  (VTBL_ENTRY)&_ZN4S1C64v163Ev,
  (VTBL_ENTRY)&_ZN4S1C64v164Ev,
  (VTBL_ENTRY)&_ZN4S1C64v165Ev,
  (VTBL_ENTRY)&_ZN4S1C64v166Ev,
  (VTBL_ENTRY)&_ZN4S1C64v167Ev,
  (VTBL_ENTRY)&_ZN4S1C64v168Ev,
  (VTBL_ENTRY)&_ZN4S1C64v169Ev,
  (VTBL_ENTRY)&_ZN4S1C64v170Ev,
  (VTBL_ENTRY)&_ZN4S1C64v171Ev,
  (VTBL_ENTRY)&_ZN4S1C64v172Ev,
  (VTBL_ENTRY)&_ZN4S1C64v173Ev,
  (VTBL_ENTRY)&_ZN4S1C64v174Ev,
  (VTBL_ENTRY)&_ZN4S1C64v175Ev,
  (VTBL_ENTRY)&_ZN4S1C64v176Ev,
  (VTBL_ENTRY)&_ZN4S1C64v177Ev,
  (VTBL_ENTRY)&_ZN4S1C64v178Ev,
  (VTBL_ENTRY)&_ZN4S1C64v179Ev,
  (VTBL_ENTRY)&_ZN4S1C64v180Ev,
  (VTBL_ENTRY)&_ZN4S1C64v181Ev,
};
extern VTBL_ENTRY _ZTI4S1C6[];
extern  VTBL_ENTRY _ZTV4S1C6[];
Class_Descriptor cd_S1C6 = {  "S1C6", // class name
  bases_S1C6, 5,
  &(vtc_S1C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI4S1C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV4S1C6),181, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1C5  : S1C6 {
  ~S1C5(); // tgen
  S1C5(); // tgen
};
//SIG(-1 S1C5) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd m Fp Fi} 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 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 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}}


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

static void Test_S1C5()
{
  extern Class_Descriptor cd_S1C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1C5, buf);
    S1C5 *dp, &lv = *(dp=new (buf) S1C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1C5)");
    check_base_class_offset(lv, (S1C11_nt*)(S1C10*)(S1C9*)(S1C8*)(S1C7*)(S1C6*), 0, "S1C5");
    check_base_class_offset(lv, (S1C10*)(S1C9*)(S1C8*)(S1C7*)(S1C6*), 0, "S1C5");
    check_base_class_offset(lv, (S1C9*)(S1C8*)(S1C7*)(S1C6*), 0, "S1C5");
    check_base_class_offset(lv, (S1C8*)(S1C7*)(S1C6*), 0, "S1C5");
    check_base_class_offset(lv, (S1C7*)(S1C6*), 0, "S1C5");
    check_base_class_offset(lv, (S1C6*), 0, "S1C5");
    test_class_info(&lv, &cd_S1C5);
    dp->~S1C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1C5(Test_S1C5, "S1C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN4S1C5C1Ev();
extern void _ZN4S1C5D1Ev();
Name_Map name_map_S1C5[] = {
  NSPAIR(_ZN4S1C5C1Ev),
  NSPAIR(_ZN4S1C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1C10;
extern VTBL_ENTRY _ZTI5S1C10[];
extern  VTBL_ENTRY _ZTV5S1C10[];
extern Class_Descriptor cd_S1C9;
extern VTBL_ENTRY _ZTI4S1C9[];
extern  VTBL_ENTRY _ZTV4S1C9[];
extern Class_Descriptor cd_S1C8;
extern VTBL_ENTRY _ZTI4S1C8[];
extern  VTBL_ENTRY _ZTV4S1C8[];
extern Class_Descriptor cd_S1C7;
extern VTBL_ENTRY _ZTI4S1C7[];
extern  VTBL_ENTRY _ZTV4S1C7[];
extern Class_Descriptor cd_S1C6;
extern VTBL_ENTRY _ZTI4S1C6[];
extern  VTBL_ENTRY _ZTV4S1C6[];
static Base_Class bases_S1C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI4S1C5[];
extern void _ZN4S1C5D1Ev();
extern void _ZN4S1C5D0Ev();
extern void _ZN5S1C102v5Ev();
extern void _ZN5S1C102v6Ev();
extern void _ZN5S1C102v7Ev();
extern void _ZN5S1C102v8Ev();
extern void _ZN5S1C102v9Ev();
extern void _ZN5S1C103v10Ev();
extern void _ZN5S1C103v11Ev();
extern void _ZN5S1C103v12Ev();
extern void _ZN5S1C103v13Ev();
extern void _ZN5S1C103v14Ev();
extern void _ZN5S1C103v15Ev();
extern void _ZN5S1C103v16Ev();
extern void _ZN5S1C103v17Ev();
extern void _ZN5S1C103v18Ev();
extern void _ZN5S1C103v19Ev();
extern void _ZN5S1C103v20Ev();
extern void _ZN5S1C103v21Ev();
extern void _ZN5S1C103v22Ev();
extern void _ZN5S1C103v23Ev();
extern void _ZN5S1C103v24Ev();
extern void _ZN5S1C103v25Ev();
extern void _ZN5S1C103v26Ev();
extern void _ZN5S1C103v27Ev();
extern void _ZN5S1C103v28Ev();
extern void _ZN5S1C103v29Ev();
extern void _ZN5S1C103v30Ev();
extern void _ZN5S1C103v31Ev();
extern void _ZN5S1C103v32Ev();
extern void _ZN5S1C103v33Ev();
extern void _ZN5S1C103v34Ev();
extern void _ZN5S1C103v35Ev();
extern void _ZN5S1C103v36Ev();
extern void _ZN5S1C103v37Ev();
extern void _ZN5S1C103v38Ev();
extern void _ZN5S1C103v39Ev();
extern void _ZN5S1C103v40Ev();
extern void _ZN5S1C103v41Ev();
extern void _ZN5S1C103v42Ev();
extern void _ZN5S1C103v43Ev();
extern void _ZN5S1C103v44Ev();
extern void _ZN5S1C103v45Ev();
extern void _ZN5S1C103v46Ev();
extern void _ZN5S1C103v47Ev();
extern void _ZN5S1C103v48Ev();
extern void _ZN5S1C103v49Ev();
extern void _ZN5S1C103v50Ev();
extern void _ZN5S1C103v51Ev();
extern void _ZN5S1C103v52Ev();
extern void _ZN5S1C103v53Ev();
extern void _ZN5S1C103v54Ev();
extern void _ZN5S1C103v55Ev();
extern void _ZN5S1C103v56Ev();
extern void _ZN5S1C103v57Ev();
extern void _ZN5S1C103v58Ev();
extern void _ZN5S1C103v59Ev();
extern void _ZN5S1C103v60Ev();
extern void _ZN5S1C103v61Ev();
extern void _ZN5S1C103v62Ev();
extern void _ZN5S1C103v63Ev();
extern void _ZN5S1C103v64Ev();
extern void _ZN5S1C103v65Ev();
extern void _ZN5S1C103v66Ev();
extern void _ZN5S1C103v67Ev();
extern void _ZN5S1C103v68Ev();
extern void _ZN5S1C103v69Ev();
extern void _ZN5S1C103v70Ev();
extern void _ZN5S1C103v71Ev();
extern void _ZN5S1C103v72Ev();
extern void _ZN5S1C103v73Ev();
extern void _ZN5S1C103v74Ev();
extern void _ZN5S1C103v75Ev();
extern void _ZN5S1C103v76Ev();
extern void _ZN5S1C103v77Ev();
extern void _ZN5S1C103v78Ev();
extern void _ZN5S1C103v79Ev();
extern void _ZN5S1C103v80Ev();
extern void _ZN5S1C103v81Ev();
extern void _ZN5S1C103v82Ev();
extern void _ZN5S1C103v83Ev();
extern void _ZN5S1C103v84Ev();
extern void _ZN5S1C103v85Ev();
extern void _ZN5S1C103v86Ev();
extern void _ZN5S1C103v87Ev();
extern void _ZN5S1C103v88Ev();
extern void _ZN5S1C103v89Ev();
extern void _ZN5S1C103v90Ev();
extern void _ZN5S1C103v91Ev();
extern void _ZN5S1C103v92Ev();
extern void _ZN5S1C103v93Ev();
extern void _ZN5S1C103v94Ev();
extern void _ZN5S1C103v95Ev();
extern void _ZN5S1C103v96Ev();
extern void _ZN5S1C103v97Ev();
extern void _ZN5S1C103v98Ev();
extern void _ZN5S1C103v99Ev();
extern void _ZN5S1C104v100Ev();
extern void _ZN5S1C104v101Ev();
extern void _ZN5S1C104v102Ev();
extern void _ZN5S1C104v103Ev();
extern void _ZN5S1C104v104Ev();
extern void _ZN5S1C104v105Ev();
extern void _ZN5S1C104v106Ev();
extern void _ZN5S1C104v107Ev();
extern void _ZN5S1C104v108Ev();
extern void _ZN5S1C104v109Ev();
extern void _ZN5S1C104v110Ev();
extern void _ZN5S1C104v111Ev();
extern void _ZN4S1C84v112Ev();
extern void _ZN4S1C84v113Ev();
extern void _ZN4S1C84v114Ev();
extern void _ZN4S1C84v115Ev();
extern void _ZN4S1C84v116Ev();
extern void _ZN4S1C84v117Ev();
extern void _ZN4S1C84v118Ev();
extern void _ZN4S1C84v119Ev();
extern void _ZN4S1C84v120Ev();
extern void _ZN4S1C84v121Ev();
extern void _ZN4S1C84v122Ev();
extern void _ZN4S1C84v123Ev();
extern void _ZN4S1C84v124Ev();
extern void _ZN4S1C84v125Ev();
extern void _ZN4S1C84v126Ev();
extern void _ZN4S1C84v127Ev();
extern void _ZN4S1C84v128Ev();
extern void _ZN4S1C84v129Ev();
extern void _ZN4S1C84v130Ev();
extern void _ZN4S1C84v131Ev();
extern void _ZN4S1C84v132Ev();
extern void _ZN4S1C84v133Ev();
extern void _ZN4S1C84v134Ev();
extern void _ZN4S1C84v135Ev();
extern void _ZN4S1C84v136Ev();
extern void _ZN4S1C84v137Ev();
extern void _ZN4S1C74v138Ev();
extern void _ZN4S1C74v139Ev();
extern void _ZN4S1C74v140Ev();
extern void _ZN4S1C74v141Ev();
extern void _ZN4S1C74v142Ev();
extern void _ZN4S1C74v143Ev();
extern void _ZN4S1C74v144Ev();
extern void _ZN4S1C74v145Ev();
extern void _ZN4S1C74v146Ev();
extern void _ZN4S1C74v147Ev();
extern void _ZN4S1C74v148Ev();
extern void _ZN4S1C74v149Ev();
extern void _ZN4S1C74v150Ev();
extern void _ZN4S1C74v151Ev();
extern void _ZN4S1C74v152Ev();
extern void _ZN4S1C74v153Ev();
extern void _ZN4S1C74v154Ev();
extern void _ZN4S1C74v155Ev();
extern void _ZN4S1C64v156Ev();
extern void _ZN4S1C64v157Ev();
extern void _ZN4S1C64v158Ev();
extern void _ZN4S1C64v159Ev();
extern void _ZN4S1C64v160Ev();
extern void _ZN4S1C64v161Ev();
extern void _ZN4S1C64v162Ev();
extern void _ZN4S1C64v163Ev();
extern void _ZN4S1C64v164Ev();
extern void _ZN4S1C64v165Ev();
extern void _ZN4S1C64v166Ev();
extern void _ZN4S1C64v167Ev();
extern void _ZN4S1C64v168Ev();
extern void _ZN4S1C64v169Ev();
extern void _ZN4S1C64v170Ev();
extern void _ZN4S1C64v171Ev();
extern void _ZN4S1C64v172Ev();
extern void _ZN4S1C64v173Ev();
extern void _ZN4S1C64v174Ev();
extern void _ZN4S1C64v175Ev();
extern void _ZN4S1C64v176Ev();
extern void _ZN4S1C64v177Ev();
extern void _ZN4S1C64v178Ev();
extern void _ZN4S1C64v179Ev();
extern void _ZN4S1C64v180Ev();
extern void _ZN4S1C64v181Ev();
static  VTBL_ENTRY vtc_S1C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI4S1C5[0]),
  (VTBL_ENTRY)&_ZN4S1C5D1Ev,
  (VTBL_ENTRY)&_ZN4S1C5D0Ev,
  (VTBL_ENTRY)&_ZN5S1C102v5Ev,
  (VTBL_ENTRY)&_ZN5S1C102v6Ev,
  (VTBL_ENTRY)&_ZN5S1C102v7Ev,
  (VTBL_ENTRY)&_ZN5S1C102v8Ev,
  (VTBL_ENTRY)&_ZN5S1C102v9Ev,
  (VTBL_ENTRY)&_ZN5S1C103v10Ev,
  (VTBL_ENTRY)&_ZN5S1C103v11Ev,
  (VTBL_ENTRY)&_ZN5S1C103v12Ev,
  (VTBL_ENTRY)&_ZN5S1C103v13Ev,
  (VTBL_ENTRY)&_ZN5S1C103v14Ev,
  (VTBL_ENTRY)&_ZN5S1C103v15Ev,
  (VTBL_ENTRY)&_ZN5S1C103v16Ev,
  (VTBL_ENTRY)&_ZN5S1C103v17Ev,
  (VTBL_ENTRY)&_ZN5S1C103v18Ev,
  (VTBL_ENTRY)&_ZN5S1C103v19Ev,
  (VTBL_ENTRY)&_ZN5S1C103v20Ev,
  (VTBL_ENTRY)&_ZN5S1C103v21Ev,
  (VTBL_ENTRY)&_ZN5S1C103v22Ev,
  (VTBL_ENTRY)&_ZN5S1C103v23Ev,
  (VTBL_ENTRY)&_ZN5S1C103v24Ev,
  (VTBL_ENTRY)&_ZN5S1C103v25Ev,
  (VTBL_ENTRY)&_ZN5S1C103v26Ev,
  (VTBL_ENTRY)&_ZN5S1C103v27Ev,
  (VTBL_ENTRY)&_ZN5S1C103v28Ev,
  (VTBL_ENTRY)&_ZN5S1C103v29Ev,
  (VTBL_ENTRY)&_ZN5S1C103v30Ev,
  (VTBL_ENTRY)&_ZN5S1C103v31Ev,
  (VTBL_ENTRY)&_ZN5S1C103v32Ev,
  (VTBL_ENTRY)&_ZN5S1C103v33Ev,
  (VTBL_ENTRY)&_ZN5S1C103v34Ev,
  (VTBL_ENTRY)&_ZN5S1C103v35Ev,
  (VTBL_ENTRY)&_ZN5S1C103v36Ev,
  (VTBL_ENTRY)&_ZN5S1C103v37Ev,
  (VTBL_ENTRY)&_ZN5S1C103v38Ev,
  (VTBL_ENTRY)&_ZN5S1C103v39Ev,
  (VTBL_ENTRY)&_ZN5S1C103v40Ev,
  (VTBL_ENTRY)&_ZN5S1C103v41Ev,
  (VTBL_ENTRY)&_ZN5S1C103v42Ev,
  (VTBL_ENTRY)&_ZN5S1C103v43Ev,
  (VTBL_ENTRY)&_ZN5S1C103v44Ev,
  (VTBL_ENTRY)&_ZN5S1C103v45Ev,
  (VTBL_ENTRY)&_ZN5S1C103v46Ev,
  (VTBL_ENTRY)&_ZN5S1C103v47Ev,
  (VTBL_ENTRY)&_ZN5S1C103v48Ev,
  (VTBL_ENTRY)&_ZN5S1C103v49Ev,
  (VTBL_ENTRY)&_ZN5S1C103v50Ev,
  (VTBL_ENTRY)&_ZN5S1C103v51Ev,
  (VTBL_ENTRY)&_ZN5S1C103v52Ev,
  (VTBL_ENTRY)&_ZN5S1C103v53Ev,
  (VTBL_ENTRY)&_ZN5S1C103v54Ev,
  (VTBL_ENTRY)&_ZN5S1C103v55Ev,
  (VTBL_ENTRY)&_ZN5S1C103v56Ev,
  (VTBL_ENTRY)&_ZN5S1C103v57Ev,
  (VTBL_ENTRY)&_ZN5S1C103v58Ev,
  (VTBL_ENTRY)&_ZN5S1C103v59Ev,
  (VTBL_ENTRY)&_ZN5S1C103v60Ev,
  (VTBL_ENTRY)&_ZN5S1C103v61Ev,
  (VTBL_ENTRY)&_ZN5S1C103v62Ev,
  (VTBL_ENTRY)&_ZN5S1C103v63Ev,
  (VTBL_ENTRY)&_ZN5S1C103v64Ev,
  (VTBL_ENTRY)&_ZN5S1C103v65Ev,
  (VTBL_ENTRY)&_ZN5S1C103v66Ev,
  (VTBL_ENTRY)&_ZN5S1C103v67Ev,
  (VTBL_ENTRY)&_ZN5S1C103v68Ev,
  (VTBL_ENTRY)&_ZN5S1C103v69Ev,
  (VTBL_ENTRY)&_ZN5S1C103v70Ev,
  (VTBL_ENTRY)&_ZN5S1C103v71Ev,
  (VTBL_ENTRY)&_ZN5S1C103v72Ev,
  (VTBL_ENTRY)&_ZN5S1C103v73Ev,
  (VTBL_ENTRY)&_ZN5S1C103v74Ev,
  (VTBL_ENTRY)&_ZN5S1C103v75Ev,
  (VTBL_ENTRY)&_ZN5S1C103v76Ev,
  (VTBL_ENTRY)&_ZN5S1C103v77Ev,
  (VTBL_ENTRY)&_ZN5S1C103v78Ev,
  (VTBL_ENTRY)&_ZN5S1C103v79Ev,
  (VTBL_ENTRY)&_ZN5S1C103v80Ev,
  (VTBL_ENTRY)&_ZN5S1C103v81Ev,
  (VTBL_ENTRY)&_ZN5S1C103v82Ev,
  (VTBL_ENTRY)&_ZN5S1C103v83Ev,
  (VTBL_ENTRY)&_ZN5S1C103v84Ev,
  (VTBL_ENTRY)&_ZN5S1C103v85Ev,
  (VTBL_ENTRY)&_ZN5S1C103v86Ev,
  (VTBL_ENTRY)&_ZN5S1C103v87Ev,
  (VTBL_ENTRY)&_ZN5S1C103v88Ev,
  (VTBL_ENTRY)&_ZN5S1C103v89Ev,
  (VTBL_ENTRY)&_ZN5S1C103v90Ev,
  (VTBL_ENTRY)&_ZN5S1C103v91Ev,
  (VTBL_ENTRY)&_ZN5S1C103v92Ev,
  (VTBL_ENTRY)&_ZN5S1C103v93Ev,
  (VTBL_ENTRY)&_ZN5S1C103v94Ev,
  (VTBL_ENTRY)&_ZN5S1C103v95Ev,
  (VTBL_ENTRY)&_ZN5S1C103v96Ev,
  (VTBL_ENTRY)&_ZN5S1C103v97Ev,
  (VTBL_ENTRY)&_ZN5S1C103v98Ev,
  (VTBL_ENTRY)&_ZN5S1C103v99Ev,
  (VTBL_ENTRY)&_ZN5S1C104v100Ev,
  (VTBL_ENTRY)&_ZN5S1C104v101Ev,
  (VTBL_ENTRY)&_ZN5S1C104v102Ev,
  (VTBL_ENTRY)&_ZN5S1C104v103Ev,
  (VTBL_ENTRY)&_ZN5S1C104v104Ev,
  (VTBL_ENTRY)&_ZN5S1C104v105Ev,
  (VTBL_ENTRY)&_ZN5S1C104v106Ev,
  (VTBL_ENTRY)&_ZN5S1C104v107Ev,
  (VTBL_ENTRY)&_ZN5S1C104v108Ev,
  (VTBL_ENTRY)&_ZN5S1C104v109Ev,
  (VTBL_ENTRY)&_ZN5S1C104v110Ev,
  (VTBL_ENTRY)&_ZN5S1C104v111Ev,
  (VTBL_ENTRY)&_ZN4S1C84v112Ev,
  (VTBL_ENTRY)&_ZN4S1C84v113Ev,
  (VTBL_ENTRY)&_ZN4S1C84v114Ev,
  (VTBL_ENTRY)&_ZN4S1C84v115Ev,
  (VTBL_ENTRY)&_ZN4S1C84v116Ev,
  (VTBL_ENTRY)&_ZN4S1C84v117Ev,
  (VTBL_ENTRY)&_ZN4S1C84v118Ev,
  (VTBL_ENTRY)&_ZN4S1C84v119Ev,
  (VTBL_ENTRY)&_ZN4S1C84v120Ev,
  (VTBL_ENTRY)&_ZN4S1C84v121Ev,
  (VTBL_ENTRY)&_ZN4S1C84v122Ev,
  (VTBL_ENTRY)&_ZN4S1C84v123Ev,
  (VTBL_ENTRY)&_ZN4S1C84v124Ev,
  (VTBL_ENTRY)&_ZN4S1C84v125Ev,
  (VTBL_ENTRY)&_ZN4S1C84v126Ev,
  (VTBL_ENTRY)&_ZN4S1C84v127Ev,
  (VTBL_ENTRY)&_ZN4S1C84v128Ev,
  (VTBL_ENTRY)&_ZN4S1C84v129Ev,
  (VTBL_ENTRY)&_ZN4S1C84v130Ev,
  (VTBL_ENTRY)&_ZN4S1C84v131Ev,
  (VTBL_ENTRY)&_ZN4S1C84v132Ev,
  (VTBL_ENTRY)&_ZN4S1C84v133Ev,
  (VTBL_ENTRY)&_ZN4S1C84v134Ev,
  (VTBL_ENTRY)&_ZN4S1C84v135Ev,
  (VTBL_ENTRY)&_ZN4S1C84v136Ev,
  (VTBL_ENTRY)&_ZN4S1C84v137Ev,
  (VTBL_ENTRY)&_ZN4S1C74v138Ev,
  (VTBL_ENTRY)&_ZN4S1C74v139Ev,
  (VTBL_ENTRY)&_ZN4S1C74v140Ev,
  (VTBL_ENTRY)&_ZN4S1C74v141Ev,
  (VTBL_ENTRY)&_ZN4S1C74v142Ev,
  (VTBL_ENTRY)&_ZN4S1C74v143Ev,
  (VTBL_ENTRY)&_ZN4S1C74v144Ev,
  (VTBL_ENTRY)&_ZN4S1C74v145Ev,
  (VTBL_ENTRY)&_ZN4S1C74v146Ev,
  (VTBL_ENTRY)&_ZN4S1C74v147Ev,
  (VTBL_ENTRY)&_ZN4S1C74v148Ev,
  (VTBL_ENTRY)&_ZN4S1C74v149Ev,
  (VTBL_ENTRY)&_ZN4S1C74v150Ev,
  (VTBL_ENTRY)&_ZN4S1C74v151Ev,
  (VTBL_ENTRY)&_ZN4S1C74v152Ev,
  (VTBL_ENTRY)&_ZN4S1C74v153Ev,
  (VTBL_ENTRY)&_ZN4S1C74v154Ev,
  (VTBL_ENTRY)&_ZN4S1C74v155Ev,
  (VTBL_ENTRY)&_ZN4S1C64v156Ev,
  (VTBL_ENTRY)&_ZN4S1C64v157Ev,
  (VTBL_ENTRY)&_ZN4S1C64v158Ev,
  (VTBL_ENTRY)&_ZN4S1C64v159Ev,
  (VTBL_ENTRY)&_ZN4S1C64v160Ev,
  (VTBL_ENTRY)&_ZN4S1C64v161Ev,
  (VTBL_ENTRY)&_ZN4S1C64v162Ev,
  (VTBL_ENTRY)&_ZN4S1C64v163Ev,
  (VTBL_ENTRY)&_ZN4S1C64v164Ev,
  (VTBL_ENTRY)&_ZN4S1C64v165Ev,
  (VTBL_ENTRY)&_ZN4S1C64v166Ev,
  (VTBL_ENTRY)&_ZN4S1C64v167Ev,
  (VTBL_ENTRY)&_ZN4S1C64v168Ev,
  (VTBL_ENTRY)&_ZN4S1C64v169Ev,
  (VTBL_ENTRY)&_ZN4S1C64v170Ev,
  (VTBL_ENTRY)&_ZN4S1C64v171Ev,
  (VTBL_ENTRY)&_ZN4S1C64v172Ev,
  (VTBL_ENTRY)&_ZN4S1C64v173Ev,
  (VTBL_ENTRY)&_ZN4S1C64v174Ev,
  (VTBL_ENTRY)&_ZN4S1C64v175Ev,
  (VTBL_ENTRY)&_ZN4S1C64v176Ev,
  (VTBL_ENTRY)&_ZN4S1C64v177Ev,
  (VTBL_ENTRY)&_ZN4S1C64v178Ev,
  (VTBL_ENTRY)&_ZN4S1C64v179Ev,
  (VTBL_ENTRY)&_ZN4S1C64v180Ev,
  (VTBL_ENTRY)&_ZN4S1C64v181Ev,
};
extern VTBL_ENTRY _ZTI4S1C5[];
extern  VTBL_ENTRY _ZTV4S1C5[];
Class_Descriptor cd_S1C5 = {  "S1C5", // class name
  bases_S1C5, 6,
  &(vtc_S1C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI4S1C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV4S1C5),181, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1C4  : S1C5 {
  virtual void  v182(); // _ZN4S1C44v182Ev
  virtual void  v183(); // _ZN4S1C44v183Ev
  virtual void  v184(); // _ZN4S1C44v184Ev
  virtual void  v185(); // _ZN4S1C44v185Ev
  virtual void  v186(); // _ZN4S1C44v186Ev
  virtual void  v187(); // _ZN4S1C44v187Ev
  ~S1C4(); // tgen
  S1C4(); // tgen
};
//SIG(-1 S1C4) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ vd m Fp Fi} 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 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 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}} v1 v2 v3 v4 v5 v6}


void  S1C4 ::v182(){vfunc_called(this, "_ZN4S1C44v182Ev");}
void  S1C4 ::v183(){vfunc_called(this, "_ZN4S1C44v183Ev");}
void  S1C4 ::v184(){vfunc_called(this, "_ZN4S1C44v184Ev");}
void  S1C4 ::v185(){vfunc_called(this, "_ZN4S1C44v185Ev");}
void  S1C4 ::v186(){vfunc_called(this, "_ZN4S1C44v186Ev");}
void  S1C4 ::v187(){vfunc_called(this, "_ZN4S1C44v187Ev");}
S1C4 ::~S1C4(){ note_dtor("S1C4", this);} // tgen
S1C4 ::S1C4(){ note_ctor("S1C4", this);} // tgen

static void Test_S1C4()
{
  extern Class_Descriptor cd_S1C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1C4, buf);
    S1C4 *dp, &lv = *(dp=new (buf) S1C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1C4)");
    check_base_class_offset(lv, (S1C11_nt*)(S1C10*)(S1C9*)(S1C8*)(S1C7*)(S1C6*)(S1C5*), 0, "S1C4");
    check_base_class_offset(lv, (S1C10*)(S1C9*)(S1C8*)(S1C7*)(S1C6*)(S1C5*), 0, "S1C4");
    check_base_class_offset(lv, (S1C9*)(S1C8*)(S1C7*)(S1C6*)(S1C5*), 0, "S1C4");
    check_base_class_offset(lv, (S1C8*)(S1C7*)(S1C6*)(S1C5*), 0, "S1C4");
    check_base_class_offset(lv, (S1C7*)(S1C6*)(S1C5*), 0, "S1C4");
    check_base_class_offset(lv, (S1C6*)(S1C5*), 0, "S1C4");
    check_base_class_offset(lv, (S1C5*), 0, "S1C4");
    test_class_info(&lv, &cd_S1C4);
    dp->~S1C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1C4(Test_S1C4, "S1C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN4S1C4C1Ev();
extern void _ZN4S1C4D1Ev();
Name_Map name_map_S1C4[] = {
  NSPAIR(_ZN4S1C4C1Ev),
  NSPAIR(_ZN4S1C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1C10;
extern VTBL_ENTRY _ZTI5S1C10[];
extern  VTBL_ENTRY _ZTV5S1C10[];
extern Class_Descriptor cd_S1C9;
extern VTBL_ENTRY _ZTI4S1C9[];
extern  VTBL_ENTRY _ZTV4S1C9[];
extern Class_Descriptor cd_S1C8;
extern VTBL_ENTRY _ZTI4S1C8[];
extern  VTBL_ENTRY _ZTV4S1C8[];
extern Class_Descriptor cd_S1C7;
extern VTBL_ENTRY _ZTI4S1C7[];
extern  VTBL_ENTRY _ZTV4S1C7[];
extern Class_Descriptor cd_S1C6;
extern VTBL_ENTRY _ZTI4S1C6[];
extern  VTBL_ENTRY _ZTV4S1C6[];
extern Class_Descriptor cd_S1C5;
extern VTBL_ENTRY _ZTI4S1C5[];
extern  VTBL_ENTRY _ZTV4S1C5[];
static Base_Class bases_S1C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI4S1C4[];
extern void _ZN4S1C4D1Ev();
extern void _ZN4S1C4D0Ev();
extern void _ZN5S1C102v5Ev();
extern void _ZN5S1C102v6Ev();
extern void _ZN5S1C102v7Ev();
extern void _ZN5S1C102v8Ev();
extern void _ZN5S1C102v9Ev();
extern void _ZN5S1C103v10Ev();
extern void _ZN5S1C103v11Ev();
extern void _ZN5S1C103v12Ev();
extern void _ZN5S1C103v13Ev();
extern void _ZN5S1C103v14Ev();
extern void _ZN5S1C103v15Ev();
extern void _ZN5S1C103v16Ev();
extern void _ZN5S1C103v17Ev();
extern void _ZN5S1C103v18Ev();
extern void _ZN5S1C103v19Ev();
extern void _ZN5S1C103v20Ev();
extern void _ZN5S1C103v21Ev();
extern void _ZN5S1C103v22Ev();
extern void _ZN5S1C103v23Ev();
extern void _ZN5S1C103v24Ev();
extern void _ZN5S1C103v25Ev();
extern void _ZN5S1C103v26Ev();
extern void _ZN5S1C103v27Ev();
extern void _ZN5S1C103v28Ev();
extern void _ZN5S1C103v29Ev();
extern void _ZN5S1C103v30Ev();
extern void _ZN5S1C103v31Ev();
extern void _ZN5S1C103v32Ev();
extern void _ZN5S1C103v33Ev();
extern void _ZN5S1C103v34Ev();
extern void _ZN5S1C103v35Ev();
extern void _ZN5S1C103v36Ev();
extern void _ZN5S1C103v37Ev();
extern void _ZN5S1C103v38Ev();
extern void _ZN5S1C103v39Ev();
extern void _ZN5S1C103v40Ev();
extern void _ZN5S1C103v41Ev();
extern void _ZN5S1C103v42Ev();
extern void _ZN5S1C103v43Ev();
extern void _ZN5S1C103v44Ev();
extern void _ZN5S1C103v45Ev();
extern void _ZN5S1C103v46Ev();
extern void _ZN5S1C103v47Ev();
extern void _ZN5S1C103v48Ev();
extern void _ZN5S1C103v49Ev();
extern void _ZN5S1C103v50Ev();
extern void _ZN5S1C103v51Ev();
extern void _ZN5S1C103v52Ev();
extern void _ZN5S1C103v53Ev();
extern void _ZN5S1C103v54Ev();
extern void _ZN5S1C103v55Ev();
extern void _ZN5S1C103v56Ev();
extern void _ZN5S1C103v57Ev();
extern void _ZN5S1C103v58Ev();
extern void _ZN5S1C103v59Ev();
extern void _ZN5S1C103v60Ev();
extern void _ZN5S1C103v61Ev();
extern void _ZN5S1C103v62Ev();
extern void _ZN5S1C103v63Ev();
extern void _ZN5S1C103v64Ev();
extern void _ZN5S1C103v65Ev();
extern void _ZN5S1C103v66Ev();
extern void _ZN5S1C103v67Ev();
extern void _ZN5S1C103v68Ev();
extern void _ZN5S1C103v69Ev();
extern void _ZN5S1C103v70Ev();
extern void _ZN5S1C103v71Ev();
extern void _ZN5S1C103v72Ev();
extern void _ZN5S1C103v73Ev();
extern void _ZN5S1C103v74Ev();
extern void _ZN5S1C103v75Ev();
extern void _ZN5S1C103v76Ev();
extern void _ZN5S1C103v77Ev();
extern void _ZN5S1C103v78Ev();
extern void _ZN5S1C103v79Ev();
extern void _ZN5S1C103v80Ev();
extern void _ZN5S1C103v81Ev();
extern void _ZN5S1C103v82Ev();
extern void _ZN5S1C103v83Ev();
extern void _ZN5S1C103v84Ev();
extern void _ZN5S1C103v85Ev();
extern void _ZN5S1C103v86Ev();
extern void _ZN5S1C103v87Ev();
extern void _ZN5S1C103v88Ev();
extern void _ZN5S1C103v89Ev();
extern void _ZN5S1C103v90Ev();
extern void _ZN5S1C103v91Ev();
extern void _ZN5S1C103v92Ev();
extern void _ZN5S1C103v93Ev();
extern void _ZN5S1C103v94Ev();
extern void _ZN5S1C103v95Ev();
extern void _ZN5S1C103v96Ev();
extern void _ZN5S1C103v97Ev();
extern void _ZN5S1C103v98Ev();
extern void _ZN5S1C103v99Ev();
extern void _ZN5S1C104v100Ev();
extern void _ZN5S1C104v101Ev();
extern void _ZN5S1C104v102Ev();
extern void _ZN5S1C104v103Ev();
extern void _ZN5S1C104v104Ev();
extern void _ZN5S1C104v105Ev();
extern void _ZN5S1C104v106Ev();
extern void _ZN5S1C104v107Ev();
extern void _ZN5S1C104v108Ev();
extern void _ZN5S1C104v109Ev();
extern void _ZN5S1C104v110Ev();
extern void _ZN5S1C104v111Ev();
extern void _ZN4S1C84v112Ev();
extern void _ZN4S1C84v113Ev();
extern void _ZN4S1C84v114Ev();
extern void _ZN4S1C84v115Ev();
extern void _ZN4S1C84v116Ev();
extern void _ZN4S1C84v117Ev();
extern void _ZN4S1C84v118Ev();
extern void _ZN4S1C84v119Ev();
extern void _ZN4S1C84v120Ev();
extern void _ZN4S1C84v121Ev();
extern void _ZN4S1C84v122Ev();
extern void _ZN4S1C84v123Ev();
extern void _ZN4S1C84v124Ev();
extern void _ZN4S1C84v125Ev();
extern void _ZN4S1C84v126Ev();
extern void _ZN4S1C84v127Ev();
extern void _ZN4S1C84v128Ev();
extern void _ZN4S1C84v129Ev();
extern void _ZN4S1C84v130Ev();
extern void _ZN4S1C84v131Ev();
extern void _ZN4S1C84v132Ev();
extern void _ZN4S1C84v133Ev();
extern void _ZN4S1C84v134Ev();
extern void _ZN4S1C84v135Ev();
extern void _ZN4S1C84v136Ev();
extern void _ZN4S1C84v137Ev();
extern void _ZN4S1C74v138Ev();
extern void _ZN4S1C74v139Ev();
extern void _ZN4S1C74v140Ev();
extern void _ZN4S1C74v141Ev();
extern void _ZN4S1C74v142Ev();
extern void _ZN4S1C74v143Ev();
extern void _ZN4S1C74v144Ev();
extern void _ZN4S1C74v145Ev();
extern void _ZN4S1C74v146Ev();
extern void _ZN4S1C74v147Ev();
extern void _ZN4S1C74v148Ev();
extern void _ZN4S1C74v149Ev();
extern void _ZN4S1C74v150Ev();
extern void _ZN4S1C74v151Ev();
extern void _ZN4S1C74v152Ev();
extern void _ZN4S1C74v153Ev();
extern void _ZN4S1C74v154Ev();
extern void _ZN4S1C74v155Ev();
extern void _ZN4S1C64v156Ev();
extern void _ZN4S1C64v157Ev();
extern void _ZN4S1C64v158Ev();
extern void _ZN4S1C64v159Ev();
extern void _ZN4S1C64v160Ev();
extern void _ZN4S1C64v161Ev();
extern void _ZN4S1C64v162Ev();
extern void _ZN4S1C64v163Ev();
extern void _ZN4S1C64v164Ev();
extern void _ZN4S1C64v165Ev();
extern void _ZN4S1C64v166Ev();
extern void _ZN4S1C64v167Ev();
extern void _ZN4S1C64v168Ev();
extern void _ZN4S1C64v169Ev();
extern void _ZN4S1C64v170Ev();
extern void _ZN4S1C64v171Ev();
extern void _ZN4S1C64v172Ev();
extern void _ZN4S1C64v173Ev();
extern void _ZN4S1C64v174Ev();
extern void _ZN4S1C64v175Ev();
extern void _ZN4S1C64v176Ev();
extern void _ZN4S1C64v177Ev();
extern void _ZN4S1C64v178Ev();
extern void _ZN4S1C64v179Ev();
extern void _ZN4S1C64v180Ev();
extern void _ZN4S1C64v181Ev();
extern void _ZN4S1C44v182Ev();
extern void _ZN4S1C44v183Ev();
extern void _ZN4S1C44v184Ev();
extern void _ZN4S1C44v185Ev();
extern void _ZN4S1C44v186Ev();
extern void _ZN4S1C44v187Ev();
static  VTBL_ENTRY vtc_S1C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI4S1C4[0]),
  (VTBL_ENTRY)&_ZN4S1C4D1Ev,
  (VTBL_ENTRY)&_ZN4S1C4D0Ev,
  (VTBL_ENTRY)&_ZN5S1C102v5Ev,
  (VTBL_ENTRY)&_ZN5S1C102v6Ev,
  (VTBL_ENTRY)&_ZN5S1C102v7Ev,
  (VTBL_ENTRY)&_ZN5S1C102v8Ev,
  (VTBL_ENTRY)&_ZN5S1C102v9Ev,
  (VTBL_ENTRY)&_ZN5S1C103v10Ev,
  (VTBL_ENTRY)&_ZN5S1C103v11Ev,
  (VTBL_ENTRY)&_ZN5S1C103v12Ev,
  (VTBL_ENTRY)&_ZN5S1C103v13Ev,
  (VTBL_ENTRY)&_ZN5S1C103v14Ev,
  (VTBL_ENTRY)&_ZN5S1C103v15Ev,
  (VTBL_ENTRY)&_ZN5S1C103v16Ev,
  (VTBL_ENTRY)&_ZN5S1C103v17Ev,
  (VTBL_ENTRY)&_ZN5S1C103v18Ev,
  (VTBL_ENTRY)&_ZN5S1C103v19Ev,
  (VTBL_ENTRY)&_ZN5S1C103v20Ev,
  (VTBL_ENTRY)&_ZN5S1C103v21Ev,
  (VTBL_ENTRY)&_ZN5S1C103v22Ev,
  (VTBL_ENTRY)&_ZN5S1C103v23Ev,
  (VTBL_ENTRY)&_ZN5S1C103v24Ev,
  (VTBL_ENTRY)&_ZN5S1C103v25Ev,
  (VTBL_ENTRY)&_ZN5S1C103v26Ev,
  (VTBL_ENTRY)&_ZN5S1C103v27Ev,
  (VTBL_ENTRY)&_ZN5S1C103v28Ev,
  (VTBL_ENTRY)&_ZN5S1C103v29Ev,
  (VTBL_ENTRY)&_ZN5S1C103v30Ev,
  (VTBL_ENTRY)&_ZN5S1C103v31Ev,
  (VTBL_ENTRY)&_ZN5S1C103v32Ev,
  (VTBL_ENTRY)&_ZN5S1C103v33Ev,
  (VTBL_ENTRY)&_ZN5S1C103v34Ev,
  (VTBL_ENTRY)&_ZN5S1C103v35Ev,
  (VTBL_ENTRY)&_ZN5S1C103v36Ev,
  (VTBL_ENTRY)&_ZN5S1C103v37Ev,
  (VTBL_ENTRY)&_ZN5S1C103v38Ev,
  (VTBL_ENTRY)&_ZN5S1C103v39Ev,
  (VTBL_ENTRY)&_ZN5S1C103v40Ev,
  (VTBL_ENTRY)&_ZN5S1C103v41Ev,
  (VTBL_ENTRY)&_ZN5S1C103v42Ev,
  (VTBL_ENTRY)&_ZN5S1C103v43Ev,
  (VTBL_ENTRY)&_ZN5S1C103v44Ev,
  (VTBL_ENTRY)&_ZN5S1C103v45Ev,
  (VTBL_ENTRY)&_ZN5S1C103v46Ev,
  (VTBL_ENTRY)&_ZN5S1C103v47Ev,
  (VTBL_ENTRY)&_ZN5S1C103v48Ev,
  (VTBL_ENTRY)&_ZN5S1C103v49Ev,
  (VTBL_ENTRY)&_ZN5S1C103v50Ev,
  (VTBL_ENTRY)&_ZN5S1C103v51Ev,
  (VTBL_ENTRY)&_ZN5S1C103v52Ev,
  (VTBL_ENTRY)&_ZN5S1C103v53Ev,
  (VTBL_ENTRY)&_ZN5S1C103v54Ev,
  (VTBL_ENTRY)&_ZN5S1C103v55Ev,
  (VTBL_ENTRY)&_ZN5S1C103v56Ev,
  (VTBL_ENTRY)&_ZN5S1C103v57Ev,
  (VTBL_ENTRY)&_ZN5S1C103v58Ev,
  (VTBL_ENTRY)&_ZN5S1C103v59Ev,
  (VTBL_ENTRY)&_ZN5S1C103v60Ev,
  (VTBL_ENTRY)&_ZN5S1C103v61Ev,
  (VTBL_ENTRY)&_ZN5S1C103v62Ev,
  (VTBL_ENTRY)&_ZN5S1C103v63Ev,
  (VTBL_ENTRY)&_ZN5S1C103v64Ev,
  (VTBL_ENTRY)&_ZN5S1C103v65Ev,
  (VTBL_ENTRY)&_ZN5S1C103v66Ev,
  (VTBL_ENTRY)&_ZN5S1C103v67Ev,
  (VTBL_ENTRY)&_ZN5S1C103v68Ev,
  (VTBL_ENTRY)&_ZN5S1C103v69Ev,
  (VTBL_ENTRY)&_ZN5S1C103v70Ev,
  (VTBL_ENTRY)&_ZN5S1C103v71Ev,
  (VTBL_ENTRY)&_ZN5S1C103v72Ev,
  (VTBL_ENTRY)&_ZN5S1C103v73Ev,
  (VTBL_ENTRY)&_ZN5S1C103v74Ev,
  (VTBL_ENTRY)&_ZN5S1C103v75Ev,
  (VTBL_ENTRY)&_ZN5S1C103v76Ev,
  (VTBL_ENTRY)&_ZN5S1C103v77Ev,
  (VTBL_ENTRY)&_ZN5S1C103v78Ev,
  (VTBL_ENTRY)&_ZN5S1C103v79Ev,
  (VTBL_ENTRY)&_ZN5S1C103v80Ev,
  (VTBL_ENTRY)&_ZN5S1C103v81Ev,
  (VTBL_ENTRY)&_ZN5S1C103v82Ev,
  (VTBL_ENTRY)&_ZN5S1C103v83Ev,
  (VTBL_ENTRY)&_ZN5S1C103v84Ev,
  (VTBL_ENTRY)&_ZN5S1C103v85Ev,
  (VTBL_ENTRY)&_ZN5S1C103v86Ev,
  (VTBL_ENTRY)&_ZN5S1C103v87Ev,
  (VTBL_ENTRY)&_ZN5S1C103v88Ev,
  (VTBL_ENTRY)&_ZN5S1C103v89Ev,
  (VTBL_ENTRY)&_ZN5S1C103v90Ev,
  (VTBL_ENTRY)&_ZN5S1C103v91Ev,
  (VTBL_ENTRY)&_ZN5S1C103v92Ev,
  (VTBL_ENTRY)&_ZN5S1C103v93Ev,
  (VTBL_ENTRY)&_ZN5S1C103v94Ev,
  (VTBL_ENTRY)&_ZN5S1C103v95Ev,
  (VTBL_ENTRY)&_ZN5S1C103v96Ev,
  (VTBL_ENTRY)&_ZN5S1C103v97Ev,
  (VTBL_ENTRY)&_ZN5S1C103v98Ev,
  (VTBL_ENTRY)&_ZN5S1C103v99Ev,
  (VTBL_ENTRY)&_ZN5S1C104v100Ev,
  (VTBL_ENTRY)&_ZN5S1C104v101Ev,
  (VTBL_ENTRY)&_ZN5S1C104v102Ev,
  (VTBL_ENTRY)&_ZN5S1C104v103Ev,
  (VTBL_ENTRY)&_ZN5S1C104v104Ev,
  (VTBL_ENTRY)&_ZN5S1C104v105Ev,
  (VTBL_ENTRY)&_ZN5S1C104v106Ev,
  (VTBL_ENTRY)&_ZN5S1C104v107Ev,
  (VTBL_ENTRY)&_ZN5S1C104v108Ev,
  (VTBL_ENTRY)&_ZN5S1C104v109Ev,
  (VTBL_ENTRY)&_ZN5S1C104v110Ev,
  (VTBL_ENTRY)&_ZN5S1C104v111Ev,
  (VTBL_ENTRY)&_ZN4S1C84v112Ev,
  (VTBL_ENTRY)&_ZN4S1C84v113Ev,
  (VTBL_ENTRY)&_ZN4S1C84v114Ev,
  (VTBL_ENTRY)&_ZN4S1C84v115Ev,
  (VTBL_ENTRY)&_ZN4S1C84v116Ev,
  (VTBL_ENTRY)&_ZN4S1C84v117Ev,
  (VTBL_ENTRY)&_ZN4S1C84v118Ev,
  (VTBL_ENTRY)&_ZN4S1C84v119Ev,
  (VTBL_ENTRY)&_ZN4S1C84v120Ev,
  (VTBL_ENTRY)&_ZN4S1C84v121Ev,
  (VTBL_ENTRY)&_ZN4S1C84v122Ev,
  (VTBL_ENTRY)&_ZN4S1C84v123Ev,
  (VTBL_ENTRY)&_ZN4S1C84v124Ev,
  (VTBL_ENTRY)&_ZN4S1C84v125Ev,
  (VTBL_ENTRY)&_ZN4S1C84v126Ev,
  (VTBL_ENTRY)&_ZN4S1C84v127Ev,
  (VTBL_ENTRY)&_ZN4S1C84v128Ev,
  (VTBL_ENTRY)&_ZN4S1C84v129Ev,
  (VTBL_ENTRY)&_ZN4S1C84v130Ev,
  (VTBL_ENTRY)&_ZN4S1C84v131Ev,
  (VTBL_ENTRY)&_ZN4S1C84v132Ev,
  (VTBL_ENTRY)&_ZN4S1C84v133Ev,
  (VTBL_ENTRY)&_ZN4S1C84v134Ev,
  (VTBL_ENTRY)&_ZN4S1C84v135Ev,
  (VTBL_ENTRY)&_ZN4S1C84v136Ev,
  (VTBL_ENTRY)&_ZN4S1C84v137Ev,
  (VTBL_ENTRY)&_ZN4S1C74v138Ev,
  (VTBL_ENTRY)&_ZN4S1C74v139Ev,
  (VTBL_ENTRY)&_ZN4S1C74v140Ev,
  (VTBL_ENTRY)&_ZN4S1C74v141Ev,
  (VTBL_ENTRY)&_ZN4S1C74v142Ev,
  (VTBL_ENTRY)&_ZN4S1C74v143Ev,
  (VTBL_ENTRY)&_ZN4S1C74v144Ev,
  (VTBL_ENTRY)&_ZN4S1C74v145Ev,
  (VTBL_ENTRY)&_ZN4S1C74v146Ev,
  (VTBL_ENTRY)&_ZN4S1C74v147Ev,
  (VTBL_ENTRY)&_ZN4S1C74v148Ev,
  (VTBL_ENTRY)&_ZN4S1C74v149Ev,
  (VTBL_ENTRY)&_ZN4S1C74v150Ev,
  (VTBL_ENTRY)&_ZN4S1C74v151Ev,
  (VTBL_ENTRY)&_ZN4S1C74v152Ev,
  (VTBL_ENTRY)&_ZN4S1C74v153Ev,
  (VTBL_ENTRY)&_ZN4S1C74v154Ev,
  (VTBL_ENTRY)&_ZN4S1C74v155Ev,
  (VTBL_ENTRY)&_ZN4S1C64v156Ev,
  (VTBL_ENTRY)&_ZN4S1C64v157Ev,
  (VTBL_ENTRY)&_ZN4S1C64v158Ev,
  (VTBL_ENTRY)&_ZN4S1C64v159Ev,
  (VTBL_ENTRY)&_ZN4S1C64v160Ev,
  (VTBL_ENTRY)&_ZN4S1C64v161Ev,
  (VTBL_ENTRY)&_ZN4S1C64v162Ev,
  (VTBL_ENTRY)&_ZN4S1C64v163Ev,
  (VTBL_ENTRY)&_ZN4S1C64v164Ev,
  (VTBL_ENTRY)&_ZN4S1C64v165Ev,
  (VTBL_ENTRY)&_ZN4S1C64v166Ev,
  (VTBL_ENTRY)&_ZN4S1C64v167Ev,
  (VTBL_ENTRY)&_ZN4S1C64v168Ev,
  (VTBL_ENTRY)&_ZN4S1C64v169Ev,
  (VTBL_ENTRY)&_ZN4S1C64v170Ev,
  (VTBL_ENTRY)&_ZN4S1C64v171Ev,
  (VTBL_ENTRY)&_ZN4S1C64v172Ev,
  (VTBL_ENTRY)&_ZN4S1C64v173Ev,
  (VTBL_ENTRY)&_ZN4S1C64v174Ev,
  (VTBL_ENTRY)&_ZN4S1C64v175Ev,
  (VTBL_ENTRY)&_ZN4S1C64v176Ev,
  (VTBL_ENTRY)&_ZN4S1C64v177Ev,
  (VTBL_ENTRY)&_ZN4S1C64v178Ev,
  (VTBL_ENTRY)&_ZN4S1C64v179Ev,
  (VTBL_ENTRY)&_ZN4S1C64v180Ev,
  (VTBL_ENTRY)&_ZN4S1C64v181Ev,
  (VTBL_ENTRY)&_ZN4S1C44v182Ev,
  (VTBL_ENTRY)&_ZN4S1C44v183Ev,
  (VTBL_ENTRY)&_ZN4S1C44v184Ev,
  (VTBL_ENTRY)&_ZN4S1C44v185Ev,
  (VTBL_ENTRY)&_ZN4S1C44v186Ev,
  (VTBL_ENTRY)&_ZN4S1C44v187Ev,
};
extern VTBL_ENTRY _ZTI4S1C4[];
extern  VTBL_ENTRY _ZTV4S1C4[];
Class_Descriptor cd_S1C4 = {  "S1C4", // class name
  bases_S1C4, 7,
  &(vtc_S1C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI4S1C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV4S1C4),187, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1C3  : S1C4 {
  virtual void  v188(); // _ZN4S1C34v188Ev
  virtual void  v189(); // _ZN4S1C34v189Ev
  virtual void  v190(); // _ZN4S1C34v190Ev
  virtual void  v191(); // _ZN4S1C34v191Ev
  virtual void  v192(); // _ZN4S1C34v192Ev
  virtual void  v193(); // _ZN4S1C34v193Ev
  virtual void  v194(); // _ZN4S1C34v194Ev
  virtual void  v195(); // _ZN4S1C34v195Ev
  virtual void  v196(); // _ZN4S1C34v196Ev
  virtual void  v197(); // _ZN4S1C34v197Ev
  virtual void  v198(); // _ZN4S1C34v198Ev
  virtual void  v199(); // _ZN4S1C34v199Ev
  virtual void  v200(); // _ZN4S1C34v200Ev
  virtual void  v201(); // _ZN4S1C34v201Ev
  virtual void  v202(); // _ZN4S1C34v202Ev
  virtual void  v203(); // _ZN4S1C34v203Ev
  virtual void  v204(); // _ZN4S1C34v204Ev
  virtual void  v205(); // _ZN4S1C34v205Ev
  virtual void  v206(); // _ZN4S1C34v206Ev
  virtual void  v207(); // _ZN4S1C34v207Ev
  virtual void  v208(); // _ZN4S1C34v208Ev
  ~S1C3(); // tgen
  S1C3(); // tgen
};
//SIG(-1 S1C3) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ BC9{ vd m Fp Fi} 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 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 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21}


void  S1C3 ::v188(){vfunc_called(this, "_ZN4S1C34v188Ev");}
void  S1C3 ::v189(){vfunc_called(this, "_ZN4S1C34v189Ev");}
void  S1C3 ::v190(){vfunc_called(this, "_ZN4S1C34v190Ev");}
void  S1C3 ::v191(){vfunc_called(this, "_ZN4S1C34v191Ev");}
void  S1C3 ::v192(){vfunc_called(this, "_ZN4S1C34v192Ev");}
void  S1C3 ::v193(){vfunc_called(this, "_ZN4S1C34v193Ev");}
void  S1C3 ::v194(){vfunc_called(this, "_ZN4S1C34v194Ev");}
void  S1C3 ::v195(){vfunc_called(this, "_ZN4S1C34v195Ev");}
void  S1C3 ::v196(){vfunc_called(this, "_ZN4S1C34v196Ev");}
void  S1C3 ::v197(){vfunc_called(this, "_ZN4S1C34v197Ev");}
void  S1C3 ::v198(){vfunc_called(this, "_ZN4S1C34v198Ev");}
void  S1C3 ::v199(){vfunc_called(this, "_ZN4S1C34v199Ev");}
void  S1C3 ::v200(){vfunc_called(this, "_ZN4S1C34v200Ev");}
void  S1C3 ::v201(){vfunc_called(this, "_ZN4S1C34v201Ev");}
void  S1C3 ::v202(){vfunc_called(this, "_ZN4S1C34v202Ev");}
void  S1C3 ::v203(){vfunc_called(this, "_ZN4S1C34v203Ev");}
void  S1C3 ::v204(){vfunc_called(this, "_ZN4S1C34v204Ev");}
void  S1C3 ::v205(){vfunc_called(this, "_ZN4S1C34v205Ev");}
void  S1C3 ::v206(){vfunc_called(this, "_ZN4S1C34v206Ev");}
void  S1C3 ::v207(){vfunc_called(this, "_ZN4S1C34v207Ev");}
void  S1C3 ::v208(){vfunc_called(this, "_ZN4S1C34v208Ev");}
S1C3 ::~S1C3(){ note_dtor("S1C3", this);} // tgen
S1C3 ::S1C3(){ note_ctor("S1C3", this);} // tgen

static void Test_S1C3()
{
  extern Class_Descriptor cd_S1C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1C3, buf);
    S1C3 *dp, &lv = *(dp=new (buf) S1C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1C3)");
    check_base_class_offset(lv, (S1C11_nt*)(S1C10*)(S1C9*)(S1C8*)(S1C7*)(S1C6*)(S1C5*)(S1C4*), 0, "S1C3");
    check_base_class_offset(lv, (S1C10*)(S1C9*)(S1C8*)(S1C7*)(S1C6*)(S1C5*)(S1C4*), 0, "S1C3");
    check_base_class_offset(lv, (S1C9*)(S1C8*)(S1C7*)(S1C6*)(S1C5*)(S1C4*), 0, "S1C3");
    check_base_class_offset(lv, (S1C8*)(S1C7*)(S1C6*)(S1C5*)(S1C4*), 0, "S1C3");
    check_base_class_offset(lv, (S1C7*)(S1C6*)(S1C5*)(S1C4*), 0, "S1C3");
    check_base_class_offset(lv, (S1C6*)(S1C5*)(S1C4*), 0, "S1C3");
    check_base_class_offset(lv, (S1C5*)(S1C4*), 0, "S1C3");
    check_base_class_offset(lv, (S1C4*), 0, "S1C3");
    test_class_info(&lv, &cd_S1C3);
    dp->~S1C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1C3(Test_S1C3, "S1C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN4S1C3C1Ev();
extern void _ZN4S1C3D1Ev();
Name_Map name_map_S1C3[] = {
  NSPAIR(_ZN4S1C3C1Ev),
  NSPAIR(_ZN4S1C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1C10;
extern VTBL_ENTRY _ZTI5S1C10[];
extern  VTBL_ENTRY _ZTV5S1C10[];
extern Class_Descriptor cd_S1C9;
extern VTBL_ENTRY _ZTI4S1C9[];
extern  VTBL_ENTRY _ZTV4S1C9[];
extern Class_Descriptor cd_S1C8;
extern VTBL_ENTRY _ZTI4S1C8[];
extern  VTBL_ENTRY _ZTV4S1C8[];
extern Class_Descriptor cd_S1C7;
extern VTBL_ENTRY _ZTI4S1C7[];
extern  VTBL_ENTRY _ZTV4S1C7[];
extern Class_Descriptor cd_S1C6;
extern VTBL_ENTRY _ZTI4S1C6[];
extern  VTBL_ENTRY _ZTV4S1C6[];
extern Class_Descriptor cd_S1C5;
extern VTBL_ENTRY _ZTI4S1C5[];
extern  VTBL_ENTRY _ZTV4S1C5[];
extern Class_Descriptor cd_S1C4;
extern VTBL_ENTRY _ZTI4S1C4[];
extern  VTBL_ENTRY _ZTV4S1C4[];
static Base_Class bases_S1C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI4S1C3[];
extern void _ZN4S1C3D1Ev();
extern void _ZN4S1C3D0Ev();
extern void _ZN5S1C102v5Ev();
extern void _ZN5S1C102v6Ev();
extern void _ZN5S1C102v7Ev();
extern void _ZN5S1C102v8Ev();
extern void _ZN5S1C102v9Ev();
extern void _ZN5S1C103v10Ev();
extern void _ZN5S1C103v11Ev();
extern void _ZN5S1C103v12Ev();
extern void _ZN5S1C103v13Ev();
extern void _ZN5S1C103v14Ev();
extern void _ZN5S1C103v15Ev();
extern void _ZN5S1C103v16Ev();
extern void _ZN5S1C103v17Ev();
extern void _ZN5S1C103v18Ev();
extern void _ZN5S1C103v19Ev();
extern void _ZN5S1C103v20Ev();
extern void _ZN5S1C103v21Ev();
extern void _ZN5S1C103v22Ev();
extern void _ZN5S1C103v23Ev();
extern void _ZN5S1C103v24Ev();
extern void _ZN5S1C103v25Ev();
extern void _ZN5S1C103v26Ev();
extern void _ZN5S1C103v27Ev();
extern void _ZN5S1C103v28Ev();
extern void _ZN5S1C103v29Ev();
extern void _ZN5S1C103v30Ev();
extern void _ZN5S1C103v31Ev();
extern void _ZN5S1C103v32Ev();
extern void _ZN5S1C103v33Ev();
extern void _ZN5S1C103v34Ev();
extern void _ZN5S1C103v35Ev();
extern void _ZN5S1C103v36Ev();
extern void _ZN5S1C103v37Ev();
extern void _ZN5S1C103v38Ev();
extern void _ZN5S1C103v39Ev();
extern void _ZN5S1C103v40Ev();
extern void _ZN5S1C103v41Ev();
extern void _ZN5S1C103v42Ev();
extern void _ZN5S1C103v43Ev();
extern void _ZN5S1C103v44Ev();
extern void _ZN5S1C103v45Ev();
extern void _ZN5S1C103v46Ev();
extern void _ZN5S1C103v47Ev();
extern void _ZN5S1C103v48Ev();
extern void _ZN5S1C103v49Ev();
extern void _ZN5S1C103v50Ev();
extern void _ZN5S1C103v51Ev();
extern void _ZN5S1C103v52Ev();
extern void _ZN5S1C103v53Ev();
extern void _ZN5S1C103v54Ev();
extern void _ZN5S1C103v55Ev();
extern void _ZN5S1C103v56Ev();
extern void _ZN5S1C103v57Ev();
extern void _ZN5S1C103v58Ev();
extern void _ZN5S1C103v59Ev();
extern void _ZN5S1C103v60Ev();
extern void _ZN5S1C103v61Ev();
extern void _ZN5S1C103v62Ev();
extern void _ZN5S1C103v63Ev();
extern void _ZN5S1C103v64Ev();
extern void _ZN5S1C103v65Ev();
extern void _ZN5S1C103v66Ev();
extern void _ZN5S1C103v67Ev();
extern void _ZN5S1C103v68Ev();
extern void _ZN5S1C103v69Ev();
extern void _ZN5S1C103v70Ev();
extern void _ZN5S1C103v71Ev();
extern void _ZN5S1C103v72Ev();
extern void _ZN5S1C103v73Ev();
extern void _ZN5S1C103v74Ev();
extern void _ZN5S1C103v75Ev();
extern void _ZN5S1C103v76Ev();
extern void _ZN5S1C103v77Ev();
extern void _ZN5S1C103v78Ev();
extern void _ZN5S1C103v79Ev();
extern void _ZN5S1C103v80Ev();
extern void _ZN5S1C103v81Ev();
extern void _ZN5S1C103v82Ev();
extern void _ZN5S1C103v83Ev();
extern void _ZN5S1C103v84Ev();
extern void _ZN5S1C103v85Ev();
extern void _ZN5S1C103v86Ev();
extern void _ZN5S1C103v87Ev();
extern void _ZN5S1C103v88Ev();
extern void _ZN5S1C103v89Ev();
extern void _ZN5S1C103v90Ev();
extern void _ZN5S1C103v91Ev();
extern void _ZN5S1C103v92Ev();
extern void _ZN5S1C103v93Ev();
extern void _ZN5S1C103v94Ev();
extern void _ZN5S1C103v95Ev();
extern void _ZN5S1C103v96Ev();
extern void _ZN5S1C103v97Ev();
extern void _ZN5S1C103v98Ev();
extern void _ZN5S1C103v99Ev();
extern void _ZN5S1C104v100Ev();
extern void _ZN5S1C104v101Ev();
extern void _ZN5S1C104v102Ev();
extern void _ZN5S1C104v103Ev();
extern void _ZN5S1C104v104Ev();
extern void _ZN5S1C104v105Ev();
extern void _ZN5S1C104v106Ev();
extern void _ZN5S1C104v107Ev();
extern void _ZN5S1C104v108Ev();
extern void _ZN5S1C104v109Ev();
extern void _ZN5S1C104v110Ev();
extern void _ZN5S1C104v111Ev();
extern void _ZN4S1C84v112Ev();
extern void _ZN4S1C84v113Ev();
extern void _ZN4S1C84v114Ev();
extern void _ZN4S1C84v115Ev();
extern void _ZN4S1C84v116Ev();
extern void _ZN4S1C84v117Ev();
extern void _ZN4S1C84v118Ev();
extern void _ZN4S1C84v119Ev();
extern void _ZN4S1C84v120Ev();
extern void _ZN4S1C84v121Ev();
extern void _ZN4S1C84v122Ev();
extern void _ZN4S1C84v123Ev();
extern void _ZN4S1C84v124Ev();
extern void _ZN4S1C84v125Ev();
extern void _ZN4S1C84v126Ev();
extern void _ZN4S1C84v127Ev();
extern void _ZN4S1C84v128Ev();
extern void _ZN4S1C84v129Ev();
extern void _ZN4S1C84v130Ev();
extern void _ZN4S1C84v131Ev();
extern void _ZN4S1C84v132Ev();
extern void _ZN4S1C84v133Ev();
extern void _ZN4S1C84v134Ev();
extern void _ZN4S1C84v135Ev();
extern void _ZN4S1C84v136Ev();
extern void _ZN4S1C84v137Ev();
extern void _ZN4S1C74v138Ev();
extern void _ZN4S1C74v139Ev();
extern void _ZN4S1C74v140Ev();
extern void _ZN4S1C74v141Ev();
extern void _ZN4S1C74v142Ev();
extern void _ZN4S1C74v143Ev();
extern void _ZN4S1C74v144Ev();
extern void _ZN4S1C74v145Ev();
extern void _ZN4S1C74v146Ev();
extern void _ZN4S1C74v147Ev();
extern void _ZN4S1C74v148Ev();
extern void _ZN4S1C74v149Ev();
extern void _ZN4S1C74v150Ev();
extern void _ZN4S1C74v151Ev();
extern void _ZN4S1C74v152Ev();
extern void _ZN4S1C74v153Ev();
extern void _ZN4S1C74v154Ev();
extern void _ZN4S1C74v155Ev();
extern void _ZN4S1C64v156Ev();
extern void _ZN4S1C64v157Ev();
extern void _ZN4S1C64v158Ev();
extern void _ZN4S1C64v159Ev();
extern void _ZN4S1C64v160Ev();
extern void _ZN4S1C64v161Ev();
extern void _ZN4S1C64v162Ev();
extern void _ZN4S1C64v163Ev();
extern void _ZN4S1C64v164Ev();
extern void _ZN4S1C64v165Ev();
extern void _ZN4S1C64v166Ev();
extern void _ZN4S1C64v167Ev();
extern void _ZN4S1C64v168Ev();
extern void _ZN4S1C64v169Ev();
extern void _ZN4S1C64v170Ev();
extern void _ZN4S1C64v171Ev();
extern void _ZN4S1C64v172Ev();
extern void _ZN4S1C64v173Ev();
extern void _ZN4S1C64v174Ev();
extern void _ZN4S1C64v175Ev();
extern void _ZN4S1C64v176Ev();
extern void _ZN4S1C64v177Ev();
extern void _ZN4S1C64v178Ev();
extern void _ZN4S1C64v179Ev();
extern void _ZN4S1C64v180Ev();
extern void _ZN4S1C64v181Ev();
extern void _ZN4S1C44v182Ev();
extern void _ZN4S1C44v183Ev();
extern void _ZN4S1C44v184Ev();
extern void _ZN4S1C44v185Ev();
extern void _ZN4S1C44v186Ev();
extern void _ZN4S1C44v187Ev();
extern void _ZN4S1C34v188Ev();
extern void _ZN4S1C34v189Ev();
extern void _ZN4S1C34v190Ev();
extern void _ZN4S1C34v191Ev();
extern void _ZN4S1C34v192Ev();
extern void _ZN4S1C34v193Ev();
extern void _ZN4S1C34v194Ev();
extern void _ZN4S1C34v195Ev();
extern void _ZN4S1C34v196Ev();
extern void _ZN4S1C34v197Ev();
extern void _ZN4S1C34v198Ev();
extern void _ZN4S1C34v199Ev();
extern void _ZN4S1C34v200Ev();
extern void _ZN4S1C34v201Ev();
extern void _ZN4S1C34v202Ev();
extern void _ZN4S1C34v203Ev();
extern void _ZN4S1C34v204Ev();
extern void _ZN4S1C34v205Ev();
extern void _ZN4S1C34v206Ev();
extern void _ZN4S1C34v207Ev();
extern void _ZN4S1C34v208Ev();
static  VTBL_ENTRY vtc_S1C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI4S1C3[0]),
  (VTBL_ENTRY)&_ZN4S1C3D1Ev,
  (VTBL_ENTRY)&_ZN4S1C3D0Ev,
  (VTBL_ENTRY)&_ZN5S1C102v5Ev,
  (VTBL_ENTRY)&_ZN5S1C102v6Ev,
  (VTBL_ENTRY)&_ZN5S1C102v7Ev,
  (VTBL_ENTRY)&_ZN5S1C102v8Ev,
  (VTBL_ENTRY)&_ZN5S1C102v9Ev,
  (VTBL_ENTRY)&_ZN5S1C103v10Ev,
  (VTBL_ENTRY)&_ZN5S1C103v11Ev,
  (VTBL_ENTRY)&_ZN5S1C103v12Ev,
  (VTBL_ENTRY)&_ZN5S1C103v13Ev,
  (VTBL_ENTRY)&_ZN5S1C103v14Ev,
  (VTBL_ENTRY)&_ZN5S1C103v15Ev,
  (VTBL_ENTRY)&_ZN5S1C103v16Ev,
  (VTBL_ENTRY)&_ZN5S1C103v17Ev,
  (VTBL_ENTRY)&_ZN5S1C103v18Ev,
  (VTBL_ENTRY)&_ZN5S1C103v19Ev,
  (VTBL_ENTRY)&_ZN5S1C103v20Ev,
  (VTBL_ENTRY)&_ZN5S1C103v21Ev,
  (VTBL_ENTRY)&_ZN5S1C103v22Ev,
  (VTBL_ENTRY)&_ZN5S1C103v23Ev,
  (VTBL_ENTRY)&_ZN5S1C103v24Ev,
  (VTBL_ENTRY)&_ZN5S1C103v25Ev,
  (VTBL_ENTRY)&_ZN5S1C103v26Ev,
  (VTBL_ENTRY)&_ZN5S1C103v27Ev,
  (VTBL_ENTRY)&_ZN5S1C103v28Ev,
  (VTBL_ENTRY)&_ZN5S1C103v29Ev,
  (VTBL_ENTRY)&_ZN5S1C103v30Ev,
  (VTBL_ENTRY)&_ZN5S1C103v31Ev,
  (VTBL_ENTRY)&_ZN5S1C103v32Ev,
  (VTBL_ENTRY)&_ZN5S1C103v33Ev,
  (VTBL_ENTRY)&_ZN5S1C103v34Ev,
  (VTBL_ENTRY)&_ZN5S1C103v35Ev,
  (VTBL_ENTRY)&_ZN5S1C103v36Ev,
  (VTBL_ENTRY)&_ZN5S1C103v37Ev,
  (VTBL_ENTRY)&_ZN5S1C103v38Ev,
  (VTBL_ENTRY)&_ZN5S1C103v39Ev,
  (VTBL_ENTRY)&_ZN5S1C103v40Ev,
  (VTBL_ENTRY)&_ZN5S1C103v41Ev,
  (VTBL_ENTRY)&_ZN5S1C103v42Ev,
  (VTBL_ENTRY)&_ZN5S1C103v43Ev,
  (VTBL_ENTRY)&_ZN5S1C103v44Ev,
  (VTBL_ENTRY)&_ZN5S1C103v45Ev,
  (VTBL_ENTRY)&_ZN5S1C103v46Ev,
  (VTBL_ENTRY)&_ZN5S1C103v47Ev,
  (VTBL_ENTRY)&_ZN5S1C103v48Ev,
  (VTBL_ENTRY)&_ZN5S1C103v49Ev,
  (VTBL_ENTRY)&_ZN5S1C103v50Ev,
  (VTBL_ENTRY)&_ZN5S1C103v51Ev,
  (VTBL_ENTRY)&_ZN5S1C103v52Ev,
  (VTBL_ENTRY)&_ZN5S1C103v53Ev,
  (VTBL_ENTRY)&_ZN5S1C103v54Ev,
  (VTBL_ENTRY)&_ZN5S1C103v55Ev,
  (VTBL_ENTRY)&_ZN5S1C103v56Ev,
  (VTBL_ENTRY)&_ZN5S1C103v57Ev,
  (VTBL_ENTRY)&_ZN5S1C103v58Ev,
  (VTBL_ENTRY)&_ZN5S1C103v59Ev,
  (VTBL_ENTRY)&_ZN5S1C103v60Ev,
  (VTBL_ENTRY)&_ZN5S1C103v61Ev,
  (VTBL_ENTRY)&_ZN5S1C103v62Ev,
  (VTBL_ENTRY)&_ZN5S1C103v63Ev,
  (VTBL_ENTRY)&_ZN5S1C103v64Ev,
  (VTBL_ENTRY)&_ZN5S1C103v65Ev,
  (VTBL_ENTRY)&_ZN5S1C103v66Ev,
  (VTBL_ENTRY)&_ZN5S1C103v67Ev,
  (VTBL_ENTRY)&_ZN5S1C103v68Ev,
  (VTBL_ENTRY)&_ZN5S1C103v69Ev,
  (VTBL_ENTRY)&_ZN5S1C103v70Ev,
  (VTBL_ENTRY)&_ZN5S1C103v71Ev,
  (VTBL_ENTRY)&_ZN5S1C103v72Ev,
  (VTBL_ENTRY)&_ZN5S1C103v73Ev,
  (VTBL_ENTRY)&_ZN5S1C103v74Ev,
  (VTBL_ENTRY)&_ZN5S1C103v75Ev,
  (VTBL_ENTRY)&_ZN5S1C103v76Ev,
  (VTBL_ENTRY)&_ZN5S1C103v77Ev,
  (VTBL_ENTRY)&_ZN5S1C103v78Ev,
  (VTBL_ENTRY)&_ZN5S1C103v79Ev,
  (VTBL_ENTRY)&_ZN5S1C103v80Ev,
  (VTBL_ENTRY)&_ZN5S1C103v81Ev,
  (VTBL_ENTRY)&_ZN5S1C103v82Ev,
  (VTBL_ENTRY)&_ZN5S1C103v83Ev,
  (VTBL_ENTRY)&_ZN5S1C103v84Ev,
  (VTBL_ENTRY)&_ZN5S1C103v85Ev,
  (VTBL_ENTRY)&_ZN5S1C103v86Ev,
  (VTBL_ENTRY)&_ZN5S1C103v87Ev,
  (VTBL_ENTRY)&_ZN5S1C103v88Ev,
  (VTBL_ENTRY)&_ZN5S1C103v89Ev,
  (VTBL_ENTRY)&_ZN5S1C103v90Ev,
  (VTBL_ENTRY)&_ZN5S1C103v91Ev,
  (VTBL_ENTRY)&_ZN5S1C103v92Ev,
  (VTBL_ENTRY)&_ZN5S1C103v93Ev,
  (VTBL_ENTRY)&_ZN5S1C103v94Ev,
  (VTBL_ENTRY)&_ZN5S1C103v95Ev,
  (VTBL_ENTRY)&_ZN5S1C103v96Ev,
  (VTBL_ENTRY)&_ZN5S1C103v97Ev,
  (VTBL_ENTRY)&_ZN5S1C103v98Ev,
  (VTBL_ENTRY)&_ZN5S1C103v99Ev,
  (VTBL_ENTRY)&_ZN5S1C104v100Ev,
  (VTBL_ENTRY)&_ZN5S1C104v101Ev,
  (VTBL_ENTRY)&_ZN5S1C104v102Ev,
  (VTBL_ENTRY)&_ZN5S1C104v103Ev,
  (VTBL_ENTRY)&_ZN5S1C104v104Ev,
  (VTBL_ENTRY)&_ZN5S1C104v105Ev,
  (VTBL_ENTRY)&_ZN5S1C104v106Ev,
  (VTBL_ENTRY)&_ZN5S1C104v107Ev,
  (VTBL_ENTRY)&_ZN5S1C104v108Ev,
  (VTBL_ENTRY)&_ZN5S1C104v109Ev,
  (VTBL_ENTRY)&_ZN5S1C104v110Ev,
  (VTBL_ENTRY)&_ZN5S1C104v111Ev,
  (VTBL_ENTRY)&_ZN4S1C84v112Ev,
  (VTBL_ENTRY)&_ZN4S1C84v113Ev,
  (VTBL_ENTRY)&_ZN4S1C84v114Ev,
  (VTBL_ENTRY)&_ZN4S1C84v115Ev,
  (VTBL_ENTRY)&_ZN4S1C84v116Ev,
  (VTBL_ENTRY)&_ZN4S1C84v117Ev,
  (VTBL_ENTRY)&_ZN4S1C84v118Ev,
  (VTBL_ENTRY)&_ZN4S1C84v119Ev,
  (VTBL_ENTRY)&_ZN4S1C84v120Ev,
  (VTBL_ENTRY)&_ZN4S1C84v121Ev,
  (VTBL_ENTRY)&_ZN4S1C84v122Ev,
  (VTBL_ENTRY)&_ZN4S1C84v123Ev,
  (VTBL_ENTRY)&_ZN4S1C84v124Ev,
  (VTBL_ENTRY)&_ZN4S1C84v125Ev,
  (VTBL_ENTRY)&_ZN4S1C84v126Ev,
  (VTBL_ENTRY)&_ZN4S1C84v127Ev,
  (VTBL_ENTRY)&_ZN4S1C84v128Ev,
  (VTBL_ENTRY)&_ZN4S1C84v129Ev,
  (VTBL_ENTRY)&_ZN4S1C84v130Ev,
  (VTBL_ENTRY)&_ZN4S1C84v131Ev,
  (VTBL_ENTRY)&_ZN4S1C84v132Ev,
  (VTBL_ENTRY)&_ZN4S1C84v133Ev,
  (VTBL_ENTRY)&_ZN4S1C84v134Ev,
  (VTBL_ENTRY)&_ZN4S1C84v135Ev,
  (VTBL_ENTRY)&_ZN4S1C84v136Ev,
  (VTBL_ENTRY)&_ZN4S1C84v137Ev,
  (VTBL_ENTRY)&_ZN4S1C74v138Ev,
  (VTBL_ENTRY)&_ZN4S1C74v139Ev,
  (VTBL_ENTRY)&_ZN4S1C74v140Ev,
  (VTBL_ENTRY)&_ZN4S1C74v141Ev,
  (VTBL_ENTRY)&_ZN4S1C74v142Ev,
  (VTBL_ENTRY)&_ZN4S1C74v143Ev,
  (VTBL_ENTRY)&_ZN4S1C74v144Ev,
  (VTBL_ENTRY)&_ZN4S1C74v145Ev,
  (VTBL_ENTRY)&_ZN4S1C74v146Ev,
  (VTBL_ENTRY)&_ZN4S1C74v147Ev,
  (VTBL_ENTRY)&_ZN4S1C74v148Ev,
  (VTBL_ENTRY)&_ZN4S1C74v149Ev,
  (VTBL_ENTRY)&_ZN4S1C74v150Ev,
  (VTBL_ENTRY)&_ZN4S1C74v151Ev,
  (VTBL_ENTRY)&_ZN4S1C74v152Ev,
  (VTBL_ENTRY)&_ZN4S1C74v153Ev,
  (VTBL_ENTRY)&_ZN4S1C74v154Ev,
  (VTBL_ENTRY)&_ZN4S1C74v155Ev,
  (VTBL_ENTRY)&_ZN4S1C64v156Ev,
  (VTBL_ENTRY)&_ZN4S1C64v157Ev,
  (VTBL_ENTRY)&_ZN4S1C64v158Ev,
  (VTBL_ENTRY)&_ZN4S1C64v159Ev,
  (VTBL_ENTRY)&_ZN4S1C64v160Ev,
  (VTBL_ENTRY)&_ZN4S1C64v161Ev,
  (VTBL_ENTRY)&_ZN4S1C64v162Ev,
  (VTBL_ENTRY)&_ZN4S1C64v163Ev,
  (VTBL_ENTRY)&_ZN4S1C64v164Ev,
  (VTBL_ENTRY)&_ZN4S1C64v165Ev,
  (VTBL_ENTRY)&_ZN4S1C64v166Ev,
  (VTBL_ENTRY)&_ZN4S1C64v167Ev,
  (VTBL_ENTRY)&_ZN4S1C64v168Ev,
  (VTBL_ENTRY)&_ZN4S1C64v169Ev,
  (VTBL_ENTRY)&_ZN4S1C64v170Ev,
  (VTBL_ENTRY)&_ZN4S1C64v171Ev,
  (VTBL_ENTRY)&_ZN4S1C64v172Ev,
  (VTBL_ENTRY)&_ZN4S1C64v173Ev,
  (VTBL_ENTRY)&_ZN4S1C64v174Ev,
  (VTBL_ENTRY)&_ZN4S1C64v175Ev,
  (VTBL_ENTRY)&_ZN4S1C64v176Ev,
  (VTBL_ENTRY)&_ZN4S1C64v177Ev,
  (VTBL_ENTRY)&_ZN4S1C64v178Ev,
  (VTBL_ENTRY)&_ZN4S1C64v179Ev,
  (VTBL_ENTRY)&_ZN4S1C64v180Ev,
  (VTBL_ENTRY)&_ZN4S1C64v181Ev,
  (VTBL_ENTRY)&_ZN4S1C44v182Ev,
  (VTBL_ENTRY)&_ZN4S1C44v183Ev,
  (VTBL_ENTRY)&_ZN4S1C44v184Ev,
  (VTBL_ENTRY)&_ZN4S1C44v185Ev,
  (VTBL_ENTRY)&_ZN4S1C44v186Ev,
  (VTBL_ENTRY)&_ZN4S1C44v187Ev,
  (VTBL_ENTRY)&_ZN4S1C34v188Ev,
  (VTBL_ENTRY)&_ZN4S1C34v189Ev,
  (VTBL_ENTRY)&_ZN4S1C34v190Ev,
  (VTBL_ENTRY)&_ZN4S1C34v191Ev,
  (VTBL_ENTRY)&_ZN4S1C34v192Ev,
  (VTBL_ENTRY)&_ZN4S1C34v193Ev,
  (VTBL_ENTRY)&_ZN4S1C34v194Ev,
  (VTBL_ENTRY)&_ZN4S1C34v195Ev,
  (VTBL_ENTRY)&_ZN4S1C34v196Ev,
  (VTBL_ENTRY)&_ZN4S1C34v197Ev,
  (VTBL_ENTRY)&_ZN4S1C34v198Ev,
  (VTBL_ENTRY)&_ZN4S1C34v199Ev,
  (VTBL_ENTRY)&_ZN4S1C34v200Ev,
  (VTBL_ENTRY)&_ZN4S1C34v201Ev,
  (VTBL_ENTRY)&_ZN4S1C34v202Ev,
  (VTBL_ENTRY)&_ZN4S1C34v203Ev,
  (VTBL_ENTRY)&_ZN4S1C34v204Ev,
  (VTBL_ENTRY)&_ZN4S1C34v205Ev,
  (VTBL_ENTRY)&_ZN4S1C34v206Ev,
  (VTBL_ENTRY)&_ZN4S1C34v207Ev,
  (VTBL_ENTRY)&_ZN4S1C34v208Ev,
};
extern VTBL_ENTRY _ZTI4S1C3[];
extern  VTBL_ENTRY _ZTV4S1C3[];
Class_Descriptor cd_S1C3 = {  "S1C3", // class name
  bases_S1C3, 8,
  &(vtc_S1C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI4S1C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV4S1C3),208, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  8, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1C2  : S1C3 {
  virtual void  v209(); // _ZN4S1C24v209Ev
  virtual void  v210(); // _ZN4S1C24v210Ev
  ~S1C2(); // tgen
  S1C2(); // tgen
};
//SIG(-1 S1C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ BC9{ BC10{ vd m Fp Fi} 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 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 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} v1 v2}


void  S1C2 ::v209(){vfunc_called(this, "_ZN4S1C24v209Ev");}
void  S1C2 ::v210(){vfunc_called(this, "_ZN4S1C24v210Ev");}
S1C2 ::~S1C2(){ note_dtor("S1C2", this);} // tgen
S1C2 ::S1C2(){ note_ctor("S1C2", this);} // tgen

static void Test_S1C2()
{
  extern Class_Descriptor cd_S1C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1C2, buf);
    S1C2 *dp, &lv = *(dp=new (buf) S1C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S1C10*)(S1C9*)(S1C8*)(S1C7*)(S1C6*)(S1C5*)(S1C4*)(S1C3*), 0, "S1C2");
    check_base_class_offset(lv, (S1C10*)(S1C9*)(S1C8*)(S1C7*)(S1C6*)(S1C5*)(S1C4*)(S1C3*), 0, "S1C2");
    check_base_class_offset(lv, (S1C9*)(S1C8*)(S1C7*)(S1C6*)(S1C5*)(S1C4*)(S1C3*), 0, "S1C2");
    check_base_class_offset(lv, (S1C8*)(S1C7*)(S1C6*)(S1C5*)(S1C4*)(S1C3*), 0, "S1C2");
    check_base_class_offset(lv, (S1C7*)(S1C6*)(S1C5*)(S1C4*)(S1C3*), 0, "S1C2");
    check_base_class_offset(lv, (S1C6*)(S1C5*)(S1C4*)(S1C3*), 0, "S1C2");
    check_base_class_offset(lv, (S1C5*)(S1C4*)(S1C3*), 0, "S1C2");
    check_base_class_offset(lv, (S1C4*)(S1C3*), 0, "S1C2");
    check_base_class_offset(lv, (S1C3*), 0, "S1C2");
    test_class_info(&lv, &cd_S1C2);
    dp->~S1C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1C2(Test_S1C2, "S1C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN4S1C2C1Ev();
extern void _ZN4S1C2D1Ev();
Name_Map name_map_S1C2[] = {
  NSPAIR(_ZN4S1C2C1Ev),
  NSPAIR(_ZN4S1C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1C10;
extern VTBL_ENTRY _ZTI5S1C10[];
extern  VTBL_ENTRY _ZTV5S1C10[];
extern Class_Descriptor cd_S1C9;
extern VTBL_ENTRY _ZTI4S1C9[];
extern  VTBL_ENTRY _ZTV4S1C9[];
extern Class_Descriptor cd_S1C8;
extern VTBL_ENTRY _ZTI4S1C8[];
extern  VTBL_ENTRY _ZTV4S1C8[];
extern Class_Descriptor cd_S1C7;
extern VTBL_ENTRY _ZTI4S1C7[];
extern  VTBL_ENTRY _ZTV4S1C7[];
extern Class_Descriptor cd_S1C6;
extern VTBL_ENTRY _ZTI4S1C6[];
extern  VTBL_ENTRY _ZTV4S1C6[];
extern Class_Descriptor cd_S1C5;
extern VTBL_ENTRY _ZTI4S1C5[];
extern  VTBL_ENTRY _ZTV4S1C5[];
extern Class_Descriptor cd_S1C4;
extern VTBL_ENTRY _ZTI4S1C4[];
extern  VTBL_ENTRY _ZTV4S1C4[];
extern Class_Descriptor cd_S1C3;
extern VTBL_ENTRY _ZTI4S1C3[];
extern  VTBL_ENTRY _ZTV4S1C3[];
static Base_Class bases_S1C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI4S1C2[];
extern void _ZN4S1C2D1Ev();
extern void _ZN4S1C2D0Ev();
extern void _ZN5S1C102v5Ev();
extern void _ZN5S1C102v6Ev();
extern void _ZN5S1C102v7Ev();
extern void _ZN5S1C102v8Ev();
extern void _ZN5S1C102v9Ev();
extern void _ZN5S1C103v10Ev();
extern void _ZN5S1C103v11Ev();
extern void _ZN5S1C103v12Ev();
extern void _ZN5S1C103v13Ev();
extern void _ZN5S1C103v14Ev();
extern void _ZN5S1C103v15Ev();
extern void _ZN5S1C103v16Ev();
extern void _ZN5S1C103v17Ev();
extern void _ZN5S1C103v18Ev();
extern void _ZN5S1C103v19Ev();
extern void _ZN5S1C103v20Ev();
extern void _ZN5S1C103v21Ev();
extern void _ZN5S1C103v22Ev();
extern void _ZN5S1C103v23Ev();
extern void _ZN5S1C103v24Ev();
extern void _ZN5S1C103v25Ev();
extern void _ZN5S1C103v26Ev();
extern void _ZN5S1C103v27Ev();
extern void _ZN5S1C103v28Ev();
extern void _ZN5S1C103v29Ev();
extern void _ZN5S1C103v30Ev();
extern void _ZN5S1C103v31Ev();
extern void _ZN5S1C103v32Ev();
extern void _ZN5S1C103v33Ev();
extern void _ZN5S1C103v34Ev();
extern void _ZN5S1C103v35Ev();
extern void _ZN5S1C103v36Ev();
extern void _ZN5S1C103v37Ev();
extern void _ZN5S1C103v38Ev();
extern void _ZN5S1C103v39Ev();
extern void _ZN5S1C103v40Ev();
extern void _ZN5S1C103v41Ev();
extern void _ZN5S1C103v42Ev();
extern void _ZN5S1C103v43Ev();
extern void _ZN5S1C103v44Ev();
extern void _ZN5S1C103v45Ev();
extern void _ZN5S1C103v46Ev();
extern void _ZN5S1C103v47Ev();
extern void _ZN5S1C103v48Ev();
extern void _ZN5S1C103v49Ev();
extern void _ZN5S1C103v50Ev();
extern void _ZN5S1C103v51Ev();
extern void _ZN5S1C103v52Ev();
extern void _ZN5S1C103v53Ev();
extern void _ZN5S1C103v54Ev();
extern void _ZN5S1C103v55Ev();
extern void _ZN5S1C103v56Ev();
extern void _ZN5S1C103v57Ev();
extern void _ZN5S1C103v58Ev();
extern void _ZN5S1C103v59Ev();
extern void _ZN5S1C103v60Ev();
extern void _ZN5S1C103v61Ev();
extern void _ZN5S1C103v62Ev();
extern void _ZN5S1C103v63Ev();
extern void _ZN5S1C103v64Ev();
extern void _ZN5S1C103v65Ev();
extern void _ZN5S1C103v66Ev();
extern void _ZN5S1C103v67Ev();
extern void _ZN5S1C103v68Ev();
extern void _ZN5S1C103v69Ev();
extern void _ZN5S1C103v70Ev();
extern void _ZN5S1C103v71Ev();
extern void _ZN5S1C103v72Ev();
extern void _ZN5S1C103v73Ev();
extern void _ZN5S1C103v74Ev();
extern void _ZN5S1C103v75Ev();
extern void _ZN5S1C103v76Ev();
extern void _ZN5S1C103v77Ev();
extern void _ZN5S1C103v78Ev();
extern void _ZN5S1C103v79Ev();
extern void _ZN5S1C103v80Ev();
extern void _ZN5S1C103v81Ev();
extern void _ZN5S1C103v82Ev();
extern void _ZN5S1C103v83Ev();
extern void _ZN5S1C103v84Ev();
extern void _ZN5S1C103v85Ev();
extern void _ZN5S1C103v86Ev();
extern void _ZN5S1C103v87Ev();
extern void _ZN5S1C103v88Ev();
extern void _ZN5S1C103v89Ev();
extern void _ZN5S1C103v90Ev();
extern void _ZN5S1C103v91Ev();
extern void _ZN5S1C103v92Ev();
extern void _ZN5S1C103v93Ev();
extern void _ZN5S1C103v94Ev();
extern void _ZN5S1C103v95Ev();
extern void _ZN5S1C103v96Ev();
extern void _ZN5S1C103v97Ev();
extern void _ZN5S1C103v98Ev();
extern void _ZN5S1C103v99Ev();
extern void _ZN5S1C104v100Ev();
extern void _ZN5S1C104v101Ev();
extern void _ZN5S1C104v102Ev();
extern void _ZN5S1C104v103Ev();
extern void _ZN5S1C104v104Ev();
extern void _ZN5S1C104v105Ev();
extern void _ZN5S1C104v106Ev();
extern void _ZN5S1C104v107Ev();
extern void _ZN5S1C104v108Ev();
extern void _ZN5S1C104v109Ev();
extern void _ZN5S1C104v110Ev();
extern void _ZN5S1C104v111Ev();
extern void _ZN4S1C84v112Ev();
extern void _ZN4S1C84v113Ev();
extern void _ZN4S1C84v114Ev();
extern void _ZN4S1C84v115Ev();
extern void _ZN4S1C84v116Ev();
extern void _ZN4S1C84v117Ev();
extern void _ZN4S1C84v118Ev();
extern void _ZN4S1C84v119Ev();
extern void _ZN4S1C84v120Ev();
extern void _ZN4S1C84v121Ev();
extern void _ZN4S1C84v122Ev();
extern void _ZN4S1C84v123Ev();
extern void _ZN4S1C84v124Ev();
extern void _ZN4S1C84v125Ev();
extern void _ZN4S1C84v126Ev();
extern void _ZN4S1C84v127Ev();
extern void _ZN4S1C84v128Ev();
extern void _ZN4S1C84v129Ev();
extern void _ZN4S1C84v130Ev();
extern void _ZN4S1C84v131Ev();
extern void _ZN4S1C84v132Ev();
extern void _ZN4S1C84v133Ev();
extern void _ZN4S1C84v134Ev();
extern void _ZN4S1C84v135Ev();
extern void _ZN4S1C84v136Ev();
extern void _ZN4S1C84v137Ev();
extern void _ZN4S1C74v138Ev();
extern void _ZN4S1C74v139Ev();
extern void _ZN4S1C74v140Ev();
extern void _ZN4S1C74v141Ev();
extern void _ZN4S1C74v142Ev();
extern void _ZN4S1C74v143Ev();
extern void _ZN4S1C74v144Ev();
extern void _ZN4S1C74v145Ev();
extern void _ZN4S1C74v146Ev();
extern void _ZN4S1C74v147Ev();
extern void _ZN4S1C74v148Ev();
extern void _ZN4S1C74v149Ev();
extern void _ZN4S1C74v150Ev();
extern void _ZN4S1C74v151Ev();
extern void _ZN4S1C74v152Ev();
extern void _ZN4S1C74v153Ev();
extern void _ZN4S1C74v154Ev();
extern void _ZN4S1C74v155Ev();
extern void _ZN4S1C64v156Ev();
extern void _ZN4S1C64v157Ev();
extern void _ZN4S1C64v158Ev();
extern void _ZN4S1C64v159Ev();
extern void _ZN4S1C64v160Ev();
extern void _ZN4S1C64v161Ev();
extern void _ZN4S1C64v162Ev();
extern void _ZN4S1C64v163Ev();
extern void _ZN4S1C64v164Ev();
extern void _ZN4S1C64v165Ev();
extern void _ZN4S1C64v166Ev();
extern void _ZN4S1C64v167Ev();
extern void _ZN4S1C64v168Ev();
extern void _ZN4S1C64v169Ev();
extern void _ZN4S1C64v170Ev();
extern void _ZN4S1C64v171Ev();
extern void _ZN4S1C64v172Ev();
extern void _ZN4S1C64v173Ev();
extern void _ZN4S1C64v174Ev();
extern void _ZN4S1C64v175Ev();
extern void _ZN4S1C64v176Ev();
extern void _ZN4S1C64v177Ev();
extern void _ZN4S1C64v178Ev();
extern void _ZN4S1C64v179Ev();
extern void _ZN4S1C64v180Ev();
extern void _ZN4S1C64v181Ev();
extern void _ZN4S1C44v182Ev();
extern void _ZN4S1C44v183Ev();
extern void _ZN4S1C44v184Ev();
extern void _ZN4S1C44v185Ev();
extern void _ZN4S1C44v186Ev();
extern void _ZN4S1C44v187Ev();
extern void _ZN4S1C34v188Ev();
extern void _ZN4S1C34v189Ev();
extern void _ZN4S1C34v190Ev();
extern void _ZN4S1C34v191Ev();
extern void _ZN4S1C34v192Ev();
extern void _ZN4S1C34v193Ev();
extern void _ZN4S1C34v194Ev();
extern void _ZN4S1C34v195Ev();
extern void _ZN4S1C34v196Ev();
extern void _ZN4S1C34v197Ev();
extern void _ZN4S1C34v198Ev();
extern void _ZN4S1C34v199Ev();
extern void _ZN4S1C34v200Ev();
extern void _ZN4S1C34v201Ev();
extern void _ZN4S1C34v202Ev();
extern void _ZN4S1C34v203Ev();
extern void _ZN4S1C34v204Ev();
extern void _ZN4S1C34v205Ev();
extern void _ZN4S1C34v206Ev();
extern void _ZN4S1C34v207Ev();
extern void _ZN4S1C34v208Ev();
extern void _ZN4S1C24v209Ev();
extern void _ZN4S1C24v210Ev();
static  VTBL_ENTRY vtc_S1C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI4S1C2[0]),
  (VTBL_ENTRY)&_ZN4S1C2D1Ev,
  (VTBL_ENTRY)&_ZN4S1C2D0Ev,
  (VTBL_ENTRY)&_ZN5S1C102v5Ev,
  (VTBL_ENTRY)&_ZN5S1C102v6Ev,
  (VTBL_ENTRY)&_ZN5S1C102v7Ev,
  (VTBL_ENTRY)&_ZN5S1C102v8Ev,
  (VTBL_ENTRY)&_ZN5S1C102v9Ev,
  (VTBL_ENTRY)&_ZN5S1C103v10Ev,
  (VTBL_ENTRY)&_ZN5S1C103v11Ev,
  (VTBL_ENTRY)&_ZN5S1C103v12Ev,
  (VTBL_ENTRY)&_ZN5S1C103v13Ev,
  (VTBL_ENTRY)&_ZN5S1C103v14Ev,
  (VTBL_ENTRY)&_ZN5S1C103v15Ev,
  (VTBL_ENTRY)&_ZN5S1C103v16Ev,
  (VTBL_ENTRY)&_ZN5S1C103v17Ev,
  (VTBL_ENTRY)&_ZN5S1C103v18Ev,
  (VTBL_ENTRY)&_ZN5S1C103v19Ev,
  (VTBL_ENTRY)&_ZN5S1C103v20Ev,
  (VTBL_ENTRY)&_ZN5S1C103v21Ev,
  (VTBL_ENTRY)&_ZN5S1C103v22Ev,
  (VTBL_ENTRY)&_ZN5S1C103v23Ev,
  (VTBL_ENTRY)&_ZN5S1C103v24Ev,
  (VTBL_ENTRY)&_ZN5S1C103v25Ev,
  (VTBL_ENTRY)&_ZN5S1C103v26Ev,
  (VTBL_ENTRY)&_ZN5S1C103v27Ev,
  (VTBL_ENTRY)&_ZN5S1C103v28Ev,
  (VTBL_ENTRY)&_ZN5S1C103v29Ev,
  (VTBL_ENTRY)&_ZN5S1C103v30Ev,
  (VTBL_ENTRY)&_ZN5S1C103v31Ev,
  (VTBL_ENTRY)&_ZN5S1C103v32Ev,
  (VTBL_ENTRY)&_ZN5S1C103v33Ev,
  (VTBL_ENTRY)&_ZN5S1C103v34Ev,
  (VTBL_ENTRY)&_ZN5S1C103v35Ev,
  (VTBL_ENTRY)&_ZN5S1C103v36Ev,
  (VTBL_ENTRY)&_ZN5S1C103v37Ev,
  (VTBL_ENTRY)&_ZN5S1C103v38Ev,
  (VTBL_ENTRY)&_ZN5S1C103v39Ev,
  (VTBL_ENTRY)&_ZN5S1C103v40Ev,
  (VTBL_ENTRY)&_ZN5S1C103v41Ev,
  (VTBL_ENTRY)&_ZN5S1C103v42Ev,
  (VTBL_ENTRY)&_ZN5S1C103v43Ev,
  (VTBL_ENTRY)&_ZN5S1C103v44Ev,
  (VTBL_ENTRY)&_ZN5S1C103v45Ev,
  (VTBL_ENTRY)&_ZN5S1C103v46Ev,
  (VTBL_ENTRY)&_ZN5S1C103v47Ev,
  (VTBL_ENTRY)&_ZN5S1C103v48Ev,
  (VTBL_ENTRY)&_ZN5S1C103v49Ev,
  (VTBL_ENTRY)&_ZN5S1C103v50Ev,
  (VTBL_ENTRY)&_ZN5S1C103v51Ev,
  (VTBL_ENTRY)&_ZN5S1C103v52Ev,
  (VTBL_ENTRY)&_ZN5S1C103v53Ev,
  (VTBL_ENTRY)&_ZN5S1C103v54Ev,
  (VTBL_ENTRY)&_ZN5S1C103v55Ev,
  (VTBL_ENTRY)&_ZN5S1C103v56Ev,
  (VTBL_ENTRY)&_ZN5S1C103v57Ev,
  (VTBL_ENTRY)&_ZN5S1C103v58Ev,
  (VTBL_ENTRY)&_ZN5S1C103v59Ev,
  (VTBL_ENTRY)&_ZN5S1C103v60Ev,
  (VTBL_ENTRY)&_ZN5S1C103v61Ev,
  (VTBL_ENTRY)&_ZN5S1C103v62Ev,
  (VTBL_ENTRY)&_ZN5S1C103v63Ev,
  (VTBL_ENTRY)&_ZN5S1C103v64Ev,
  (VTBL_ENTRY)&_ZN5S1C103v65Ev,
  (VTBL_ENTRY)&_ZN5S1C103v66Ev,
  (VTBL_ENTRY)&_ZN5S1C103v67Ev,
  (VTBL_ENTRY)&_ZN5S1C103v68Ev,
  (VTBL_ENTRY)&_ZN5S1C103v69Ev,
  (VTBL_ENTRY)&_ZN5S1C103v70Ev,
  (VTBL_ENTRY)&_ZN5S1C103v71Ev,
  (VTBL_ENTRY)&_ZN5S1C103v72Ev,
  (VTBL_ENTRY)&_ZN5S1C103v73Ev,
  (VTBL_ENTRY)&_ZN5S1C103v74Ev,
  (VTBL_ENTRY)&_ZN5S1C103v75Ev,
  (VTBL_ENTRY)&_ZN5S1C103v76Ev,
  (VTBL_ENTRY)&_ZN5S1C103v77Ev,
  (VTBL_ENTRY)&_ZN5S1C103v78Ev,
  (VTBL_ENTRY)&_ZN5S1C103v79Ev,
  (VTBL_ENTRY)&_ZN5S1C103v80Ev,
  (VTBL_ENTRY)&_ZN5S1C103v81Ev,
  (VTBL_ENTRY)&_ZN5S1C103v82Ev,
  (VTBL_ENTRY)&_ZN5S1C103v83Ev,
  (VTBL_ENTRY)&_ZN5S1C103v84Ev,
  (VTBL_ENTRY)&_ZN5S1C103v85Ev,
  (VTBL_ENTRY)&_ZN5S1C103v86Ev,
  (VTBL_ENTRY)&_ZN5S1C103v87Ev,
  (VTBL_ENTRY)&_ZN5S1C103v88Ev,
  (VTBL_ENTRY)&_ZN5S1C103v89Ev,
  (VTBL_ENTRY)&_ZN5S1C103v90Ev,
  (VTBL_ENTRY)&_ZN5S1C103v91Ev,
  (VTBL_ENTRY)&_ZN5S1C103v92Ev,
  (VTBL_ENTRY)&_ZN5S1C103v93Ev,
  (VTBL_ENTRY)&_ZN5S1C103v94Ev,
  (VTBL_ENTRY)&_ZN5S1C103v95Ev,
  (VTBL_ENTRY)&_ZN5S1C103v96Ev,
  (VTBL_ENTRY)&_ZN5S1C103v97Ev,
  (VTBL_ENTRY)&_ZN5S1C103v98Ev,
  (VTBL_ENTRY)&_ZN5S1C103v99Ev,
  (VTBL_ENTRY)&_ZN5S1C104v100Ev,
  (VTBL_ENTRY)&_ZN5S1C104v101Ev,
  (VTBL_ENTRY)&_ZN5S1C104v102Ev,
  (VTBL_ENTRY)&_ZN5S1C104v103Ev,
  (VTBL_ENTRY)&_ZN5S1C104v104Ev,
  (VTBL_ENTRY)&_ZN5S1C104v105Ev,
  (VTBL_ENTRY)&_ZN5S1C104v106Ev,
  (VTBL_ENTRY)&_ZN5S1C104v107Ev,
  (VTBL_ENTRY)&_ZN5S1C104v108Ev,
  (VTBL_ENTRY)&_ZN5S1C104v109Ev,
  (VTBL_ENTRY)&_ZN5S1C104v110Ev,
  (VTBL_ENTRY)&_ZN5S1C104v111Ev,
  (VTBL_ENTRY)&_ZN4S1C84v112Ev,
  (VTBL_ENTRY)&_ZN4S1C84v113Ev,
  (VTBL_ENTRY)&_ZN4S1C84v114Ev,
  (VTBL_ENTRY)&_ZN4S1C84v115Ev,
  (VTBL_ENTRY)&_ZN4S1C84v116Ev,
  (VTBL_ENTRY)&_ZN4S1C84v117Ev,
  (VTBL_ENTRY)&_ZN4S1C84v118Ev,
  (VTBL_ENTRY)&_ZN4S1C84v119Ev,
  (VTBL_ENTRY)&_ZN4S1C84v120Ev,
  (VTBL_ENTRY)&_ZN4S1C84v121Ev,
  (VTBL_ENTRY)&_ZN4S1C84v122Ev,
  (VTBL_ENTRY)&_ZN4S1C84v123Ev,
  (VTBL_ENTRY)&_ZN4S1C84v124Ev,
  (VTBL_ENTRY)&_ZN4S1C84v125Ev,
  (VTBL_ENTRY)&_ZN4S1C84v126Ev,
  (VTBL_ENTRY)&_ZN4S1C84v127Ev,
  (VTBL_ENTRY)&_ZN4S1C84v128Ev,
  (VTBL_ENTRY)&_ZN4S1C84v129Ev,
  (VTBL_ENTRY)&_ZN4S1C84v130Ev,
  (VTBL_ENTRY)&_ZN4S1C84v131Ev,
  (VTBL_ENTRY)&_ZN4S1C84v132Ev,
  (VTBL_ENTRY)&_ZN4S1C84v133Ev,
  (VTBL_ENTRY)&_ZN4S1C84v134Ev,
  (VTBL_ENTRY)&_ZN4S1C84v135Ev,
  (VTBL_ENTRY)&_ZN4S1C84v136Ev,
  (VTBL_ENTRY)&_ZN4S1C84v137Ev,
  (VTBL_ENTRY)&_ZN4S1C74v138Ev,
  (VTBL_ENTRY)&_ZN4S1C74v139Ev,
  (VTBL_ENTRY)&_ZN4S1C74v140Ev,
  (VTBL_ENTRY)&_ZN4S1C74v141Ev,
  (VTBL_ENTRY)&_ZN4S1C74v142Ev,
  (VTBL_ENTRY)&_ZN4S1C74v143Ev,
  (VTBL_ENTRY)&_ZN4S1C74v144Ev,
  (VTBL_ENTRY)&_ZN4S1C74v145Ev,
  (VTBL_ENTRY)&_ZN4S1C74v146Ev,
  (VTBL_ENTRY)&_ZN4S1C74v147Ev,
  (VTBL_ENTRY)&_ZN4S1C74v148Ev,
  (VTBL_ENTRY)&_ZN4S1C74v149Ev,
  (VTBL_ENTRY)&_ZN4S1C74v150Ev,
  (VTBL_ENTRY)&_ZN4S1C74v151Ev,
  (VTBL_ENTRY)&_ZN4S1C74v152Ev,
  (VTBL_ENTRY)&_ZN4S1C74v153Ev,
  (VTBL_ENTRY)&_ZN4S1C74v154Ev,
  (VTBL_ENTRY)&_ZN4S1C74v155Ev,
  (VTBL_ENTRY)&_ZN4S1C64v156Ev,
  (VTBL_ENTRY)&_ZN4S1C64v157Ev,
  (VTBL_ENTRY)&_ZN4S1C64v158Ev,
  (VTBL_ENTRY)&_ZN4S1C64v159Ev,
  (VTBL_ENTRY)&_ZN4S1C64v160Ev,
  (VTBL_ENTRY)&_ZN4S1C64v161Ev,
  (VTBL_ENTRY)&_ZN4S1C64v162Ev,
  (VTBL_ENTRY)&_ZN4S1C64v163Ev,
  (VTBL_ENTRY)&_ZN4S1C64v164Ev,
  (VTBL_ENTRY)&_ZN4S1C64v165Ev,
  (VTBL_ENTRY)&_ZN4S1C64v166Ev,
  (VTBL_ENTRY)&_ZN4S1C64v167Ev,
  (VTBL_ENTRY)&_ZN4S1C64v168Ev,
  (VTBL_ENTRY)&_ZN4S1C64v169Ev,
  (VTBL_ENTRY)&_ZN4S1C64v170Ev,
  (VTBL_ENTRY)&_ZN4S1C64v171Ev,
  (VTBL_ENTRY)&_ZN4S1C64v172Ev,
  (VTBL_ENTRY)&_ZN4S1C64v173Ev,
  (VTBL_ENTRY)&_ZN4S1C64v174Ev,
  (VTBL_ENTRY)&_ZN4S1C64v175Ev,
  (VTBL_ENTRY)&_ZN4S1C64v176Ev,
  (VTBL_ENTRY)&_ZN4S1C64v177Ev,
  (VTBL_ENTRY)&_ZN4S1C64v178Ev,
  (VTBL_ENTRY)&_ZN4S1C64v179Ev,
  (VTBL_ENTRY)&_ZN4S1C64v180Ev,
  (VTBL_ENTRY)&_ZN4S1C64v181Ev,
  (VTBL_ENTRY)&_ZN4S1C44v182Ev,
  (VTBL_ENTRY)&_ZN4S1C44v183Ev,
  (VTBL_ENTRY)&_ZN4S1C44v184Ev,
  (VTBL_ENTRY)&_ZN4S1C44v185Ev,
  (VTBL_ENTRY)&_ZN4S1C44v186Ev,
  (VTBL_ENTRY)&_ZN4S1C44v187Ev,
  (VTBL_ENTRY)&_ZN4S1C34v188Ev,
  (VTBL_ENTRY)&_ZN4S1C34v189Ev,
  (VTBL_ENTRY)&_ZN4S1C34v190Ev,
  (VTBL_ENTRY)&_ZN4S1C34v191Ev,
  (VTBL_ENTRY)&_ZN4S1C34v192Ev,
  (VTBL_ENTRY)&_ZN4S1C34v193Ev,
  (VTBL_ENTRY)&_ZN4S1C34v194Ev,
  (VTBL_ENTRY)&_ZN4S1C34v195Ev,
  (VTBL_ENTRY)&_ZN4S1C34v196Ev,
  (VTBL_ENTRY)&_ZN4S1C34v197Ev,
  (VTBL_ENTRY)&_ZN4S1C34v198Ev,
  (VTBL_ENTRY)&_ZN4S1C34v199Ev,
  (VTBL_ENTRY)&_ZN4S1C34v200Ev,
  (VTBL_ENTRY)&_ZN4S1C34v201Ev,
  (VTBL_ENTRY)&_ZN4S1C34v202Ev,
  (VTBL_ENTRY)&_ZN4S1C34v203Ev,
  (VTBL_ENTRY)&_ZN4S1C34v204Ev,
  (VTBL_ENTRY)&_ZN4S1C34v205Ev,
  (VTBL_ENTRY)&_ZN4S1C34v206Ev,
  (VTBL_ENTRY)&_ZN4S1C34v207Ev,
  (VTBL_ENTRY)&_ZN4S1C34v208Ev,
  (VTBL_ENTRY)&_ZN4S1C24v209Ev,
  (VTBL_ENTRY)&_ZN4S1C24v210Ev,
};
extern VTBL_ENTRY _ZTI4S1C2[];
extern  VTBL_ENTRY _ZTV4S1C2[];
Class_Descriptor cd_S1C2 = {  "S1C2", // class name
  bases_S1C2, 9,
  &(vtc_S1C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI4S1C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV4S1C2),210, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  9, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1C1  : S1C2 {
  virtual void  v1(); // _ZN4S1C12v1Ev
  virtual void  v2(); // _ZN4S1C12v2Ev
  virtual void  v3(); // _ZN4S1C12v3Ev
  virtual void  v4(); // _ZN4S1C12v4Ev
  ~S1C1(); // tgen
  S1C1(); // tgen
};
//SIG(1 S1C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ BC9{ BC10{ BC11{ vd m Fp Fi} 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 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 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} v1 v2 v3 v4}


void  S1C1 ::v1(){vfunc_called(this, "_ZN4S1C12v1Ev");}
void  S1C1 ::v2(){vfunc_called(this, "_ZN4S1C12v2Ev");}
void  S1C1 ::v3(){vfunc_called(this, "_ZN4S1C12v3Ev");}
void  S1C1 ::v4(){vfunc_called(this, "_ZN4S1C12v4Ev");}
S1C1 ::~S1C1(){ note_dtor("S1C1", this);} // tgen
S1C1 ::S1C1(){ note_ctor("S1C1", this);} // tgen

static void Test_S1C1()
{
  extern Class_Descriptor cd_S1C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1C1, buf);
    S1C1 *dp, &lv = *(dp=new (buf) S1C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S1C10*)(S1C9*)(S1C8*)(S1C7*)(S1C6*)(S1C5*)(S1C4*)(S1C3*)(S1C2*), 0, "S1C1");
    check_base_class_offset(lv, (S1C10*)(S1C9*)(S1C8*)(S1C7*)(S1C6*)(S1C5*)(S1C4*)(S1C3*)(S1C2*), 0, "S1C1");
    check_base_class_offset(lv, (S1C9*)(S1C8*)(S1C7*)(S1C6*)(S1C5*)(S1C4*)(S1C3*)(S1C2*), 0, "S1C1");
    check_base_class_offset(lv, (S1C8*)(S1C7*)(S1C6*)(S1C5*)(S1C4*)(S1C3*)(S1C2*), 0, "S1C1");
    check_base_class_offset(lv, (S1C7*)(S1C6*)(S1C5*)(S1C4*)(S1C3*)(S1C2*), 0, "S1C1");
    check_base_class_offset(lv, (S1C6*)(S1C5*)(S1C4*)(S1C3*)(S1C2*), 0, "S1C1");
    check_base_class_offset(lv, (S1C5*)(S1C4*)(S1C3*)(S1C2*), 0, "S1C1");
    check_base_class_offset(lv, (S1C4*)(S1C3*)(S1C2*), 0, "S1C1");
    check_base_class_offset(lv, (S1C3*)(S1C2*), 0, "S1C1");
    check_base_class_offset(lv, (S1C2*), 0, "S1C1");
    test_class_info(&lv, &cd_S1C1);
    dp->~S1C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1C1(Test_S1C1, "S1C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN4S1C1C1Ev();
extern void _ZN4S1C1D1Ev();
Name_Map name_map_S1C1[] = {
  NSPAIR(_ZN4S1C1C1Ev),
  NSPAIR(_ZN4S1C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1C10;
extern VTBL_ENTRY _ZTI5S1C10[];
extern  VTBL_ENTRY _ZTV5S1C10[];
extern Class_Descriptor cd_S1C9;
extern VTBL_ENTRY _ZTI4S1C9[];
extern  VTBL_ENTRY _ZTV4S1C9[];
extern Class_Descriptor cd_S1C8;
extern VTBL_ENTRY _ZTI4S1C8[];
extern  VTBL_ENTRY _ZTV4S1C8[];
extern Class_Descriptor cd_S1C7;
extern VTBL_ENTRY _ZTI4S1C7[];
extern  VTBL_ENTRY _ZTV4S1C7[];
extern Class_Descriptor cd_S1C6;
extern VTBL_ENTRY _ZTI4S1C6[];
extern  VTBL_ENTRY _ZTV4S1C6[];
extern Class_Descriptor cd_S1C5;
extern VTBL_ENTRY _ZTI4S1C5[];
extern  VTBL_ENTRY _ZTV4S1C5[];
extern Class_Descriptor cd_S1C4;
extern VTBL_ENTRY _ZTI4S1C4[];
extern  VTBL_ENTRY _ZTV4S1C4[];
extern Class_Descriptor cd_S1C3;
extern VTBL_ENTRY _ZTI4S1C3[];
extern  VTBL_ENTRY _ZTV4S1C3[];
extern Class_Descriptor cd_S1C2;
extern VTBL_ENTRY _ZTI4S1C2[];
extern  VTBL_ENTRY _ZTV4S1C2[];
static Base_Class bases_S1C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI4S1C1[];
extern void _ZN4S1C1D1Ev();
extern void _ZN4S1C1D0Ev();
extern void _ZN5S1C102v5Ev();
extern void _ZN5S1C102v6Ev();
extern void _ZN5S1C102v7Ev();
extern void _ZN5S1C102v8Ev();
extern void _ZN5S1C102v9Ev();
extern void _ZN5S1C103v10Ev();
extern void _ZN5S1C103v11Ev();
extern void _ZN5S1C103v12Ev();
extern void _ZN5S1C103v13Ev();
extern void _ZN5S1C103v14Ev();
extern void _ZN5S1C103v15Ev();
extern void _ZN5S1C103v16Ev();
extern void _ZN5S1C103v17Ev();
extern void _ZN5S1C103v18Ev();
extern void _ZN5S1C103v19Ev();
extern void _ZN5S1C103v20Ev();
extern void _ZN5S1C103v21Ev();
extern void _ZN5S1C103v22Ev();
extern void _ZN5S1C103v23Ev();
extern void _ZN5S1C103v24Ev();
extern void _ZN5S1C103v25Ev();
extern void _ZN5S1C103v26Ev();
extern void _ZN5S1C103v27Ev();
extern void _ZN5S1C103v28Ev();
extern void _ZN5S1C103v29Ev();
extern void _ZN5S1C103v30Ev();
extern void _ZN5S1C103v31Ev();
extern void _ZN5S1C103v32Ev();
extern void _ZN5S1C103v33Ev();
extern void _ZN5S1C103v34Ev();
extern void _ZN5S1C103v35Ev();
extern void _ZN5S1C103v36Ev();
extern void _ZN5S1C103v37Ev();
extern void _ZN5S1C103v38Ev();
extern void _ZN5S1C103v39Ev();
extern void _ZN5S1C103v40Ev();
extern void _ZN5S1C103v41Ev();
extern void _ZN5S1C103v42Ev();
extern void _ZN5S1C103v43Ev();
extern void _ZN5S1C103v44Ev();
extern void _ZN5S1C103v45Ev();
extern void _ZN5S1C103v46Ev();
extern void _ZN5S1C103v47Ev();
extern void _ZN5S1C103v48Ev();
extern void _ZN5S1C103v49Ev();
extern void _ZN5S1C103v50Ev();
extern void _ZN5S1C103v51Ev();
extern void _ZN5S1C103v52Ev();
extern void _ZN5S1C103v53Ev();
extern void _ZN5S1C103v54Ev();
extern void _ZN5S1C103v55Ev();
extern void _ZN5S1C103v56Ev();
extern void _ZN5S1C103v57Ev();
extern void _ZN5S1C103v58Ev();
extern void _ZN5S1C103v59Ev();
extern void _ZN5S1C103v60Ev();
extern void _ZN5S1C103v61Ev();
extern void _ZN5S1C103v62Ev();
extern void _ZN5S1C103v63Ev();
extern void _ZN5S1C103v64Ev();
extern void _ZN5S1C103v65Ev();
extern void _ZN5S1C103v66Ev();
extern void _ZN5S1C103v67Ev();
extern void _ZN5S1C103v68Ev();
extern void _ZN5S1C103v69Ev();
extern void _ZN5S1C103v70Ev();
extern void _ZN5S1C103v71Ev();
extern void _ZN5S1C103v72Ev();
extern void _ZN5S1C103v73Ev();
extern void _ZN5S1C103v74Ev();
extern void _ZN5S1C103v75Ev();
extern void _ZN5S1C103v76Ev();
extern void _ZN5S1C103v77Ev();
extern void _ZN5S1C103v78Ev();
extern void _ZN5S1C103v79Ev();
extern void _ZN5S1C103v80Ev();
extern void _ZN5S1C103v81Ev();
extern void _ZN5S1C103v82Ev();
extern void _ZN5S1C103v83Ev();
extern void _ZN5S1C103v84Ev();
extern void _ZN5S1C103v85Ev();
extern void _ZN5S1C103v86Ev();
extern void _ZN5S1C103v87Ev();
extern void _ZN5S1C103v88Ev();
extern void _ZN5S1C103v89Ev();
extern void _ZN5S1C103v90Ev();
extern void _ZN5S1C103v91Ev();
extern void _ZN5S1C103v92Ev();
extern void _ZN5S1C103v93Ev();
extern void _ZN5S1C103v94Ev();
extern void _ZN5S1C103v95Ev();
extern void _ZN5S1C103v96Ev();
extern void _ZN5S1C103v97Ev();
extern void _ZN5S1C103v98Ev();
extern void _ZN5S1C103v99Ev();
extern void _ZN5S1C104v100Ev();
extern void _ZN5S1C104v101Ev();
extern void _ZN5S1C104v102Ev();
extern void _ZN5S1C104v103Ev();
extern void _ZN5S1C104v104Ev();
extern void _ZN5S1C104v105Ev();
extern void _ZN5S1C104v106Ev();
extern void _ZN5S1C104v107Ev();
extern void _ZN5S1C104v108Ev();
extern void _ZN5S1C104v109Ev();
extern void _ZN5S1C104v110Ev();
extern void _ZN5S1C104v111Ev();
extern void _ZN4S1C84v112Ev();
extern void _ZN4S1C84v113Ev();
extern void _ZN4S1C84v114Ev();
extern void _ZN4S1C84v115Ev();
extern void _ZN4S1C84v116Ev();
extern void _ZN4S1C84v117Ev();
extern void _ZN4S1C84v118Ev();
extern void _ZN4S1C84v119Ev();
extern void _ZN4S1C84v120Ev();
extern void _ZN4S1C84v121Ev();
extern void _ZN4S1C84v122Ev();
extern void _ZN4S1C84v123Ev();
extern void _ZN4S1C84v124Ev();
extern void _ZN4S1C84v125Ev();
extern void _ZN4S1C84v126Ev();
extern void _ZN4S1C84v127Ev();
extern void _ZN4S1C84v128Ev();
extern void _ZN4S1C84v129Ev();
extern void _ZN4S1C84v130Ev();
extern void _ZN4S1C84v131Ev();
extern void _ZN4S1C84v132Ev();
extern void _ZN4S1C84v133Ev();
extern void _ZN4S1C84v134Ev();
extern void _ZN4S1C84v135Ev();
extern void _ZN4S1C84v136Ev();
extern void _ZN4S1C84v137Ev();
extern void _ZN4S1C74v138Ev();
extern void _ZN4S1C74v139Ev();
extern void _ZN4S1C74v140Ev();
extern void _ZN4S1C74v141Ev();
extern void _ZN4S1C74v142Ev();
extern void _ZN4S1C74v143Ev();
extern void _ZN4S1C74v144Ev();
extern void _ZN4S1C74v145Ev();
extern void _ZN4S1C74v146Ev();
extern void _ZN4S1C74v147Ev();
extern void _ZN4S1C74v148Ev();
extern void _ZN4S1C74v149Ev();
extern void _ZN4S1C74v150Ev();
extern void _ZN4S1C74v151Ev();
extern void _ZN4S1C74v152Ev();
extern void _ZN4S1C74v153Ev();
extern void _ZN4S1C74v154Ev();
extern void _ZN4S1C74v155Ev();
extern void _ZN4S1C64v156Ev();
extern void _ZN4S1C64v157Ev();
extern void _ZN4S1C64v158Ev();
extern void _ZN4S1C64v159Ev();
extern void _ZN4S1C64v160Ev();
extern void _ZN4S1C64v161Ev();
extern void _ZN4S1C64v162Ev();
extern void _ZN4S1C64v163Ev();
extern void _ZN4S1C64v164Ev();
extern void _ZN4S1C64v165Ev();
extern void _ZN4S1C64v166Ev();
extern void _ZN4S1C64v167Ev();
extern void _ZN4S1C64v168Ev();
extern void _ZN4S1C64v169Ev();
extern void _ZN4S1C64v170Ev();
extern void _ZN4S1C64v171Ev();
extern void _ZN4S1C64v172Ev();
extern void _ZN4S1C64v173Ev();
extern void _ZN4S1C64v174Ev();
extern void _ZN4S1C64v175Ev();
extern void _ZN4S1C64v176Ev();
extern void _ZN4S1C64v177Ev();
extern void _ZN4S1C64v178Ev();
extern void _ZN4S1C64v179Ev();
extern void _ZN4S1C64v180Ev();
extern void _ZN4S1C64v181Ev();
extern void _ZN4S1C44v182Ev();
extern void _ZN4S1C44v183Ev();
extern void _ZN4S1C44v184Ev();
extern void _ZN4S1C44v185Ev();
extern void _ZN4S1C44v186Ev();
extern void _ZN4S1C44v187Ev();
extern void _ZN4S1C34v188Ev();
extern void _ZN4S1C34v189Ev();
extern void _ZN4S1C34v190Ev();
extern void _ZN4S1C34v191Ev();
extern void _ZN4S1C34v192Ev();
extern void _ZN4S1C34v193Ev();
extern void _ZN4S1C34v194Ev();
extern void _ZN4S1C34v195Ev();
extern void _ZN4S1C34v196Ev();
extern void _ZN4S1C34v197Ev();
extern void _ZN4S1C34v198Ev();
extern void _ZN4S1C34v199Ev();
extern void _ZN4S1C34v200Ev();
extern void _ZN4S1C34v201Ev();
extern void _ZN4S1C34v202Ev();
extern void _ZN4S1C34v203Ev();
extern void _ZN4S1C34v204Ev();
extern void _ZN4S1C34v205Ev();
extern void _ZN4S1C34v206Ev();
extern void _ZN4S1C34v207Ev();
extern void _ZN4S1C34v208Ev();
extern void _ZN4S1C24v209Ev();
extern void _ZN4S1C24v210Ev();
extern void _ZN4S1C12v1Ev();
extern void _ZN4S1C12v2Ev();
extern void _ZN4S1C12v3Ev();
extern void _ZN4S1C12v4Ev();
static  VTBL_ENTRY vtc_S1C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI4S1C1[0]),
  (VTBL_ENTRY)&_ZN4S1C1D1Ev,
  (VTBL_ENTRY)&_ZN4S1C1D0Ev,
  (VTBL_ENTRY)&_ZN5S1C102v5Ev,
  (VTBL_ENTRY)&_ZN5S1C102v6Ev,
  (VTBL_ENTRY)&_ZN5S1C102v7Ev,
  (VTBL_ENTRY)&_ZN5S1C102v8Ev,
  (VTBL_ENTRY)&_ZN5S1C102v9Ev,
  (VTBL_ENTRY)&_ZN5S1C103v10Ev,
  (VTBL_ENTRY)&_ZN5S1C103v11Ev,
  (VTBL_ENTRY)&_ZN5S1C103v12Ev,
  (VTBL_ENTRY)&_ZN5S1C103v13Ev,
  (VTBL_ENTRY)&_ZN5S1C103v14Ev,
  (VTBL_ENTRY)&_ZN5S1C103v15Ev,
  (VTBL_ENTRY)&_ZN5S1C103v16Ev,
  (VTBL_ENTRY)&_ZN5S1C103v17Ev,
  (VTBL_ENTRY)&_ZN5S1C103v18Ev,
  (VTBL_ENTRY)&_ZN5S1C103v19Ev,
  (VTBL_ENTRY)&_ZN5S1C103v20Ev,
  (VTBL_ENTRY)&_ZN5S1C103v21Ev,
  (VTBL_ENTRY)&_ZN5S1C103v22Ev,
  (VTBL_ENTRY)&_ZN5S1C103v23Ev,
  (VTBL_ENTRY)&_ZN5S1C103v24Ev,
  (VTBL_ENTRY)&_ZN5S1C103v25Ev,
  (VTBL_ENTRY)&_ZN5S1C103v26Ev,
  (VTBL_ENTRY)&_ZN5S1C103v27Ev,
  (VTBL_ENTRY)&_ZN5S1C103v28Ev,
  (VTBL_ENTRY)&_ZN5S1C103v29Ev,
  (VTBL_ENTRY)&_ZN5S1C103v30Ev,
  (VTBL_ENTRY)&_ZN5S1C103v31Ev,
  (VTBL_ENTRY)&_ZN5S1C103v32Ev,
  (VTBL_ENTRY)&_ZN5S1C103v33Ev,
  (VTBL_ENTRY)&_ZN5S1C103v34Ev,
  (VTBL_ENTRY)&_ZN5S1C103v35Ev,
  (VTBL_ENTRY)&_ZN5S1C103v36Ev,
  (VTBL_ENTRY)&_ZN5S1C103v37Ev,
  (VTBL_ENTRY)&_ZN5S1C103v38Ev,
  (VTBL_ENTRY)&_ZN5S1C103v39Ev,
  (VTBL_ENTRY)&_ZN5S1C103v40Ev,
  (VTBL_ENTRY)&_ZN5S1C103v41Ev,
  (VTBL_ENTRY)&_ZN5S1C103v42Ev,
  (VTBL_ENTRY)&_ZN5S1C103v43Ev,
  (VTBL_ENTRY)&_ZN5S1C103v44Ev,
  (VTBL_ENTRY)&_ZN5S1C103v45Ev,
  (VTBL_ENTRY)&_ZN5S1C103v46Ev,
  (VTBL_ENTRY)&_ZN5S1C103v47Ev,
  (VTBL_ENTRY)&_ZN5S1C103v48Ev,
  (VTBL_ENTRY)&_ZN5S1C103v49Ev,
  (VTBL_ENTRY)&_ZN5S1C103v50Ev,
  (VTBL_ENTRY)&_ZN5S1C103v51Ev,
  (VTBL_ENTRY)&_ZN5S1C103v52Ev,
  (VTBL_ENTRY)&_ZN5S1C103v53Ev,
  (VTBL_ENTRY)&_ZN5S1C103v54Ev,
  (VTBL_ENTRY)&_ZN5S1C103v55Ev,
  (VTBL_ENTRY)&_ZN5S1C103v56Ev,
  (VTBL_ENTRY)&_ZN5S1C103v57Ev,
  (VTBL_ENTRY)&_ZN5S1C103v58Ev,
  (VTBL_ENTRY)&_ZN5S1C103v59Ev,
  (VTBL_ENTRY)&_ZN5S1C103v60Ev,
  (VTBL_ENTRY)&_ZN5S1C103v61Ev,
  (VTBL_ENTRY)&_ZN5S1C103v62Ev,
  (VTBL_ENTRY)&_ZN5S1C103v63Ev,
  (VTBL_ENTRY)&_ZN5S1C103v64Ev,
  (VTBL_ENTRY)&_ZN5S1C103v65Ev,
  (VTBL_ENTRY)&_ZN5S1C103v66Ev,
  (VTBL_ENTRY)&_ZN5S1C103v67Ev,
  (VTBL_ENTRY)&_ZN5S1C103v68Ev,
  (VTBL_ENTRY)&_ZN5S1C103v69Ev,
  (VTBL_ENTRY)&_ZN5S1C103v70Ev,
  (VTBL_ENTRY)&_ZN5S1C103v71Ev,
  (VTBL_ENTRY)&_ZN5S1C103v72Ev,
  (VTBL_ENTRY)&_ZN5S1C103v73Ev,
  (VTBL_ENTRY)&_ZN5S1C103v74Ev,
  (VTBL_ENTRY)&_ZN5S1C103v75Ev,
  (VTBL_ENTRY)&_ZN5S1C103v76Ev,
  (VTBL_ENTRY)&_ZN5S1C103v77Ev,
  (VTBL_ENTRY)&_ZN5S1C103v78Ev,
  (VTBL_ENTRY)&_ZN5S1C103v79Ev,
  (VTBL_ENTRY)&_ZN5S1C103v80Ev,
  (VTBL_ENTRY)&_ZN5S1C103v81Ev,
  (VTBL_ENTRY)&_ZN5S1C103v82Ev,
  (VTBL_ENTRY)&_ZN5S1C103v83Ev,
  (VTBL_ENTRY)&_ZN5S1C103v84Ev,
  (VTBL_ENTRY)&_ZN5S1C103v85Ev,
  (VTBL_ENTRY)&_ZN5S1C103v86Ev,
  (VTBL_ENTRY)&_ZN5S1C103v87Ev,
  (VTBL_ENTRY)&_ZN5S1C103v88Ev,
  (VTBL_ENTRY)&_ZN5S1C103v89Ev,
  (VTBL_ENTRY)&_ZN5S1C103v90Ev,
  (VTBL_ENTRY)&_ZN5S1C103v91Ev,
  (VTBL_ENTRY)&_ZN5S1C103v92Ev,
  (VTBL_ENTRY)&_ZN5S1C103v93Ev,
  (VTBL_ENTRY)&_ZN5S1C103v94Ev,
  (VTBL_ENTRY)&_ZN5S1C103v95Ev,
  (VTBL_ENTRY)&_ZN5S1C103v96Ev,
  (VTBL_ENTRY)&_ZN5S1C103v97Ev,
  (VTBL_ENTRY)&_ZN5S1C103v98Ev,
  (VTBL_ENTRY)&_ZN5S1C103v99Ev,
  (VTBL_ENTRY)&_ZN5S1C104v100Ev,
  (VTBL_ENTRY)&_ZN5S1C104v101Ev,
  (VTBL_ENTRY)&_ZN5S1C104v102Ev,
  (VTBL_ENTRY)&_ZN5S1C104v103Ev,
  (VTBL_ENTRY)&_ZN5S1C104v104Ev,
  (VTBL_ENTRY)&_ZN5S1C104v105Ev,
  (VTBL_ENTRY)&_ZN5S1C104v106Ev,
  (VTBL_ENTRY)&_ZN5S1C104v107Ev,
  (VTBL_ENTRY)&_ZN5S1C104v108Ev,
  (VTBL_ENTRY)&_ZN5S1C104v109Ev,
  (VTBL_ENTRY)&_ZN5S1C104v110Ev,
  (VTBL_ENTRY)&_ZN5S1C104v111Ev,
  (VTBL_ENTRY)&_ZN4S1C84v112Ev,
  (VTBL_ENTRY)&_ZN4S1C84v113Ev,
  (VTBL_ENTRY)&_ZN4S1C84v114Ev,
  (VTBL_ENTRY)&_ZN4S1C84v115Ev,
  (VTBL_ENTRY)&_ZN4S1C84v116Ev,
  (VTBL_ENTRY)&_ZN4S1C84v117Ev,
  (VTBL_ENTRY)&_ZN4S1C84v118Ev,
  (VTBL_ENTRY)&_ZN4S1C84v119Ev,
  (VTBL_ENTRY)&_ZN4S1C84v120Ev,
  (VTBL_ENTRY)&_ZN4S1C84v121Ev,
  (VTBL_ENTRY)&_ZN4S1C84v122Ev,
  (VTBL_ENTRY)&_ZN4S1C84v123Ev,
  (VTBL_ENTRY)&_ZN4S1C84v124Ev,
  (VTBL_ENTRY)&_ZN4S1C84v125Ev,
  (VTBL_ENTRY)&_ZN4S1C84v126Ev,
  (VTBL_ENTRY)&_ZN4S1C84v127Ev,
  (VTBL_ENTRY)&_ZN4S1C84v128Ev,
  (VTBL_ENTRY)&_ZN4S1C84v129Ev,
  (VTBL_ENTRY)&_ZN4S1C84v130Ev,
  (VTBL_ENTRY)&_ZN4S1C84v131Ev,
  (VTBL_ENTRY)&_ZN4S1C84v132Ev,
  (VTBL_ENTRY)&_ZN4S1C84v133Ev,
  (VTBL_ENTRY)&_ZN4S1C84v134Ev,
  (VTBL_ENTRY)&_ZN4S1C84v135Ev,
  (VTBL_ENTRY)&_ZN4S1C84v136Ev,
  (VTBL_ENTRY)&_ZN4S1C84v137Ev,
  (VTBL_ENTRY)&_ZN4S1C74v138Ev,
  (VTBL_ENTRY)&_ZN4S1C74v139Ev,
  (VTBL_ENTRY)&_ZN4S1C74v140Ev,
  (VTBL_ENTRY)&_ZN4S1C74v141Ev,
  (VTBL_ENTRY)&_ZN4S1C74v142Ev,
  (VTBL_ENTRY)&_ZN4S1C74v143Ev,
  (VTBL_ENTRY)&_ZN4S1C74v144Ev,
  (VTBL_ENTRY)&_ZN4S1C74v145Ev,
  (VTBL_ENTRY)&_ZN4S1C74v146Ev,
  (VTBL_ENTRY)&_ZN4S1C74v147Ev,
  (VTBL_ENTRY)&_ZN4S1C74v148Ev,
  (VTBL_ENTRY)&_ZN4S1C74v149Ev,
  (VTBL_ENTRY)&_ZN4S1C74v150Ev,
  (VTBL_ENTRY)&_ZN4S1C74v151Ev,
  (VTBL_ENTRY)&_ZN4S1C74v152Ev,
  (VTBL_ENTRY)&_ZN4S1C74v153Ev,
  (VTBL_ENTRY)&_ZN4S1C74v154Ev,
  (VTBL_ENTRY)&_ZN4S1C74v155Ev,
  (VTBL_ENTRY)&_ZN4S1C64v156Ev,
  (VTBL_ENTRY)&_ZN4S1C64v157Ev,
  (VTBL_ENTRY)&_ZN4S1C64v158Ev,
  (VTBL_ENTRY)&_ZN4S1C64v159Ev,
  (VTBL_ENTRY)&_ZN4S1C64v160Ev,
  (VTBL_ENTRY)&_ZN4S1C64v161Ev,
  (VTBL_ENTRY)&_ZN4S1C64v162Ev,
  (VTBL_ENTRY)&_ZN4S1C64v163Ev,
  (VTBL_ENTRY)&_ZN4S1C64v164Ev,
  (VTBL_ENTRY)&_ZN4S1C64v165Ev,
  (VTBL_ENTRY)&_ZN4S1C64v166Ev,
  (VTBL_ENTRY)&_ZN4S1C64v167Ev,
  (VTBL_ENTRY)&_ZN4S1C64v168Ev,
  (VTBL_ENTRY)&_ZN4S1C64v169Ev,
  (VTBL_ENTRY)&_ZN4S1C64v170Ev,
  (VTBL_ENTRY)&_ZN4S1C64v171Ev,
  (VTBL_ENTRY)&_ZN4S1C64v172Ev,
  (VTBL_ENTRY)&_ZN4S1C64v173Ev,
  (VTBL_ENTRY)&_ZN4S1C64v174Ev,
  (VTBL_ENTRY)&_ZN4S1C64v175Ev,
  (VTBL_ENTRY)&_ZN4S1C64v176Ev,
  (VTBL_ENTRY)&_ZN4S1C64v177Ev,
  (VTBL_ENTRY)&_ZN4S1C64v178Ev,
  (VTBL_ENTRY)&_ZN4S1C64v179Ev,
  (VTBL_ENTRY)&_ZN4S1C64v180Ev,
  (VTBL_ENTRY)&_ZN4S1C64v181Ev,
  (VTBL_ENTRY)&_ZN4S1C44v182Ev,
  (VTBL_ENTRY)&_ZN4S1C44v183Ev,
  (VTBL_ENTRY)&_ZN4S1C44v184Ev,
  (VTBL_ENTRY)&_ZN4S1C44v185Ev,
  (VTBL_ENTRY)&_ZN4S1C44v186Ev,
  (VTBL_ENTRY)&_ZN4S1C44v187Ev,
  (VTBL_ENTRY)&_ZN4S1C34v188Ev,
  (VTBL_ENTRY)&_ZN4S1C34v189Ev,
  (VTBL_ENTRY)&_ZN4S1C34v190Ev,
  (VTBL_ENTRY)&_ZN4S1C34v191Ev,
  (VTBL_ENTRY)&_ZN4S1C34v192Ev,
  (VTBL_ENTRY)&_ZN4S1C34v193Ev,
  (VTBL_ENTRY)&_ZN4S1C34v194Ev,
  (VTBL_ENTRY)&_ZN4S1C34v195Ev,
  (VTBL_ENTRY)&_ZN4S1C34v196Ev,
  (VTBL_ENTRY)&_ZN4S1C34v197Ev,
  (VTBL_ENTRY)&_ZN4S1C34v198Ev,
  (VTBL_ENTRY)&_ZN4S1C34v199Ev,
  (VTBL_ENTRY)&_ZN4S1C34v200Ev,
  (VTBL_ENTRY)&_ZN4S1C34v201Ev,
  (VTBL_ENTRY)&_ZN4S1C34v202Ev,
  (VTBL_ENTRY)&_ZN4S1C34v203Ev,
  (VTBL_ENTRY)&_ZN4S1C34v204Ev,
  (VTBL_ENTRY)&_ZN4S1C34v205Ev,
  (VTBL_ENTRY)&_ZN4S1C34v206Ev,
  (VTBL_ENTRY)&_ZN4S1C34v207Ev,
  (VTBL_ENTRY)&_ZN4S1C34v208Ev,
  (VTBL_ENTRY)&_ZN4S1C24v209Ev,
  (VTBL_ENTRY)&_ZN4S1C24v210Ev,
  (VTBL_ENTRY)&_ZN4S1C12v1Ev,
  (VTBL_ENTRY)&_ZN4S1C12v2Ev,
  (VTBL_ENTRY)&_ZN4S1C12v3Ev,
  (VTBL_ENTRY)&_ZN4S1C12v4Ev,
};
extern VTBL_ENTRY _ZTI4S1C1[];
extern  VTBL_ENTRY _ZTV4S1C1[];
Class_Descriptor cd_S1C1 = {  "S1C1", // class name
  bases_S1C1, 10,
  &(vtc_S1C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI4S1C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV4S1C1),214, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  10, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7C9  : S1C11_nt {
  virtual void  v5(); // _ZN4S7C92v5Ev
  virtual void  v6(); // _ZN4S7C92v6Ev
  virtual void  v7(); // _ZN4S7C92v7Ev
  virtual void  v8(); // _ZN4S7C92v8Ev
  virtual void  v9(); // _ZN4S7C92v9Ev
  virtual void  v10(); // _ZN4S7C93v10Ev
  virtual void  v11(); // _ZN4S7C93v11Ev
  virtual void  v12(); // _ZN4S7C93v12Ev
  virtual void  v13(); // _ZN4S7C93v13Ev
  virtual void  v14(); // _ZN4S7C93v14Ev
  virtual void  v15(); // _ZN4S7C93v15Ev
  virtual void  v16(); // _ZN4S7C93v16Ev
  virtual void  v17(); // _ZN4S7C93v17Ev
  virtual void  v18(); // _ZN4S7C93v18Ev
  virtual void  v19(); // _ZN4S7C93v19Ev
  virtual void  v20(); // _ZN4S7C93v20Ev
  virtual void  v21(); // _ZN4S7C93v21Ev
  virtual void  v22(); // _ZN4S7C93v22Ev
  virtual void  v23(); // _ZN4S7C93v23Ev
  virtual void  v24(); // _ZN4S7C93v24Ev
  virtual void  v25(); // _ZN4S7C93v25Ev
  virtual void  v26(); // _ZN4S7C93v26Ev
  virtual void  v27(); // _ZN4S7C93v27Ev
  virtual void  v28(); // _ZN4S7C93v28Ev
  virtual void  v29(); // _ZN4S7C93v29Ev
  virtual void  v30(); // _ZN4S7C93v30Ev
  virtual void  v31(); // _ZN4S7C93v31Ev
  virtual void  v32(); // _ZN4S7C93v32Ev
  virtual void  v33(); // _ZN4S7C93v33Ev
  virtual void  v34(); // _ZN4S7C93v34Ev
  virtual void  v35(); // _ZN4S7C93v35Ev
  virtual void  v36(); // _ZN4S7C93v36Ev
  virtual void  v37(); // _ZN4S7C93v37Ev
  virtual void  v38(); // _ZN4S7C93v38Ev
  virtual void  v39(); // _ZN4S7C93v39Ev
  virtual void  v40(); // _ZN4S7C93v40Ev
  virtual void  v41(); // _ZN4S7C93v41Ev
  virtual void  v42(); // _ZN4S7C93v42Ev
  virtual void  v43(); // _ZN4S7C93v43Ev
  virtual void  v44(); // _ZN4S7C93v44Ev
  virtual void  v45(); // _ZN4S7C93v45Ev
  virtual void  v46(); // _ZN4S7C93v46Ev
  virtual void  v47(); // _ZN4S7C93v47Ev
  virtual void  v48(); // _ZN4S7C93v48Ev
  virtual void  v49(); // _ZN4S7C93v49Ev
  virtual void  v50(); // _ZN4S7C93v50Ev
  virtual void  v51(); // _ZN4S7C93v51Ev
  virtual void  v52(); // _ZN4S7C93v52Ev
  virtual void  v53(); // _ZN4S7C93v53Ev
  virtual void  v54(); // _ZN4S7C93v54Ev
  virtual void  v55(); // _ZN4S7C93v55Ev
  virtual void  v56(); // _ZN4S7C93v56Ev
  virtual void  v57(); // _ZN4S7C93v57Ev
  virtual void  v58(); // _ZN4S7C93v58Ev
  virtual void  v59(); // _ZN4S7C93v59Ev
  virtual void  v60(); // _ZN4S7C93v60Ev
  virtual void  v61(); // _ZN4S7C93v61Ev
  virtual void  v62(); // _ZN4S7C93v62Ev
  virtual void  v63(); // _ZN4S7C93v63Ev
  virtual void  v64(); // _ZN4S7C93v64Ev
  virtual void  v65(); // _ZN4S7C93v65Ev
  virtual void  v66(); // _ZN4S7C93v66Ev
  virtual void  v67(); // _ZN4S7C93v67Ev
  virtual void  v68(); // _ZN4S7C93v68Ev
  virtual void  v69(); // _ZN4S7C93v69Ev
  virtual void  v70(); // _ZN4S7C93v70Ev
  virtual void  v71(); // _ZN4S7C93v71Ev
  virtual void  v72(); // _ZN4S7C93v72Ev
  virtual void  v73(); // _ZN4S7C93v73Ev
  virtual void  v74(); // _ZN4S7C93v74Ev
  virtual void  v75(); // _ZN4S7C93v75Ev
  virtual void  v76(); // _ZN4S7C93v76Ev
  virtual void  v77(); // _ZN4S7C93v77Ev
  virtual void  v78(); // _ZN4S7C93v78Ev
  virtual void  v79(); // _ZN4S7C93v79Ev
  virtual void  v80(); // _ZN4S7C93v80Ev
  virtual void  v81(); // _ZN4S7C93v81Ev
  virtual void  v82(); // _ZN4S7C93v82Ev
  virtual void  v83(); // _ZN4S7C93v83Ev
  virtual void  v84(); // _ZN4S7C93v84Ev
  virtual void  v85(); // _ZN4S7C93v85Ev
  virtual void  v86(); // _ZN4S7C93v86Ev
  virtual void  v87(); // _ZN4S7C93v87Ev
  virtual void  v88(); // _ZN4S7C93v88Ev
  virtual void  v89(); // _ZN4S7C93v89Ev
  virtual void  v90(); // _ZN4S7C93v90Ev
  virtual void  v91(); // _ZN4S7C93v91Ev
  virtual void  v92(); // _ZN4S7C93v92Ev
  virtual void  v93(); // _ZN4S7C93v93Ev
  virtual void  v94(); // _ZN4S7C93v94Ev
  virtual void  v95(); // _ZN4S7C93v95Ev
  virtual void  v96(); // _ZN4S7C93v96Ev
  virtual void  v97(); // _ZN4S7C93v97Ev
  virtual void  v98(); // _ZN4S7C93v98Ev
  virtual void  v99(); // _ZN4S7C93v99Ev
  virtual void  v100(); // _ZN4S7C94v100Ev
  virtual void  v101(); // _ZN4S7C94v101Ev
  virtual void  v102(); // _ZN4S7C94v102Ev
  virtual void  v103(); // _ZN4S7C94v103Ev
  virtual void  v104(); // _ZN4S7C94v104Ev
  virtual void  v105(); // _ZN4S7C94v105Ev
  virtual void  v106(); // _ZN4S7C94v106Ev
  virtual void  v107(); // _ZN4S7C94v107Ev
  virtual void  v108(); // _ZN4S7C94v108Ev
  virtual void  v109(); // _ZN4S7C94v109Ev
  virtual void  v110(); // _ZN4S7C94v110Ev
  virtual void  v111(); // _ZN4S7C94v111Ev
  ~S7C9(); // tgen
  S7C9(); // tgen
};
//SIG(-1 S7C9) C1{ BC2{ vd m Fp Fi} 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 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}


void  S7C9 ::v5(){vfunc_called(this, "_ZN4S7C92v5Ev");}
void  S7C9 ::v6(){vfunc_called(this, "_ZN4S7C92v6Ev");}
void  S7C9 ::v7(){vfunc_called(this, "_ZN4S7C92v7Ev");}
void  S7C9 ::v8(){vfunc_called(this, "_ZN4S7C92v8Ev");}
void  S7C9 ::v9(){vfunc_called(this, "_ZN4S7C92v9Ev");}
void  S7C9 ::v10(){vfunc_called(this, "_ZN4S7C93v10Ev");}
void  S7C9 ::v11(){vfunc_called(this, "_ZN4S7C93v11Ev");}
void  S7C9 ::v12(){vfunc_called(this, "_ZN4S7C93v12Ev");}
void  S7C9 ::v13(){vfunc_called(this, "_ZN4S7C93v13Ev");}
void  S7C9 ::v14(){vfunc_called(this, "_ZN4S7C93v14Ev");}
void  S7C9 ::v15(){vfunc_called(this, "_ZN4S7C93v15Ev");}
void  S7C9 ::v16(){vfunc_called(this, "_ZN4S7C93v16Ev");}
void  S7C9 ::v17(){vfunc_called(this, "_ZN4S7C93v17Ev");}
void  S7C9 ::v18(){vfunc_called(this, "_ZN4S7C93v18Ev");}
void  S7C9 ::v19(){vfunc_called(this, "_ZN4S7C93v19Ev");}
void  S7C9 ::v20(){vfunc_called(this, "_ZN4S7C93v20Ev");}
void  S7C9 ::v21(){vfunc_called(this, "_ZN4S7C93v21Ev");}
void  S7C9 ::v22(){vfunc_called(this, "_ZN4S7C93v22Ev");}
void  S7C9 ::v23(){vfunc_called(this, "_ZN4S7C93v23Ev");}
void  S7C9 ::v24(){vfunc_called(this, "_ZN4S7C93v24Ev");}
void  S7C9 ::v25(){vfunc_called(this, "_ZN4S7C93v25Ev");}
void  S7C9 ::v26(){vfunc_called(this, "_ZN4S7C93v26Ev");}
void  S7C9 ::v27(){vfunc_called(this, "_ZN4S7C93v27Ev");}
void  S7C9 ::v28(){vfunc_called(this, "_ZN4S7C93v28Ev");}
void  S7C9 ::v29(){vfunc_called(this, "_ZN4S7C93v29Ev");}
void  S7C9 ::v30(){vfunc_called(this, "_ZN4S7C93v30Ev");}
void  S7C9 ::v31(){vfunc_called(this, "_ZN4S7C93v31Ev");}
void  S7C9 ::v32(){vfunc_called(this, "_ZN4S7C93v32Ev");}
void  S7C9 ::v33(){vfunc_called(this, "_ZN4S7C93v33Ev");}
void  S7C9 ::v34(){vfunc_called(this, "_ZN4S7C93v34Ev");}
void  S7C9 ::v35(){vfunc_called(this, "_ZN4S7C93v35Ev");}
void  S7C9 ::v36(){vfunc_called(this, "_ZN4S7C93v36Ev");}
void  S7C9 ::v37(){vfunc_called(this, "_ZN4S7C93v37Ev");}
void  S7C9 ::v38(){vfunc_called(this, "_ZN4S7C93v38Ev");}
void  S7C9 ::v39(){vfunc_called(this, "_ZN4S7C93v39Ev");}
void  S7C9 ::v40(){vfunc_called(this, "_ZN4S7C93v40Ev");}
void  S7C9 ::v41(){vfunc_called(this, "_ZN4S7C93v41Ev");}
void  S7C9 ::v42(){vfunc_called(this, "_ZN4S7C93v42Ev");}
void  S7C9 ::v43(){vfunc_called(this, "_ZN4S7C93v43Ev");}
void  S7C9 ::v44(){vfunc_called(this, "_ZN4S7C93v44Ev");}
void  S7C9 ::v45(){vfunc_called(this, "_ZN4S7C93v45Ev");}
void  S7C9 ::v46(){vfunc_called(this, "_ZN4S7C93v46Ev");}
void  S7C9 ::v47(){vfunc_called(this, "_ZN4S7C93v47Ev");}
void  S7C9 ::v48(){vfunc_called(this, "_ZN4S7C93v48Ev");}
void  S7C9 ::v49(){vfunc_called(this, "_ZN4S7C93v49Ev");}
void  S7C9 ::v50(){vfunc_called(this, "_ZN4S7C93v50Ev");}
void  S7C9 ::v51(){vfunc_called(this, "_ZN4S7C93v51Ev");}
void  S7C9 ::v52(){vfunc_called(this, "_ZN4S7C93v52Ev");}
void  S7C9 ::v53(){vfunc_called(this, "_ZN4S7C93v53Ev");}
void  S7C9 ::v54(){vfunc_called(this, "_ZN4S7C93v54Ev");}
void  S7C9 ::v55(){vfunc_called(this, "_ZN4S7C93v55Ev");}
void  S7C9 ::v56(){vfunc_called(this, "_ZN4S7C93v56Ev");}
void  S7C9 ::v57(){vfunc_called(this, "_ZN4S7C93v57Ev");}
void  S7C9 ::v58(){vfunc_called(this, "_ZN4S7C93v58Ev");}
void  S7C9 ::v59(){vfunc_called(this, "_ZN4S7C93v59Ev");}
void  S7C9 ::v60(){vfunc_called(this, "_ZN4S7C93v60Ev");}
void  S7C9 ::v61(){vfunc_called(this, "_ZN4S7C93v61Ev");}
void  S7C9 ::v62(){vfunc_called(this, "_ZN4S7C93v62Ev");}
void  S7C9 ::v63(){vfunc_called(this, "_ZN4S7C93v63Ev");}
void  S7C9 ::v64(){vfunc_called(this, "_ZN4S7C93v64Ev");}
void  S7C9 ::v65(){vfunc_called(this, "_ZN4S7C93v65Ev");}
void  S7C9 ::v66(){vfunc_called(this, "_ZN4S7C93v66Ev");}
void  S7C9 ::v67(){vfunc_called(this, "_ZN4S7C93v67Ev");}
void  S7C9 ::v68(){vfunc_called(this, "_ZN4S7C93v68Ev");}
void  S7C9 ::v69(){vfunc_called(this, "_ZN4S7C93v69Ev");}
void  S7C9 ::v70(){vfunc_called(this, "_ZN4S7C93v70Ev");}
void  S7C9 ::v71(){vfunc_called(this, "_ZN4S7C93v71Ev");}
void  S7C9 ::v72(){vfunc_called(this, "_ZN4S7C93v72Ev");}
void  S7C9 ::v73(){vfunc_called(this, "_ZN4S7C93v73Ev");}
void  S7C9 ::v74(){vfunc_called(this, "_ZN4S7C93v74Ev");}
void  S7C9 ::v75(){vfunc_called(this, "_ZN4S7C93v75Ev");}
void  S7C9 ::v76(){vfunc_called(this, "_ZN4S7C93v76Ev");}
void  S7C9 ::v77(){vfunc_called(this, "_ZN4S7C93v77Ev");}
void  S7C9 ::v78(){vfunc_called(this, "_ZN4S7C93v78Ev");}
void  S7C9 ::v79(){vfunc_called(this, "_ZN4S7C93v79Ev");}
void  S7C9 ::v80(){vfunc_called(this, "_ZN4S7C93v80Ev");}
void  S7C9 ::v81(){vfunc_called(this, "_ZN4S7C93v81Ev");}
void  S7C9 ::v82(){vfunc_called(this, "_ZN4S7C93v82Ev");}
void  S7C9 ::v83(){vfunc_called(this, "_ZN4S7C93v83Ev");}
void  S7C9 ::v84(){vfunc_called(this, "_ZN4S7C93v84Ev");}
void  S7C9 ::v85(){vfunc_called(this, "_ZN4S7C93v85Ev");}
void  S7C9 ::v86(){vfunc_called(this, "_ZN4S7C93v86Ev");}
void  S7C9 ::v87(){vfunc_called(this, "_ZN4S7C93v87Ev");}
void  S7C9 ::v88(){vfunc_called(this, "_ZN4S7C93v88Ev");}
void  S7C9 ::v89(){vfunc_called(this, "_ZN4S7C93v89Ev");}
void  S7C9 ::v90(){vfunc_called(this, "_ZN4S7C93v90Ev");}
void  S7C9 ::v91(){vfunc_called(this, "_ZN4S7C93v91Ev");}
void  S7C9 ::v92(){vfunc_called(this, "_ZN4S7C93v92Ev");}
void  S7C9 ::v93(){vfunc_called(this, "_ZN4S7C93v93Ev");}
void  S7C9 ::v94(){vfunc_called(this, "_ZN4S7C93v94Ev");}
void  S7C9 ::v95(){vfunc_called(this, "_ZN4S7C93v95Ev");}
void  S7C9 ::v96(){vfunc_called(this, "_ZN4S7C93v96Ev");}
void  S7C9 ::v97(){vfunc_called(this, "_ZN4S7C93v97Ev");}
void  S7C9 ::v98(){vfunc_called(this, "_ZN4S7C93v98Ev");}
void  S7C9 ::v99(){vfunc_called(this, "_ZN4S7C93v99Ev");}
void  S7C9 ::v100(){vfunc_called(this, "_ZN4S7C94v100Ev");}
void  S7C9 ::v101(){vfunc_called(this, "_ZN4S7C94v101Ev");}
void  S7C9 ::v102(){vfunc_called(this, "_ZN4S7C94v102Ev");}
void  S7C9 ::v103(){vfunc_called(this, "_ZN4S7C94v103Ev");}
void  S7C9 ::v104(){vfunc_called(this, "_ZN4S7C94v104Ev");}
void  S7C9 ::v105(){vfunc_called(this, "_ZN4S7C94v105Ev");}
void  S7C9 ::v106(){vfunc_called(this, "_ZN4S7C94v106Ev");}
void  S7C9 ::v107(){vfunc_called(this, "_ZN4S7C94v107Ev");}
void  S7C9 ::v108(){vfunc_called(this, "_ZN4S7C94v108Ev");}
void  S7C9 ::v109(){vfunc_called(this, "_ZN4S7C94v109Ev");}
void  S7C9 ::v110(){vfunc_called(this, "_ZN4S7C94v110Ev");}
void  S7C9 ::v111(){vfunc_called(this, "_ZN4S7C94v111Ev");}
S7C9 ::~S7C9(){ note_dtor("S7C9", this);} // tgen
S7C9 ::S7C9(){ note_ctor("S7C9", this);} // tgen

static void Test_S7C9()
{
  extern Class_Descriptor cd_S7C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7C9, buf);
    S7C9 *dp, &lv = *(dp=new (buf) S7C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7C9)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S7C9");
    test_class_info(&lv, &cd_S7C9);
    dp->~S7C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7C9(Test_S7C9, "S7C9", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN4S7C9C1Ev();
extern void _ZN4S7C9D1Ev();
Name_Map name_map_S7C9[] = {
  NSPAIR(_ZN4S7C9C1Ev),
  NSPAIR(_ZN4S7C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S7C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI4S7C9[];
extern void _ZN4S7C9D1Ev();
extern void _ZN4S7C9D0Ev();
extern void _ZN4S7C92v5Ev();
extern void _ZN4S7C92v6Ev();
extern void _ZN4S7C92v7Ev();
extern void _ZN4S7C92v8Ev();
extern void _ZN4S7C92v9Ev();
extern void _ZN4S7C93v10Ev();
extern void _ZN4S7C93v11Ev();
extern void _ZN4S7C93v12Ev();
extern void _ZN4S7C93v13Ev();
extern void _ZN4S7C93v14Ev();
extern void _ZN4S7C93v15Ev();
extern void _ZN4S7C93v16Ev();
extern void _ZN4S7C93v17Ev();
extern void _ZN4S7C93v18Ev();
extern void _ZN4S7C93v19Ev();
extern void _ZN4S7C93v20Ev();
extern void _ZN4S7C93v21Ev();
extern void _ZN4S7C93v22Ev();
extern void _ZN4S7C93v23Ev();
extern void _ZN4S7C93v24Ev();
extern void _ZN4S7C93v25Ev();
extern void _ZN4S7C93v26Ev();
extern void _ZN4S7C93v27Ev();
extern void _ZN4S7C93v28Ev();
extern void _ZN4S7C93v29Ev();
extern void _ZN4S7C93v30Ev();
extern void _ZN4S7C93v31Ev();
extern void _ZN4S7C93v32Ev();
extern void _ZN4S7C93v33Ev();
extern void _ZN4S7C93v34Ev();
extern void _ZN4S7C93v35Ev();
extern void _ZN4S7C93v36Ev();
extern void _ZN4S7C93v37Ev();
extern void _ZN4S7C93v38Ev();
extern void _ZN4S7C93v39Ev();
extern void _ZN4S7C93v40Ev();
extern void _ZN4S7C93v41Ev();
extern void _ZN4S7C93v42Ev();
extern void _ZN4S7C93v43Ev();
extern void _ZN4S7C93v44Ev();
extern void _ZN4S7C93v45Ev();
extern void _ZN4S7C93v46Ev();
extern void _ZN4S7C93v47Ev();
extern void _ZN4S7C93v48Ev();
extern void _ZN4S7C93v49Ev();
extern void _ZN4S7C93v50Ev();
extern void _ZN4S7C93v51Ev();
extern void _ZN4S7C93v52Ev();
extern void _ZN4S7C93v53Ev();
extern void _ZN4S7C93v54Ev();
extern void _ZN4S7C93v55Ev();
extern void _ZN4S7C93v56Ev();
extern void _ZN4S7C93v57Ev();
extern void _ZN4S7C93v58Ev();
extern void _ZN4S7C93v59Ev();
extern void _ZN4S7C93v60Ev();
extern void _ZN4S7C93v61Ev();
extern void _ZN4S7C93v62Ev();
extern void _ZN4S7C93v63Ev();
extern void _ZN4S7C93v64Ev();
extern void _ZN4S7C93v65Ev();
extern void _ZN4S7C93v66Ev();
extern void _ZN4S7C93v67Ev();
extern void _ZN4S7C93v68Ev();
extern void _ZN4S7C93v69Ev();
extern void _ZN4S7C93v70Ev();
extern void _ZN4S7C93v71Ev();
extern void _ZN4S7C93v72Ev();
extern void _ZN4S7C93v73Ev();
extern void _ZN4S7C93v74Ev();
extern void _ZN4S7C93v75Ev();
extern void _ZN4S7C93v76Ev();
extern void _ZN4S7C93v77Ev();
extern void _ZN4S7C93v78Ev();
extern void _ZN4S7C93v79Ev();
extern void _ZN4S7C93v80Ev();
extern void _ZN4S7C93v81Ev();
extern void _ZN4S7C93v82Ev();
extern void _ZN4S7C93v83Ev();
extern void _ZN4S7C93v84Ev();
extern void _ZN4S7C93v85Ev();
extern void _ZN4S7C93v86Ev();
extern void _ZN4S7C93v87Ev();
extern void _ZN4S7C93v88Ev();
extern void _ZN4S7C93v89Ev();
extern void _ZN4S7C93v90Ev();
extern void _ZN4S7C93v91Ev();
extern void _ZN4S7C93v92Ev();
extern void _ZN4S7C93v93Ev();
extern void _ZN4S7C93v94Ev();
extern void _ZN4S7C93v95Ev();
extern void _ZN4S7C93v96Ev();
extern void _ZN4S7C93v97Ev();
extern void _ZN4S7C93v98Ev();
extern void _ZN4S7C93v99Ev();
extern void _ZN4S7C94v100Ev();
extern void _ZN4S7C94v101Ev();
extern void _ZN4S7C94v102Ev();
extern void _ZN4S7C94v103Ev();
extern void _ZN4S7C94v104Ev();
extern void _ZN4S7C94v105Ev();
extern void _ZN4S7C94v106Ev();
extern void _ZN4S7C94v107Ev();
extern void _ZN4S7C94v108Ev();
extern void _ZN4S7C94v109Ev();
extern void _ZN4S7C94v110Ev();
extern void _ZN4S7C94v111Ev();
static  VTBL_ENTRY vtc_S7C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI4S7C9[0]),
  (VTBL_ENTRY)&_ZN4S7C9D1Ev,
  (VTBL_ENTRY)&_ZN4S7C9D0Ev,
  (VTBL_ENTRY)&_ZN4S7C92v5Ev,
  (VTBL_ENTRY)&_ZN4S7C92v6Ev,
  (VTBL_ENTRY)&_ZN4S7C92v7Ev,
  (VTBL_ENTRY)&_ZN4S7C92v8Ev,
  (VTBL_ENTRY)&_ZN4S7C92v9Ev,
  (VTBL_ENTRY)&_ZN4S7C93v10Ev,
  (VTBL_ENTRY)&_ZN4S7C93v11Ev,
  (VTBL_ENTRY)&_ZN4S7C93v12Ev,
  (VTBL_ENTRY)&_ZN4S7C93v13Ev,
  (VTBL_ENTRY)&_ZN4S7C93v14Ev,
  (VTBL_ENTRY)&_ZN4S7C93v15Ev,
  (VTBL_ENTRY)&_ZN4S7C93v16Ev,
  (VTBL_ENTRY)&_ZN4S7C93v17Ev,
  (VTBL_ENTRY)&_ZN4S7C93v18Ev,
  (VTBL_ENTRY)&_ZN4S7C93v19Ev,
  (VTBL_ENTRY)&_ZN4S7C93v20Ev,
  (VTBL_ENTRY)&_ZN4S7C93v21Ev,
  (VTBL_ENTRY)&_ZN4S7C93v22Ev,
  (VTBL_ENTRY)&_ZN4S7C93v23Ev,
  (VTBL_ENTRY)&_ZN4S7C93v24Ev,
  (VTBL_ENTRY)&_ZN4S7C93v25Ev,
  (VTBL_ENTRY)&_ZN4S7C93v26Ev,
  (VTBL_ENTRY)&_ZN4S7C93v27Ev,
  (VTBL_ENTRY)&_ZN4S7C93v28Ev,
  (VTBL_ENTRY)&_ZN4S7C93v29Ev,
  (VTBL_ENTRY)&_ZN4S7C93v30Ev,
  (VTBL_ENTRY)&_ZN4S7C93v31Ev,
  (VTBL_ENTRY)&_ZN4S7C93v32Ev,
  (VTBL_ENTRY)&_ZN4S7C93v33Ev,
  (VTBL_ENTRY)&_ZN4S7C93v34Ev,
  (VTBL_ENTRY)&_ZN4S7C93v35Ev,
  (VTBL_ENTRY)&_ZN4S7C93v36Ev,
  (VTBL_ENTRY)&_ZN4S7C93v37Ev,
  (VTBL_ENTRY)&_ZN4S7C93v38Ev,
  (VTBL_ENTRY)&_ZN4S7C93v39Ev,
  (VTBL_ENTRY)&_ZN4S7C93v40Ev,
  (VTBL_ENTRY)&_ZN4S7C93v41Ev,
  (VTBL_ENTRY)&_ZN4S7C93v42Ev,
  (VTBL_ENTRY)&_ZN4S7C93v43Ev,
  (VTBL_ENTRY)&_ZN4S7C93v44Ev,
  (VTBL_ENTRY)&_ZN4S7C93v45Ev,
  (VTBL_ENTRY)&_ZN4S7C93v46Ev,
  (VTBL_ENTRY)&_ZN4S7C93v47Ev,
  (VTBL_ENTRY)&_ZN4S7C93v48Ev,
  (VTBL_ENTRY)&_ZN4S7C93v49Ev,
  (VTBL_ENTRY)&_ZN4S7C93v50Ev,
  (VTBL_ENTRY)&_ZN4S7C93v51Ev,
  (VTBL_ENTRY)&_ZN4S7C93v52Ev,
  (VTBL_ENTRY)&_ZN4S7C93v53Ev,
  (VTBL_ENTRY)&_ZN4S7C93v54Ev,
  (VTBL_ENTRY)&_ZN4S7C93v55Ev,
  (VTBL_ENTRY)&_ZN4S7C93v56Ev,
  (VTBL_ENTRY)&_ZN4S7C93v57Ev,
  (VTBL_ENTRY)&_ZN4S7C93v58Ev,
  (VTBL_ENTRY)&_ZN4S7C93v59Ev,
  (VTBL_ENTRY)&_ZN4S7C93v60Ev,
  (VTBL_ENTRY)&_ZN4S7C93v61Ev,
  (VTBL_ENTRY)&_ZN4S7C93v62Ev,
  (VTBL_ENTRY)&_ZN4S7C93v63Ev,
  (VTBL_ENTRY)&_ZN4S7C93v64Ev,
  (VTBL_ENTRY)&_ZN4S7C93v65Ev,
  (VTBL_ENTRY)&_ZN4S7C93v66Ev,
  (VTBL_ENTRY)&_ZN4S7C93v67Ev,
  (VTBL_ENTRY)&_ZN4S7C93v68Ev,
  (VTBL_ENTRY)&_ZN4S7C93v69Ev,
  (VTBL_ENTRY)&_ZN4S7C93v70Ev,
  (VTBL_ENTRY)&_ZN4S7C93v71Ev,
  (VTBL_ENTRY)&_ZN4S7C93v72Ev,
  (VTBL_ENTRY)&_ZN4S7C93v73Ev,
  (VTBL_ENTRY)&_ZN4S7C93v74Ev,
  (VTBL_ENTRY)&_ZN4S7C93v75Ev,
  (VTBL_ENTRY)&_ZN4S7C93v76Ev,
  (VTBL_ENTRY)&_ZN4S7C93v77Ev,
  (VTBL_ENTRY)&_ZN4S7C93v78Ev,
  (VTBL_ENTRY)&_ZN4S7C93v79Ev,
  (VTBL_ENTRY)&_ZN4S7C93v80Ev,
  (VTBL_ENTRY)&_ZN4S7C93v81Ev,
  (VTBL_ENTRY)&_ZN4S7C93v82Ev,
  (VTBL_ENTRY)&_ZN4S7C93v83Ev,
  (VTBL_ENTRY)&_ZN4S7C93v84Ev,
  (VTBL_ENTRY)&_ZN4S7C93v85Ev,
  (VTBL_ENTRY)&_ZN4S7C93v86Ev,
  (VTBL_ENTRY)&_ZN4S7C93v87Ev,
  (VTBL_ENTRY)&_ZN4S7C93v88Ev,
  (VTBL_ENTRY)&_ZN4S7C93v89Ev,
  (VTBL_ENTRY)&_ZN4S7C93v90Ev,
  (VTBL_ENTRY)&_ZN4S7C93v91Ev,
  (VTBL_ENTRY)&_ZN4S7C93v92Ev,
  (VTBL_ENTRY)&_ZN4S7C93v93Ev,
  (VTBL_ENTRY)&_ZN4S7C93v94Ev,
  (VTBL_ENTRY)&_ZN4S7C93v95Ev,
  (VTBL_ENTRY)&_ZN4S7C93v96Ev,
  (VTBL_ENTRY)&_ZN4S7C93v97Ev,
  (VTBL_ENTRY)&_ZN4S7C93v98Ev,
  (VTBL_ENTRY)&_ZN4S7C93v99Ev,
  (VTBL_ENTRY)&_ZN4S7C94v100Ev,
  (VTBL_ENTRY)&_ZN4S7C94v101Ev,
  (VTBL_ENTRY)&_ZN4S7C94v102Ev,
  (VTBL_ENTRY)&_ZN4S7C94v103Ev,
  (VTBL_ENTRY)&_ZN4S7C94v104Ev,
  (VTBL_ENTRY)&_ZN4S7C94v105Ev,
  (VTBL_ENTRY)&_ZN4S7C94v106Ev,
  (VTBL_ENTRY)&_ZN4S7C94v107Ev,
  (VTBL_ENTRY)&_ZN4S7C94v108Ev,
  (VTBL_ENTRY)&_ZN4S7C94v109Ev,
  (VTBL_ENTRY)&_ZN4S7C94v110Ev,
  (VTBL_ENTRY)&_ZN4S7C94v111Ev,
};
extern VTBL_ENTRY _ZTI4S7C9[];
extern  VTBL_ENTRY _ZTV4S7C9[];
Class_Descriptor cd_S7C9 = {  "S7C9", // class name
  bases_S7C9, 1,
  &(vtc_S7C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI4S7C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV4S7C9),111, //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  S7C8  : S7C9 {
  ~S7C8(); // tgen
  S7C8(); // tgen
};
//SIG(-1 S7C8) C1{ BC2{ BC3{ vd m Fp Fi} 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 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}}


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

static void Test_S7C8()
{
  extern Class_Descriptor cd_S7C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7C8, buf);
    S7C8 *dp, &lv = *(dp=new (buf) S7C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7C8)");
    check_base_class_offset(lv, (S1C11_nt*)(S7C9*), 0, "S7C8");
    check_base_class_offset(lv, (S7C9*), 0, "S7C8");
    test_class_info(&lv, &cd_S7C8);
    dp->~S7C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7C8(Test_S7C8, "S7C8", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN4S7C8C1Ev();
extern void _ZN4S7C8D1Ev();
Name_Map name_map_S7C8[] = {
  NSPAIR(_ZN4S7C8C1Ev),
  NSPAIR(_ZN4S7C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S7C9;
extern VTBL_ENTRY _ZTI4S7C9[];
extern  VTBL_ENTRY _ZTV4S7C9[];
static Base_Class bases_S7C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI4S7C8[];
extern void _ZN4S7C8D1Ev();
extern void _ZN4S7C8D0Ev();
extern void _ZN4S7C92v5Ev();
extern void _ZN4S7C92v6Ev();
extern void _ZN4S7C92v7Ev();
extern void _ZN4S7C92v8Ev();
extern void _ZN4S7C92v9Ev();
extern void _ZN4S7C93v10Ev();
extern void _ZN4S7C93v11Ev();
extern void _ZN4S7C93v12Ev();
extern void _ZN4S7C93v13Ev();
extern void _ZN4S7C93v14Ev();
extern void _ZN4S7C93v15Ev();
extern void _ZN4S7C93v16Ev();
extern void _ZN4S7C93v17Ev();
extern void _ZN4S7C93v18Ev();
extern void _ZN4S7C93v19Ev();
extern void _ZN4S7C93v20Ev();
extern void _ZN4S7C93v21Ev();
extern void _ZN4S7C93v22Ev();
extern void _ZN4S7C93v23Ev();
extern void _ZN4S7C93v24Ev();
extern void _ZN4S7C93v25Ev();
extern void _ZN4S7C93v26Ev();
extern void _ZN4S7C93v27Ev();
extern void _ZN4S7C93v28Ev();
extern void _ZN4S7C93v29Ev();
extern void _ZN4S7C93v30Ev();
extern void _ZN4S7C93v31Ev();
extern void _ZN4S7C93v32Ev();
extern void _ZN4S7C93v33Ev();
extern void _ZN4S7C93v34Ev();
extern void _ZN4S7C93v35Ev();
extern void _ZN4S7C93v36Ev();
extern void _ZN4S7C93v37Ev();
extern void _ZN4S7C93v38Ev();
extern void _ZN4S7C93v39Ev();
extern void _ZN4S7C93v40Ev();
extern void _ZN4S7C93v41Ev();
extern void _ZN4S7C93v42Ev();
extern void _ZN4S7C93v43Ev();
extern void _ZN4S7C93v44Ev();
extern void _ZN4S7C93v45Ev();
extern void _ZN4S7C93v46Ev();
extern void _ZN4S7C93v47Ev();
extern void _ZN4S7C93v48Ev();
extern void _ZN4S7C93v49Ev();
extern void _ZN4S7C93v50Ev();
extern void _ZN4S7C93v51Ev();
extern void _ZN4S7C93v52Ev();
extern void _ZN4S7C93v53Ev();
extern void _ZN4S7C93v54Ev();
extern void _ZN4S7C93v55Ev();
extern void _ZN4S7C93v56Ev();
extern void _ZN4S7C93v57Ev();
extern void _ZN4S7C93v58Ev();
extern void _ZN4S7C93v59Ev();
extern void _ZN4S7C93v60Ev();
extern void _ZN4S7C93v61Ev();
extern void _ZN4S7C93v62Ev();
extern void _ZN4S7C93v63Ev();
extern void _ZN4S7C93v64Ev();
extern void _ZN4S7C93v65Ev();
extern void _ZN4S7C93v66Ev();
extern void _ZN4S7C93v67Ev();
extern void _ZN4S7C93v68Ev();
extern void _ZN4S7C93v69Ev();
extern void _ZN4S7C93v70Ev();
extern void _ZN4S7C93v71Ev();
extern void _ZN4S7C93v72Ev();
extern void _ZN4S7C93v73Ev();
extern void _ZN4S7C93v74Ev();
extern void _ZN4S7C93v75Ev();
extern void _ZN4S7C93v76Ev();
extern void _ZN4S7C93v77Ev();
extern void _ZN4S7C93v78Ev();
extern void _ZN4S7C93v79Ev();
extern void _ZN4S7C93v80Ev();
extern void _ZN4S7C93v81Ev();
extern void _ZN4S7C93v82Ev();
extern void _ZN4S7C93v83Ev();
extern void _ZN4S7C93v84Ev();
extern void _ZN4S7C93v85Ev();
extern void _ZN4S7C93v86Ev();
extern void _ZN4S7C93v87Ev();
extern void _ZN4S7C93v88Ev();
extern void _ZN4S7C93v89Ev();
extern void _ZN4S7C93v90Ev();
extern void _ZN4S7C93v91Ev();
extern void _ZN4S7C93v92Ev();
extern void _ZN4S7C93v93Ev();
extern void _ZN4S7C93v94Ev();
extern void _ZN4S7C93v95Ev();
extern void _ZN4S7C93v96Ev();
extern void _ZN4S7C93v97Ev();
extern void _ZN4S7C93v98Ev();
extern void _ZN4S7C93v99Ev();
extern void _ZN4S7C94v100Ev();
extern void _ZN4S7C94v101Ev();
extern void _ZN4S7C94v102Ev();
extern void _ZN4S7C94v103Ev();
extern void _ZN4S7C94v104Ev();
extern void _ZN4S7C94v105Ev();
extern void _ZN4S7C94v106Ev();
extern void _ZN4S7C94v107Ev();
extern void _ZN4S7C94v108Ev();
extern void _ZN4S7C94v109Ev();
extern void _ZN4S7C94v110Ev();
extern void _ZN4S7C94v111Ev();
static  VTBL_ENTRY vtc_S7C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI4S7C8[0]),
  (VTBL_ENTRY)&_ZN4S7C8D1Ev,
  (VTBL_ENTRY)&_ZN4S7C8D0Ev,
  (VTBL_ENTRY)&_ZN4S7C92v5Ev,
  (VTBL_ENTRY)&_ZN4S7C92v6Ev,
  (VTBL_ENTRY)&_ZN4S7C92v7Ev,
  (VTBL_ENTRY)&_ZN4S7C92v8Ev,
  (VTBL_ENTRY)&_ZN4S7C92v9Ev,
  (VTBL_ENTRY)&_ZN4S7C93v10Ev,
  (VTBL_ENTRY)&_ZN4S7C93v11Ev,
  (VTBL_ENTRY)&_ZN4S7C93v12Ev,
  (VTBL_ENTRY)&_ZN4S7C93v13Ev,
  (VTBL_ENTRY)&_ZN4S7C93v14Ev,
  (VTBL_ENTRY)&_ZN4S7C93v15Ev,
  (VTBL_ENTRY)&_ZN4S7C93v16Ev,
  (VTBL_ENTRY)&_ZN4S7C93v17Ev,
  (VTBL_ENTRY)&_ZN4S7C93v18Ev,
  (VTBL_ENTRY)&_ZN4S7C93v19Ev,
  (VTBL_ENTRY)&_ZN4S7C93v20Ev,
  (VTBL_ENTRY)&_ZN4S7C93v21Ev,
  (VTBL_ENTRY)&_ZN4S7C93v22Ev,
  (VTBL_ENTRY)&_ZN4S7C93v23Ev,
  (VTBL_ENTRY)&_ZN4S7C93v24Ev,
  (VTBL_ENTRY)&_ZN4S7C93v25Ev,
  (VTBL_ENTRY)&_ZN4S7C93v26Ev,
  (VTBL_ENTRY)&_ZN4S7C93v27Ev,
  (VTBL_ENTRY)&_ZN4S7C93v28Ev,
  (VTBL_ENTRY)&_ZN4S7C93v29Ev,
  (VTBL_ENTRY)&_ZN4S7C93v30Ev,
  (VTBL_ENTRY)&_ZN4S7C93v31Ev,
  (VTBL_ENTRY)&_ZN4S7C93v32Ev,
  (VTBL_ENTRY)&_ZN4S7C93v33Ev,
  (VTBL_ENTRY)&_ZN4S7C93v34Ev,
  (VTBL_ENTRY)&_ZN4S7C93v35Ev,
  (VTBL_ENTRY)&_ZN4S7C93v36Ev,
  (VTBL_ENTRY)&_ZN4S7C93v37Ev,
  (VTBL_ENTRY)&_ZN4S7C93v38Ev,
  (VTBL_ENTRY)&_ZN4S7C93v39Ev,
  (VTBL_ENTRY)&_ZN4S7C93v40Ev,
  (VTBL_ENTRY)&_ZN4S7C93v41Ev,
  (VTBL_ENTRY)&_ZN4S7C93v42Ev,
  (VTBL_ENTRY)&_ZN4S7C93v43Ev,
  (VTBL_ENTRY)&_ZN4S7C93v44Ev,
  (VTBL_ENTRY)&_ZN4S7C93v45Ev,
  (VTBL_ENTRY)&_ZN4S7C93v46Ev,
  (VTBL_ENTRY)&_ZN4S7C93v47Ev,
  (VTBL_ENTRY)&_ZN4S7C93v48Ev,
  (VTBL_ENTRY)&_ZN4S7C93v49Ev,
  (VTBL_ENTRY)&_ZN4S7C93v50Ev,
  (VTBL_ENTRY)&_ZN4S7C93v51Ev,
  (VTBL_ENTRY)&_ZN4S7C93v52Ev,
  (VTBL_ENTRY)&_ZN4S7C93v53Ev,
  (VTBL_ENTRY)&_ZN4S7C93v54Ev,
  (VTBL_ENTRY)&_ZN4S7C93v55Ev,
  (VTBL_ENTRY)&_ZN4S7C93v56Ev,
  (VTBL_ENTRY)&_ZN4S7C93v57Ev,
  (VTBL_ENTRY)&_ZN4S7C93v58Ev,
  (VTBL_ENTRY)&_ZN4S7C93v59Ev,
  (VTBL_ENTRY)&_ZN4S7C93v60Ev,
  (VTBL_ENTRY)&_ZN4S7C93v61Ev,
  (VTBL_ENTRY)&_ZN4S7C93v62Ev,
  (VTBL_ENTRY)&_ZN4S7C93v63Ev,
  (VTBL_ENTRY)&_ZN4S7C93v64Ev,
  (VTBL_ENTRY)&_ZN4S7C93v65Ev,
  (VTBL_ENTRY)&_ZN4S7C93v66Ev,
  (VTBL_ENTRY)&_ZN4S7C93v67Ev,
  (VTBL_ENTRY)&_ZN4S7C93v68Ev,
  (VTBL_ENTRY)&_ZN4S7C93v69Ev,
  (VTBL_ENTRY)&_ZN4S7C93v70Ev,
  (VTBL_ENTRY)&_ZN4S7C93v71Ev,
  (VTBL_ENTRY)&_ZN4S7C93v72Ev,
  (VTBL_ENTRY)&_ZN4S7C93v73Ev,
  (VTBL_ENTRY)&_ZN4S7C93v74Ev,
  (VTBL_ENTRY)&_ZN4S7C93v75Ev,
  (VTBL_ENTRY)&_ZN4S7C93v76Ev,
  (VTBL_ENTRY)&_ZN4S7C93v77Ev,
  (VTBL_ENTRY)&_ZN4S7C93v78Ev,
  (VTBL_ENTRY)&_ZN4S7C93v79Ev,
  (VTBL_ENTRY)&_ZN4S7C93v80Ev,
  (VTBL_ENTRY)&_ZN4S7C93v81Ev,
  (VTBL_ENTRY)&_ZN4S7C93v82Ev,
  (VTBL_ENTRY)&_ZN4S7C93v83Ev,
  (VTBL_ENTRY)&_ZN4S7C93v84Ev,
  (VTBL_ENTRY)&_ZN4S7C93v85Ev,
  (VTBL_ENTRY)&_ZN4S7C93v86Ev,
  (VTBL_ENTRY)&_ZN4S7C93v87Ev,
  (VTBL_ENTRY)&_ZN4S7C93v88Ev,
  (VTBL_ENTRY)&_ZN4S7C93v89Ev,
  (VTBL_ENTRY)&_ZN4S7C93v90Ev,
  (VTBL_ENTRY)&_ZN4S7C93v91Ev,
  (VTBL_ENTRY)&_ZN4S7C93v92Ev,
  (VTBL_ENTRY)&_ZN4S7C93v93Ev,
  (VTBL_ENTRY)&_ZN4S7C93v94Ev,
  (VTBL_ENTRY)&_ZN4S7C93v95Ev,
  (VTBL_ENTRY)&_ZN4S7C93v96Ev,
  (VTBL_ENTRY)&_ZN4S7C93v97Ev,
  (VTBL_ENTRY)&_ZN4S7C93v98Ev,
  (VTBL_ENTRY)&_ZN4S7C93v99Ev,
  (VTBL_ENTRY)&_ZN4S7C94v100Ev,
  (VTBL_ENTRY)&_ZN4S7C94v101Ev,
  (VTBL_ENTRY)&_ZN4S7C94v102Ev,
  (VTBL_ENTRY)&_ZN4S7C94v103Ev,
  (VTBL_ENTRY)&_ZN4S7C94v104Ev,
  (VTBL_ENTRY)&_ZN4S7C94v105Ev,
  (VTBL_ENTRY)&_ZN4S7C94v106Ev,
  (VTBL_ENTRY)&_ZN4S7C94v107Ev,
  (VTBL_ENTRY)&_ZN4S7C94v108Ev,
  (VTBL_ENTRY)&_ZN4S7C94v109Ev,
  (VTBL_ENTRY)&_ZN4S7C94v110Ev,
  (VTBL_ENTRY)&_ZN4S7C94v111Ev,
};
extern VTBL_ENTRY _ZTI4S7C8[];
extern  VTBL_ENTRY _ZTV4S7C8[];
Class_Descriptor cd_S7C8 = {  "S7C8", // class name
  bases_S7C8, 2,
  &(vtc_S7C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI4S7C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV4S7C8),111, //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  S7C7  : S7C8 {
  virtual void  v112(); // _ZN4S7C74v112Ev
  virtual void  v113(); // _ZN4S7C74v113Ev
  virtual void  v114(); // _ZN4S7C74v114Ev
  virtual void  v115(); // _ZN4S7C74v115Ev
  virtual void  v116(); // _ZN4S7C74v116Ev
  virtual void  v117(); // _ZN4S7C74v117Ev
  virtual void  v118(); // _ZN4S7C74v118Ev
  virtual void  v119(); // _ZN4S7C74v119Ev
  virtual void  v120(); // _ZN4S7C74v120Ev
  virtual void  v121(); // _ZN4S7C74v121Ev
  virtual void  v122(); // _ZN4S7C74v122Ev
  virtual void  v123(); // _ZN4S7C74v123Ev
  virtual void  v124(); // _ZN4S7C74v124Ev
  virtual void  v125(); // _ZN4S7C74v125Ev
  virtual void  v126(); // _ZN4S7C74v126Ev
  virtual void  v127(); // _ZN4S7C74v127Ev
  virtual void  v128(); // _ZN4S7C74v128Ev
  virtual void  v129(); // _ZN4S7C74v129Ev
  virtual void  v130(); // _ZN4S7C74v130Ev
  virtual void  v131(); // _ZN4S7C74v131Ev
  virtual void  v132(); // _ZN4S7C74v132Ev
  virtual void  v133(); // _ZN4S7C74v133Ev
  virtual void  v134(); // _ZN4S7C74v134Ev
  virtual void  v135(); // _ZN4S7C74v135Ev
  virtual void  v136(); // _ZN4S7C74v136Ev
  virtual void  v137(); // _ZN4S7C74v137Ev
  ~S7C7(); // tgen
  S7C7(); // tgen
};
//SIG(-1 S7C7) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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 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}} 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}


void  S7C7 ::v112(){vfunc_called(this, "_ZN4S7C74v112Ev");}
void  S7C7 ::v113(){vfunc_called(this, "_ZN4S7C74v113Ev");}
void  S7C7 ::v114(){vfunc_called(this, "_ZN4S7C74v114Ev");}
void  S7C7 ::v115(){vfunc_called(this, "_ZN4S7C74v115Ev");}
void  S7C7 ::v116(){vfunc_called(this, "_ZN4S7C74v116Ev");}
void  S7C7 ::v117(){vfunc_called(this, "_ZN4S7C74v117Ev");}
void  S7C7 ::v118(){vfunc_called(this, "_ZN4S7C74v118Ev");}
void  S7C7 ::v119(){vfunc_called(this, "_ZN4S7C74v119Ev");}
void  S7C7 ::v120(){vfunc_called(this, "_ZN4S7C74v120Ev");}
void  S7C7 ::v121(){vfunc_called(this, "_ZN4S7C74v121Ev");}
void  S7C7 ::v122(){vfunc_called(this, "_ZN4S7C74v122Ev");}
void  S7C7 ::v123(){vfunc_called(this, "_ZN4S7C74v123Ev");}
void  S7C7 ::v124(){vfunc_called(this, "_ZN4S7C74v124Ev");}
void  S7C7 ::v125(){vfunc_called(this, "_ZN4S7C74v125Ev");}
void  S7C7 ::v126(){vfunc_called(this, "_ZN4S7C74v126Ev");}
void  S7C7 ::v127(){vfunc_called(this, "_ZN4S7C74v127Ev");}
void  S7C7 ::v128(){vfunc_called(this, "_ZN4S7C74v128Ev");}
void  S7C7 ::v129(){vfunc_called(this, "_ZN4S7C74v129Ev");}
void  S7C7 ::v130(){vfunc_called(this, "_ZN4S7C74v130Ev");}
void  S7C7 ::v131(){vfunc_called(this, "_ZN4S7C74v131Ev");}
void  S7C7 ::v132(){vfunc_called(this, "_ZN4S7C74v132Ev");}
void  S7C7 ::v133(){vfunc_called(this, "_ZN4S7C74v133Ev");}
void  S7C7 ::v134(){vfunc_called(this, "_ZN4S7C74v134Ev");}
void  S7C7 ::v135(){vfunc_called(this, "_ZN4S7C74v135Ev");}
void  S7C7 ::v136(){vfunc_called(this, "_ZN4S7C74v136Ev");}
void  S7C7 ::v137(){vfunc_called(this, "_ZN4S7C74v137Ev");}
S7C7 ::~S7C7(){ note_dtor("S7C7", this);} // tgen
S7C7 ::S7C7(){ note_ctor("S7C7", this);} // tgen

static void Test_S7C7()
{
  extern Class_Descriptor cd_S7C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7C7, buf);
    S7C7 *dp, &lv = *(dp=new (buf) S7C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7C7)");
    check_base_class_offset(lv, (S1C11_nt*)(S7C9*)(S7C8*), 0, "S7C7");
    check_base_class_offset(lv, (S7C9*)(S7C8*), 0, "S7C7");
    check_base_class_offset(lv, (S7C8*), 0, "S7C7");
    test_class_info(&lv, &cd_S7C7);
    dp->~S7C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7C7(Test_S7C7, "S7C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN4S7C7C1Ev();
extern void _ZN4S7C7D1Ev();
Name_Map name_map_S7C7[] = {
  NSPAIR(_ZN4S7C7C1Ev),
  NSPAIR(_ZN4S7C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S7C9;
extern VTBL_ENTRY _ZTI4S7C9[];
extern  VTBL_ENTRY _ZTV4S7C9[];
extern Class_Descriptor cd_S7C8;
extern VTBL_ENTRY _ZTI4S7C8[];
extern  VTBL_ENTRY _ZTV4S7C8[];
static Base_Class bases_S7C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI4S7C7[];
extern void _ZN4S7C7D1Ev();
extern void _ZN4S7C7D0Ev();
extern void _ZN4S7C92v5Ev();
extern void _ZN4S7C92v6Ev();
extern void _ZN4S7C92v7Ev();
extern void _ZN4S7C92v8Ev();
extern void _ZN4S7C92v9Ev();
extern void _ZN4S7C93v10Ev();
extern void _ZN4S7C93v11Ev();
extern void _ZN4S7C93v12Ev();
extern void _ZN4S7C93v13Ev();
extern void _ZN4S7C93v14Ev();
extern void _ZN4S7C93v15Ev();
extern void _ZN4S7C93v16Ev();
extern void _ZN4S7C93v17Ev();
extern void _ZN4S7C93v18Ev();
extern void _ZN4S7C93v19Ev();
extern void _ZN4S7C93v20Ev();
extern void _ZN4S7C93v21Ev();
extern void _ZN4S7C93v22Ev();
extern void _ZN4S7C93v23Ev();
extern void _ZN4S7C93v24Ev();
extern void _ZN4S7C93v25Ev();
extern void _ZN4S7C93v26Ev();
extern void _ZN4S7C93v27Ev();
extern void _ZN4S7C93v28Ev();
extern void _ZN4S7C93v29Ev();
extern void _ZN4S7C93v30Ev();
extern void _ZN4S7C93v31Ev();
extern void _ZN4S7C93v32Ev();
extern void _ZN4S7C93v33Ev();
extern void _ZN4S7C93v34Ev();
extern void _ZN4S7C93v35Ev();
extern void _ZN4S7C93v36Ev();
extern void _ZN4S7C93v37Ev();
extern void _ZN4S7C93v38Ev();
extern void _ZN4S7C93v39Ev();
extern void _ZN4S7C93v40Ev();
extern void _ZN4S7C93v41Ev();
extern void _ZN4S7C93v42Ev();
extern void _ZN4S7C93v43Ev();
extern void _ZN4S7C93v44Ev();
extern void _ZN4S7C93v45Ev();
extern void _ZN4S7C93v46Ev();
extern void _ZN4S7C93v47Ev();
extern void _ZN4S7C93v48Ev();
extern void _ZN4S7C93v49Ev();
extern void _ZN4S7C93v50Ev();
extern void _ZN4S7C93v51Ev();
extern void _ZN4S7C93v52Ev();
extern void _ZN4S7C93v53Ev();
extern void _ZN4S7C93v54Ev();
extern void _ZN4S7C93v55Ev();
extern void _ZN4S7C93v56Ev();
extern void _ZN4S7C93v57Ev();
extern void _ZN4S7C93v58Ev();
extern void _ZN4S7C93v59Ev();
extern void _ZN4S7C93v60Ev();
extern void _ZN4S7C93v61Ev();
extern void _ZN4S7C93v62Ev();
extern void _ZN4S7C93v63Ev();
extern void _ZN4S7C93v64Ev();
extern void _ZN4S7C93v65Ev();
extern void _ZN4S7C93v66Ev();
extern void _ZN4S7C93v67Ev();
extern void _ZN4S7C93v68Ev();
extern void _ZN4S7C93v69Ev();
extern void _ZN4S7C93v70Ev();
extern void _ZN4S7C93v71Ev();
extern void _ZN4S7C93v72Ev();
extern void _ZN4S7C93v73Ev();
extern void _ZN4S7C93v74Ev();
extern void _ZN4S7C93v75Ev();
extern void _ZN4S7C93v76Ev();
extern void _ZN4S7C93v77Ev();
extern void _ZN4S7C93v78Ev();
extern void _ZN4S7C93v79Ev();
extern void _ZN4S7C93v80Ev();
extern void _ZN4S7C93v81Ev();
extern void _ZN4S7C93v82Ev();
extern void _ZN4S7C93v83Ev();
extern void _ZN4S7C93v84Ev();
extern void _ZN4S7C93v85Ev();
extern void _ZN4S7C93v86Ev();
extern void _ZN4S7C93v87Ev();
extern void _ZN4S7C93v88Ev();
extern void _ZN4S7C93v89Ev();
extern void _ZN4S7C93v90Ev();
extern void _ZN4S7C93v91Ev();
extern void _ZN4S7C93v92Ev();
extern void _ZN4S7C93v93Ev();
extern void _ZN4S7C93v94Ev();
extern void _ZN4S7C93v95Ev();
extern void _ZN4S7C93v96Ev();
extern void _ZN4S7C93v97Ev();
extern void _ZN4S7C93v98Ev();
extern void _ZN4S7C93v99Ev();
extern void _ZN4S7C94v100Ev();
extern void _ZN4S7C94v101Ev();
extern void _ZN4S7C94v102Ev();
extern void _ZN4S7C94v103Ev();
extern void _ZN4S7C94v104Ev();
extern void _ZN4S7C94v105Ev();
extern void _ZN4S7C94v106Ev();
extern void _ZN4S7C94v107Ev();
extern void _ZN4S7C94v108Ev();
extern void _ZN4S7C94v109Ev();
extern void _ZN4S7C94v110Ev();
extern void _ZN4S7C94v111Ev();
extern void _ZN4S7C74v112Ev();
extern void _ZN4S7C74v113Ev();
extern void _ZN4S7C74v114Ev();
extern void _ZN4S7C74v115Ev();
extern void _ZN4S7C74v116Ev();
extern void _ZN4S7C74v117Ev();
extern void _ZN4S7C74v118Ev();
extern void _ZN4S7C74v119Ev();
extern void _ZN4S7C74v120Ev();
extern void _ZN4S7C74v121Ev();
extern void _ZN4S7C74v122Ev();
extern void _ZN4S7C74v123Ev();
extern void _ZN4S7C74v124Ev();
extern void _ZN4S7C74v125Ev();
extern void _ZN4S7C74v126Ev();
extern void _ZN4S7C74v127Ev();
extern void _ZN4S7C74v128Ev();
extern void _ZN4S7C74v129Ev();
extern void _ZN4S7C74v130Ev();
extern void _ZN4S7C74v131Ev();
extern void _ZN4S7C74v132Ev();
extern void _ZN4S7C74v133Ev();
extern void _ZN4S7C74v134Ev();
extern void _ZN4S7C74v135Ev();
extern void _ZN4S7C74v136Ev();
extern void _ZN4S7C74v137Ev();
static  VTBL_ENTRY vtc_S7C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI4S7C7[0]),
  (VTBL_ENTRY)&_ZN4S7C7D1Ev,
  (VTBL_ENTRY)&_ZN4S7C7D0Ev,
  (VTBL_ENTRY)&_ZN4S7C92v5Ev,
  (VTBL_ENTRY)&_ZN4S7C92v6Ev,
  (VTBL_ENTRY)&_ZN4S7C92v7Ev,
  (VTBL_ENTRY)&_ZN4S7C92v8Ev,
  (VTBL_ENTRY)&_ZN4S7C92v9Ev,
  (VTBL_ENTRY)&_ZN4S7C93v10Ev,
  (VTBL_ENTRY)&_ZN4S7C93v11Ev,
  (VTBL_ENTRY)&_ZN4S7C93v12Ev,
  (VTBL_ENTRY)&_ZN4S7C93v13Ev,
  (VTBL_ENTRY)&_ZN4S7C93v14Ev,
  (VTBL_ENTRY)&_ZN4S7C93v15Ev,
  (VTBL_ENTRY)&_ZN4S7C93v16Ev,
  (VTBL_ENTRY)&_ZN4S7C93v17Ev,
  (VTBL_ENTRY)&_ZN4S7C93v18Ev,
  (VTBL_ENTRY)&_ZN4S7C93v19Ev,
  (VTBL_ENTRY)&_ZN4S7C93v20Ev,
  (VTBL_ENTRY)&_ZN4S7C93v21Ev,
  (VTBL_ENTRY)&_ZN4S7C93v22Ev,
  (VTBL_ENTRY)&_ZN4S7C93v23Ev,
  (VTBL_ENTRY)&_ZN4S7C93v24Ev,
  (VTBL_ENTRY)&_ZN4S7C93v25Ev,
  (VTBL_ENTRY)&_ZN4S7C93v26Ev,
  (VTBL_ENTRY)&_ZN4S7C93v27Ev,
  (VTBL_ENTRY)&_ZN4S7C93v28Ev,
  (VTBL_ENTRY)&_ZN4S7C93v29Ev,
  (VTBL_ENTRY)&_ZN4S7C93v30Ev,
  (VTBL_ENTRY)&_ZN4S7C93v31Ev,
  (VTBL_ENTRY)&_ZN4S7C93v32Ev,
  (VTBL_ENTRY)&_ZN4S7C93v33Ev,
  (VTBL_ENTRY)&_ZN4S7C93v34Ev,
  (VTBL_ENTRY)&_ZN4S7C93v35Ev,
  (VTBL_ENTRY)&_ZN4S7C93v36Ev,
  (VTBL_ENTRY)&_ZN4S7C93v37Ev,
  (VTBL_ENTRY)&_ZN4S7C93v38Ev,
  (VTBL_ENTRY)&_ZN4S7C93v39Ev,
  (VTBL_ENTRY)&_ZN4S7C93v40Ev,
  (VTBL_ENTRY)&_ZN4S7C93v41Ev,
  (VTBL_ENTRY)&_ZN4S7C93v42Ev,
  (VTBL_ENTRY)&_ZN4S7C93v43Ev,
  (VTBL_ENTRY)&_ZN4S7C93v44Ev,
  (VTBL_ENTRY)&_ZN4S7C93v45Ev,
  (VTBL_ENTRY)&_ZN4S7C93v46Ev,
  (VTBL_ENTRY)&_ZN4S7C93v47Ev,
  (VTBL_ENTRY)&_ZN4S7C93v48Ev,
  (VTBL_ENTRY)&_ZN4S7C93v49Ev,
  (VTBL_ENTRY)&_ZN4S7C93v50Ev,
  (VTBL_ENTRY)&_ZN4S7C93v51Ev,
  (VTBL_ENTRY)&_ZN4S7C93v52Ev,
  (VTBL_ENTRY)&_ZN4S7C93v53Ev,
  (VTBL_ENTRY)&_ZN4S7C93v54Ev,
  (VTBL_ENTRY)&_ZN4S7C93v55Ev,
  (VTBL_ENTRY)&_ZN4S7C93v56Ev,
  (VTBL_ENTRY)&_ZN4S7C93v57Ev,
  (VTBL_ENTRY)&_ZN4S7C93v58Ev,
  (VTBL_ENTRY)&_ZN4S7C93v59Ev,
  (VTBL_ENTRY)&_ZN4S7C93v60Ev,
  (VTBL_ENTRY)&_ZN4S7C93v61Ev,
  (VTBL_ENTRY)&_ZN4S7C93v62Ev,
  (VTBL_ENTRY)&_ZN4S7C93v63Ev,
  (VTBL_ENTRY)&_ZN4S7C93v64Ev,
  (VTBL_ENTRY)&_ZN4S7C93v65Ev,
  (VTBL_ENTRY)&_ZN4S7C93v66Ev,
  (VTBL_ENTRY)&_ZN4S7C93v67Ev,
  (VTBL_ENTRY)&_ZN4S7C93v68Ev,
  (VTBL_ENTRY)&_ZN4S7C93v69Ev,
  (VTBL_ENTRY)&_ZN4S7C93v70Ev,
  (VTBL_ENTRY)&_ZN4S7C93v71Ev,
  (VTBL_ENTRY)&_ZN4S7C93v72Ev,
  (VTBL_ENTRY)&_ZN4S7C93v73Ev,
  (VTBL_ENTRY)&_ZN4S7C93v74Ev,
  (VTBL_ENTRY)&_ZN4S7C93v75Ev,
  (VTBL_ENTRY)&_ZN4S7C93v76Ev,
  (VTBL_ENTRY)&_ZN4S7C93v77Ev,
  (VTBL_ENTRY)&_ZN4S7C93v78Ev,
  (VTBL_ENTRY)&_ZN4S7C93v79Ev,
  (VTBL_ENTRY)&_ZN4S7C93v80Ev,
  (VTBL_ENTRY)&_ZN4S7C93v81Ev,
  (VTBL_ENTRY)&_ZN4S7C93v82Ev,
  (VTBL_ENTRY)&_ZN4S7C93v83Ev,
  (VTBL_ENTRY)&_ZN4S7C93v84Ev,
  (VTBL_ENTRY)&_ZN4S7C93v85Ev,
  (VTBL_ENTRY)&_ZN4S7C93v86Ev,
  (VTBL_ENTRY)&_ZN4S7C93v87Ev,
  (VTBL_ENTRY)&_ZN4S7C93v88Ev,
  (VTBL_ENTRY)&_ZN4S7C93v89Ev,
  (VTBL_ENTRY)&_ZN4S7C93v90Ev,
  (VTBL_ENTRY)&_ZN4S7C93v91Ev,
  (VTBL_ENTRY)&_ZN4S7C93v92Ev,
  (VTBL_ENTRY)&_ZN4S7C93v93Ev,
  (VTBL_ENTRY)&_ZN4S7C93v94Ev,
  (VTBL_ENTRY)&_ZN4S7C93v95Ev,
  (VTBL_ENTRY)&_ZN4S7C93v96Ev,
  (VTBL_ENTRY)&_ZN4S7C93v97Ev,
  (VTBL_ENTRY)&_ZN4S7C93v98Ev,
  (VTBL_ENTRY)&_ZN4S7C93v99Ev,
  (VTBL_ENTRY)&_ZN4S7C94v100Ev,
  (VTBL_ENTRY)&_ZN4S7C94v101Ev,
  (VTBL_ENTRY)&_ZN4S7C94v102Ev,
  (VTBL_ENTRY)&_ZN4S7C94v103Ev,
  (VTBL_ENTRY)&_ZN4S7C94v104Ev,
  (VTBL_ENTRY)&_ZN4S7C94v105Ev,
  (VTBL_ENTRY)&_ZN4S7C94v106Ev,
  (VTBL_ENTRY)&_ZN4S7C94v107Ev,
  (VTBL_ENTRY)&_ZN4S7C94v108Ev,
  (VTBL_ENTRY)&_ZN4S7C94v109Ev,
  (VTBL_ENTRY)&_ZN4S7C94v110Ev,
  (VTBL_ENTRY)&_ZN4S7C94v111Ev,
  (VTBL_ENTRY)&_ZN4S7C74v112Ev,
  (VTBL_ENTRY)&_ZN4S7C74v113Ev,
  (VTBL_ENTRY)&_ZN4S7C74v114Ev,
  (VTBL_ENTRY)&_ZN4S7C74v115Ev,
  (VTBL_ENTRY)&_ZN4S7C74v116Ev,
  (VTBL_ENTRY)&_ZN4S7C74v117Ev,
  (VTBL_ENTRY)&_ZN4S7C74v118Ev,
  (VTBL_ENTRY)&_ZN4S7C74v119Ev,
  (VTBL_ENTRY)&_ZN4S7C74v120Ev,
  (VTBL_ENTRY)&_ZN4S7C74v121Ev,
  (VTBL_ENTRY)&_ZN4S7C74v122Ev,
  (VTBL_ENTRY)&_ZN4S7C74v123Ev,
  (VTBL_ENTRY)&_ZN4S7C74v124Ev,
  (VTBL_ENTRY)&_ZN4S7C74v125Ev,
  (VTBL_ENTRY)&_ZN4S7C74v126Ev,
  (VTBL_ENTRY)&_ZN4S7C74v127Ev,
  (VTBL_ENTRY)&_ZN4S7C74v128Ev,
  (VTBL_ENTRY)&_ZN4S7C74v129Ev,
  (VTBL_ENTRY)&_ZN4S7C74v130Ev,
  (VTBL_ENTRY)&_ZN4S7C74v131Ev,
  (VTBL_ENTRY)&_ZN4S7C74v132Ev,
  (VTBL_ENTRY)&_ZN4S7C74v133Ev,
  (VTBL_ENTRY)&_ZN4S7C74v134Ev,
  (VTBL_ENTRY)&_ZN4S7C74v135Ev,
  (VTBL_ENTRY)&_ZN4S7C74v136Ev,
  (VTBL_ENTRY)&_ZN4S7C74v137Ev,
};
extern VTBL_ENTRY _ZTI4S7C7[];
extern  VTBL_ENTRY _ZTV4S7C7[];
Class_Descriptor cd_S7C7 = {  "S7C7", // class name
  bases_S7C7, 3,
  &(vtc_S7C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI4S7C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV4S7C7),137, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7C6  : S7C7 {
  virtual void  v138(); // _ZN4S7C64v138Ev
  virtual void  v139(); // _ZN4S7C64v139Ev
  virtual void  v140(); // _ZN4S7C64v140Ev
  virtual void  v141(); // _ZN4S7C64v141Ev
  virtual void  v142(); // _ZN4S7C64v142Ev
  virtual void  v143(); // _ZN4S7C64v143Ev
  virtual void  v144(); // _ZN4S7C64v144Ev
  virtual void  v145(); // _ZN4S7C64v145Ev
  virtual void  v146(); // _ZN4S7C64v146Ev
  virtual void  v147(); // _ZN4S7C64v147Ev
  virtual void  v148(); // _ZN4S7C64v148Ev
  virtual void  v149(); // _ZN4S7C64v149Ev
  virtual void  v150(); // _ZN4S7C64v150Ev
  virtual void  v151(); // _ZN4S7C64v151Ev
  virtual void  v152(); // _ZN4S7C64v152Ev
  virtual void  v153(); // _ZN4S7C64v153Ev
  virtual void  v154(); // _ZN4S7C64v154Ev
  virtual void  v155(); // _ZN4S7C64v155Ev
  ~S7C6(); // tgen
  S7C6(); // tgen
};
//SIG(-1 S7C6) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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 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 v149 v150 v151} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S7C6 ::v138(){vfunc_called(this, "_ZN4S7C64v138Ev");}
void  S7C6 ::v139(){vfunc_called(this, "_ZN4S7C64v139Ev");}
void  S7C6 ::v140(){vfunc_called(this, "_ZN4S7C64v140Ev");}
void  S7C6 ::v141(){vfunc_called(this, "_ZN4S7C64v141Ev");}
void  S7C6 ::v142(){vfunc_called(this, "_ZN4S7C64v142Ev");}
void  S7C6 ::v143(){vfunc_called(this, "_ZN4S7C64v143Ev");}
void  S7C6 ::v144(){vfunc_called(this, "_ZN4S7C64v144Ev");}
void  S7C6 ::v145(){vfunc_called(this, "_ZN4S7C64v145Ev");}
void  S7C6 ::v146(){vfunc_called(this, "_ZN4S7C64v146Ev");}
void  S7C6 ::v147(){vfunc_called(this, "_ZN4S7C64v147Ev");}
void  S7C6 ::v148(){vfunc_called(this, "_ZN4S7C64v148Ev");}
void  S7C6 ::v149(){vfunc_called(this, "_ZN4S7C64v149Ev");}
void  S7C6 ::v150(){vfunc_called(this, "_ZN4S7C64v150Ev");}
void  S7C6 ::v151(){vfunc_called(this, "_ZN4S7C64v151Ev");}
void  S7C6 ::v152(){vfunc_called(this, "_ZN4S7C64v152Ev");}
void  S7C6 ::v153(){vfunc_called(this, "_ZN4S7C64v153Ev");}
void  S7C6 ::v154(){vfunc_called(this, "_ZN4S7C64v154Ev");}
void  S7C6 ::v155(){vfunc_called(this, "_ZN4S7C64v155Ev");}
S7C6 ::~S7C6(){ note_dtor("S7C6", this);} // tgen
S7C6 ::S7C6(){ note_ctor("S7C6", this);} // tgen

static void Test_S7C6()
{
  extern Class_Descriptor cd_S7C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7C6, buf);
    S7C6 *dp, &lv = *(dp=new (buf) S7C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7C6)");
    check_base_class_offset(lv, (S1C11_nt*)(S7C9*)(S7C8*)(S7C7*), 0, "S7C6");
    check_base_class_offset(lv, (S7C9*)(S7C8*)(S7C7*), 0, "S7C6");
    check_base_class_offset(lv, (S7C8*)(S7C7*), 0, "S7C6");
    check_base_class_offset(lv, (S7C7*), 0, "S7C6");
    test_class_info(&lv, &cd_S7C6);
    dp->~S7C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7C6(Test_S7C6, "S7C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN4S7C6C1Ev();
extern void _ZN4S7C6D1Ev();
Name_Map name_map_S7C6[] = {
  NSPAIR(_ZN4S7C6C1Ev),
  NSPAIR(_ZN4S7C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S7C9;
extern VTBL_ENTRY _ZTI4S7C9[];
extern  VTBL_ENTRY _ZTV4S7C9[];
extern Class_Descriptor cd_S7C8;
extern VTBL_ENTRY _ZTI4S7C8[];
extern  VTBL_ENTRY _ZTV4S7C8[];
extern Class_Descriptor cd_S7C7;
extern VTBL_ENTRY _ZTI4S7C7[];
extern  VTBL_ENTRY _ZTV4S7C7[];
static Base_Class bases_S7C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI4S7C6[];
extern void _ZN4S7C6D1Ev();
extern void _ZN4S7C6D0Ev();
extern void _ZN4S7C92v5Ev();
extern void _ZN4S7C92v6Ev();
extern void _ZN4S7C92v7Ev();
extern void _ZN4S7C92v8Ev();
extern void _ZN4S7C92v9Ev();
extern void _ZN4S7C93v10Ev();
extern void _ZN4S7C93v11Ev();
extern void _ZN4S7C93v12Ev();
extern void _ZN4S7C93v13Ev();
extern void _ZN4S7C93v14Ev();
extern void _ZN4S7C93v15Ev();
extern void _ZN4S7C93v16Ev();
extern void _ZN4S7C93v17Ev();
extern void _ZN4S7C93v18Ev();
extern void _ZN4S7C93v19Ev();
extern void _ZN4S7C93v20Ev();
extern void _ZN4S7C93v21Ev();
extern void _ZN4S7C93v22Ev();
extern void _ZN4S7C93v23Ev();
extern void _ZN4S7C93v24Ev();
extern void _ZN4S7C93v25Ev();
extern void _ZN4S7C93v26Ev();
extern void _ZN4S7C93v27Ev();
extern void _ZN4S7C93v28Ev();
extern void _ZN4S7C93v29Ev();
extern void _ZN4S7C93v30Ev();
extern void _ZN4S7C93v31Ev();
extern void _ZN4S7C93v32Ev();
extern void _ZN4S7C93v33Ev();
extern void _ZN4S7C93v34Ev();
extern void _ZN4S7C93v35Ev();
extern void _ZN4S7C93v36Ev();
extern void _ZN4S7C93v37Ev();
extern void _ZN4S7C93v38Ev();
extern void _ZN4S7C93v39Ev();
extern void _ZN4S7C93v40Ev();
extern void _ZN4S7C93v41Ev();
extern void _ZN4S7C93v42Ev();
extern void _ZN4S7C93v43Ev();
extern void _ZN4S7C93v44Ev();
extern void _ZN4S7C93v45Ev();
extern void _ZN4S7C93v46Ev();
extern void _ZN4S7C93v47Ev();
extern void _ZN4S7C93v48Ev();
extern void _ZN4S7C93v49Ev();
extern void _ZN4S7C93v50Ev();
extern void _ZN4S7C93v51Ev();
extern void _ZN4S7C93v52Ev();
extern void _ZN4S7C93v53Ev();
extern void _ZN4S7C93v54Ev();
extern void _ZN4S7C93v55Ev();
extern void _ZN4S7C93v56Ev();
extern void _ZN4S7C93v57Ev();
extern void _ZN4S7C93v58Ev();
extern void _ZN4S7C93v59Ev();
extern void _ZN4S7C93v60Ev();
extern void _ZN4S7C93v61Ev();
extern void _ZN4S7C93v62Ev();
extern void _ZN4S7C93v63Ev();
extern void _ZN4S7C93v64Ev();
extern void _ZN4S7C93v65Ev();
extern void _ZN4S7C93v66Ev();
extern void _ZN4S7C93v67Ev();
extern void _ZN4S7C93v68Ev();
extern void _ZN4S7C93v69Ev();
extern void _ZN4S7C93v70Ev();
extern void _ZN4S7C93v71Ev();
extern void _ZN4S7C93v72Ev();
extern void _ZN4S7C93v73Ev();
extern void _ZN4S7C93v74Ev();
extern void _ZN4S7C93v75Ev();
extern void _ZN4S7C93v76Ev();
extern void _ZN4S7C93v77Ev();
extern void _ZN4S7C93v78Ev();
extern void _ZN4S7C93v79Ev();
extern void _ZN4S7C93v80Ev();
extern void _ZN4S7C93v81Ev();
extern void _ZN4S7C93v82Ev();
extern void _ZN4S7C93v83Ev();
extern void _ZN4S7C93v84Ev();
extern void _ZN4S7C93v85Ev();
extern void _ZN4S7C93v86Ev();
extern void _ZN4S7C93v87Ev();
extern void _ZN4S7C93v88Ev();
extern void _ZN4S7C93v89Ev();
extern void _ZN4S7C93v90Ev();
extern void _ZN4S7C93v91Ev();
extern void _ZN4S7C93v92Ev();
extern void _ZN4S7C93v93Ev();
extern void _ZN4S7C93v94Ev();
extern void _ZN4S7C93v95Ev();
extern void _ZN4S7C93v96Ev();
extern void _ZN4S7C93v97Ev();
extern void _ZN4S7C93v98Ev();
extern void _ZN4S7C93v99Ev();
extern void _ZN4S7C94v100Ev();
extern void _ZN4S7C94v101Ev();
extern void _ZN4S7C94v102Ev();
extern void _ZN4S7C94v103Ev();
extern void _ZN4S7C94v104Ev();
extern void _ZN4S7C94v105Ev();
extern void _ZN4S7C94v106Ev();
extern void _ZN4S7C94v107Ev();
extern void _ZN4S7C94v108Ev();
extern void _ZN4S7C94v109Ev();
extern void _ZN4S7C94v110Ev();
extern void _ZN4S7C94v111Ev();
extern void _ZN4S7C74v112Ev();
extern void _ZN4S7C74v113Ev();
extern void _ZN4S7C74v114Ev();
extern void _ZN4S7C74v115Ev();
extern void _ZN4S7C74v116Ev();
extern void _ZN4S7C74v117Ev();
extern void _ZN4S7C74v118Ev();
extern void _ZN4S7C74v119Ev();
extern void _ZN4S7C74v120Ev();
extern void _ZN4S7C74v121Ev();
extern void _ZN4S7C74v122Ev();
extern void _ZN4S7C74v123Ev();
extern void _ZN4S7C74v124Ev();
extern void _ZN4S7C74v125Ev();
extern void _ZN4S7C74v126Ev();
extern void _ZN4S7C74v127Ev();
extern void _ZN4S7C74v128Ev();
extern void _ZN4S7C74v129Ev();
extern void _ZN4S7C74v130Ev();
extern void _ZN4S7C74v131Ev();
extern void _ZN4S7C74v132Ev();
extern void _ZN4S7C74v133Ev();
extern void _ZN4S7C74v134Ev();
extern void _ZN4S7C74v135Ev();
extern void _ZN4S7C74v136Ev();
extern void _ZN4S7C74v137Ev();
extern void _ZN4S7C64v138Ev();
extern void _ZN4S7C64v139Ev();
extern void _ZN4S7C64v140Ev();
extern void _ZN4S7C64v141Ev();
extern void _ZN4S7C64v142Ev();
extern void _ZN4S7C64v143Ev();
extern void _ZN4S7C64v144Ev();
extern void _ZN4S7C64v145Ev();
extern void _ZN4S7C64v146Ev();
extern void _ZN4S7C64v147Ev();
extern void _ZN4S7C64v148Ev();
extern void _ZN4S7C64v149Ev();
extern void _ZN4S7C64v150Ev();
extern void _ZN4S7C64v151Ev();
extern void _ZN4S7C64v152Ev();
extern void _ZN4S7C64v153Ev();
extern void _ZN4S7C64v154Ev();
extern void _ZN4S7C64v155Ev();
static  VTBL_ENTRY vtc_S7C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI4S7C6[0]),
  (VTBL_ENTRY)&_ZN4S7C6D1Ev,
  (VTBL_ENTRY)&_ZN4S7C6D0Ev,
  (VTBL_ENTRY)&_ZN4S7C92v5Ev,
  (VTBL_ENTRY)&_ZN4S7C92v6Ev,
  (VTBL_ENTRY)&_ZN4S7C92v7Ev,
  (VTBL_ENTRY)&_ZN4S7C92v8Ev,
  (VTBL_ENTRY)&_ZN4S7C92v9Ev,
  (VTBL_ENTRY)&_ZN4S7C93v10Ev,
  (VTBL_ENTRY)&_ZN4S7C93v11Ev,
  (VTBL_ENTRY)&_ZN4S7C93v12Ev,
  (VTBL_ENTRY)&_ZN4S7C93v13Ev,
  (VTBL_ENTRY)&_ZN4S7C93v14Ev,
  (VTBL_ENTRY)&_ZN4S7C93v15Ev,
  (VTBL_ENTRY)&_ZN4S7C93v16Ev,
  (VTBL_ENTRY)&_ZN4S7C93v17Ev,
  (VTBL_ENTRY)&_ZN4S7C93v18Ev,
  (VTBL_ENTRY)&_ZN4S7C93v19Ev,
  (VTBL_ENTRY)&_ZN4S7C93v20Ev,
  (VTBL_ENTRY)&_ZN4S7C93v21Ev,
  (VTBL_ENTRY)&_ZN4S7C93v22Ev,
  (VTBL_ENTRY)&_ZN4S7C93v23Ev,
  (VTBL_ENTRY)&_ZN4S7C93v24Ev,
  (VTBL_ENTRY)&_ZN4S7C93v25Ev,
  (VTBL_ENTRY)&_ZN4S7C93v26Ev,
  (VTBL_ENTRY)&_ZN4S7C93v27Ev,
  (VTBL_ENTRY)&_ZN4S7C93v28Ev,
  (VTBL_ENTRY)&_ZN4S7C93v29Ev,
  (VTBL_ENTRY)&_ZN4S7C93v30Ev,
  (VTBL_ENTRY)&_ZN4S7C93v31Ev,
  (VTBL_ENTRY)&_ZN4S7C93v32Ev,
  (VTBL_ENTRY)&_ZN4S7C93v33Ev,
  (VTBL_ENTRY)&_ZN4S7C93v34Ev,
  (VTBL_ENTRY)&_ZN4S7C93v35Ev,
  (VTBL_ENTRY)&_ZN4S7C93v36Ev,
  (VTBL_ENTRY)&_ZN4S7C93v37Ev,
  (VTBL_ENTRY)&_ZN4S7C93v38Ev,
  (VTBL_ENTRY)&_ZN4S7C93v39Ev,
  (VTBL_ENTRY)&_ZN4S7C93v40Ev,
  (VTBL_ENTRY)&_ZN4S7C93v41Ev,
  (VTBL_ENTRY)&_ZN4S7C93v42Ev,
  (VTBL_ENTRY)&_ZN4S7C93v43Ev,
  (VTBL_ENTRY)&_ZN4S7C93v44Ev,
  (VTBL_ENTRY)&_ZN4S7C93v45Ev,
  (VTBL_ENTRY)&_ZN4S7C93v46Ev,
  (VTBL_ENTRY)&_ZN4S7C93v47Ev,
  (VTBL_ENTRY)&_ZN4S7C93v48Ev,
  (VTBL_ENTRY)&_ZN4S7C93v49Ev,
  (VTBL_ENTRY)&_ZN4S7C93v50Ev,
  (VTBL_ENTRY)&_ZN4S7C93v51Ev,
  (VTBL_ENTRY)&_ZN4S7C93v52Ev,
  (VTBL_ENTRY)&_ZN4S7C93v53Ev,
  (VTBL_ENTRY)&_ZN4S7C93v54Ev,
  (VTBL_ENTRY)&_ZN4S7C93v55Ev,
  (VTBL_ENTRY)&_ZN4S7C93v56Ev,
  (VTBL_ENTRY)&_ZN4S7C93v57Ev,
  (VTBL_ENTRY)&_ZN4S7C93v58Ev,
  (VTBL_ENTRY)&_ZN4S7C93v59Ev,
  (VTBL_ENTRY)&_ZN4S7C93v60Ev,
  (VTBL_ENTRY)&_ZN4S7C93v61Ev,
  (VTBL_ENTRY)&_ZN4S7C93v62Ev,
  (VTBL_ENTRY)&_ZN4S7C93v63Ev,
  (VTBL_ENTRY)&_ZN4S7C93v64Ev,
  (VTBL_ENTRY)&_ZN4S7C93v65Ev,
  (VTBL_ENTRY)&_ZN4S7C93v66Ev,
  (VTBL_ENTRY)&_ZN4S7C93v67Ev,
  (VTBL_ENTRY)&_ZN4S7C93v68Ev,
  (VTBL_ENTRY)&_ZN4S7C93v69Ev,
  (VTBL_ENTRY)&_ZN4S7C93v70Ev,
  (VTBL_ENTRY)&_ZN4S7C93v71Ev,
  (VTBL_ENTRY)&_ZN4S7C93v72Ev,
  (VTBL_ENTRY)&_ZN4S7C93v73Ev,
  (VTBL_ENTRY)&_ZN4S7C93v74Ev,
  (VTBL_ENTRY)&_ZN4S7C93v75Ev,
  (VTBL_ENTRY)&_ZN4S7C93v76Ev,
  (VTBL_ENTRY)&_ZN4S7C93v77Ev,
  (VTBL_ENTRY)&_ZN4S7C93v78Ev,
  (VTBL_ENTRY)&_ZN4S7C93v79Ev,
  (VTBL_ENTRY)&_ZN4S7C93v80Ev,
  (VTBL_ENTRY)&_ZN4S7C93v81Ev,
  (VTBL_ENTRY)&_ZN4S7C93v82Ev,
  (VTBL_ENTRY)&_ZN4S7C93v83Ev,
  (VTBL_ENTRY)&_ZN4S7C93v84Ev,
  (VTBL_ENTRY)&_ZN4S7C93v85Ev,
  (VTBL_ENTRY)&_ZN4S7C93v86Ev,
  (VTBL_ENTRY)&_ZN4S7C93v87Ev,
  (VTBL_ENTRY)&_ZN4S7C93v88Ev,
  (VTBL_ENTRY)&_ZN4S7C93v89Ev,
  (VTBL_ENTRY)&_ZN4S7C93v90Ev,
  (VTBL_ENTRY)&_ZN4S7C93v91Ev,
  (VTBL_ENTRY)&_ZN4S7C93v92Ev,
  (VTBL_ENTRY)&_ZN4S7C93v93Ev,
  (VTBL_ENTRY)&_ZN4S7C93v94Ev,
  (VTBL_ENTRY)&_ZN4S7C93v95Ev,
  (VTBL_ENTRY)&_ZN4S7C93v96Ev,
  (VTBL_ENTRY)&_ZN4S7C93v97Ev,
  (VTBL_ENTRY)&_ZN4S7C93v98Ev,
  (VTBL_ENTRY)&_ZN4S7C93v99Ev,
  (VTBL_ENTRY)&_ZN4S7C94v100Ev,
  (VTBL_ENTRY)&_ZN4S7C94v101Ev,
  (VTBL_ENTRY)&_ZN4S7C94v102Ev,
  (VTBL_ENTRY)&_ZN4S7C94v103Ev,
  (VTBL_ENTRY)&_ZN4S7C94v104Ev,
  (VTBL_ENTRY)&_ZN4S7C94v105Ev,
  (VTBL_ENTRY)&_ZN4S7C94v106Ev,
  (VTBL_ENTRY)&_ZN4S7C94v107Ev,
  (VTBL_ENTRY)&_ZN4S7C94v108Ev,
  (VTBL_ENTRY)&_ZN4S7C94v109Ev,
  (VTBL_ENTRY)&_ZN4S7C94v110Ev,
  (VTBL_ENTRY)&_ZN4S7C94v111Ev,
  (VTBL_ENTRY)&_ZN4S7C74v112Ev,
  (VTBL_ENTRY)&_ZN4S7C74v113Ev,
  (VTBL_ENTRY)&_ZN4S7C74v114Ev,
  (VTBL_ENTRY)&_ZN4S7C74v115Ev,
  (VTBL_ENTRY)&_ZN4S7C74v116Ev,
  (VTBL_ENTRY)&_ZN4S7C74v117Ev,
  (VTBL_ENTRY)&_ZN4S7C74v118Ev,
  (VTBL_ENTRY)&_ZN4S7C74v119Ev,
  (VTBL_ENTRY)&_ZN4S7C74v120Ev,
  (VTBL_ENTRY)&_ZN4S7C74v121Ev,
  (VTBL_ENTRY)&_ZN4S7C74v122Ev,
  (VTBL_ENTRY)&_ZN4S7C74v123Ev,
  (VTBL_ENTRY)&_ZN4S7C74v124Ev,
  (VTBL_ENTRY)&_ZN4S7C74v125Ev,
  (VTBL_ENTRY)&_ZN4S7C74v126Ev,
  (VTBL_ENTRY)&_ZN4S7C74v127Ev,
  (VTBL_ENTRY)&_ZN4S7C74v128Ev,
  (VTBL_ENTRY)&_ZN4S7C74v129Ev,
  (VTBL_ENTRY)&_ZN4S7C74v130Ev,
  (VTBL_ENTRY)&_ZN4S7C74v131Ev,
  (VTBL_ENTRY)&_ZN4S7C74v132Ev,
  (VTBL_ENTRY)&_ZN4S7C74v133Ev,
  (VTBL_ENTRY)&_ZN4S7C74v134Ev,
  (VTBL_ENTRY)&_ZN4S7C74v135Ev,
  (VTBL_ENTRY)&_ZN4S7C74v136Ev,
  (VTBL_ENTRY)&_ZN4S7C74v137Ev,
  (VTBL_ENTRY)&_ZN4S7C64v138Ev,
  (VTBL_ENTRY)&_ZN4S7C64v139Ev,
  (VTBL_ENTRY)&_ZN4S7C64v140Ev,
  (VTBL_ENTRY)&_ZN4S7C64v141Ev,
  (VTBL_ENTRY)&_ZN4S7C64v142Ev,
  (VTBL_ENTRY)&_ZN4S7C64v143Ev,
  (VTBL_ENTRY)&_ZN4S7C64v144Ev,
  (VTBL_ENTRY)&_ZN4S7C64v145Ev,
  (VTBL_ENTRY)&_ZN4S7C64v146Ev,
  (VTBL_ENTRY)&_ZN4S7C64v147Ev,
  (VTBL_ENTRY)&_ZN4S7C64v148Ev,
  (VTBL_ENTRY)&_ZN4S7C64v149Ev,
  (VTBL_ENTRY)&_ZN4S7C64v150Ev,
  (VTBL_ENTRY)&_ZN4S7C64v151Ev,
  (VTBL_ENTRY)&_ZN4S7C64v152Ev,
  (VTBL_ENTRY)&_ZN4S7C64v153Ev,
  (VTBL_ENTRY)&_ZN4S7C64v154Ev,
  (VTBL_ENTRY)&_ZN4S7C64v155Ev,
};
extern VTBL_ENTRY _ZTI4S7C6[];
extern  VTBL_ENTRY _ZTV4S7C6[];
Class_Descriptor cd_S7C6 = {  "S7C6", // class name
  bases_S7C6, 4,
  &(vtc_S7C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI4S7C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV4S7C6),155, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7C5  : S7C6 {
  virtual void  v156(); // _ZN4S7C54v156Ev
  virtual void  v157(); // _ZN4S7C54v157Ev
  virtual void  v158(); // _ZN4S7C54v158Ev
  virtual void  v159(); // _ZN4S7C54v159Ev
  virtual void  v160(); // _ZN4S7C54v160Ev
  virtual void  v161(); // _ZN4S7C54v161Ev
  virtual void  v162(); // _ZN4S7C54v162Ev
  virtual void  v163(); // _ZN4S7C54v163Ev
  virtual void  v164(); // _ZN4S7C54v164Ev
  virtual void  v165(); // _ZN4S7C54v165Ev
  virtual void  v166(); // _ZN4S7C54v166Ev
  virtual void  v167(); // _ZN4S7C54v167Ev
  virtual void  v168(); // _ZN4S7C54v168Ev
  virtual void  v169(); // _ZN4S7C54v169Ev
  virtual void  v170(); // _ZN4S7C54v170Ev
  virtual void  v171(); // _ZN4S7C54v171Ev
  virtual void  v172(); // _ZN4S7C54v172Ev
  virtual void  v173(); // _ZN4S7C54v173Ev
  virtual void  v174(); // _ZN4S7C54v174Ev
  virtual void  v175(); // _ZN4S7C54v175Ev
  virtual void  v176(); // _ZN4S7C54v176Ev
  virtual void  v177(); // _ZN4S7C54v177Ev
  virtual void  v178(); // _ZN4S7C54v178Ev
  virtual void  v179(); // _ZN4S7C54v179Ev
  virtual void  v180(); // _ZN4S7C54v180Ev
  virtual void  v181(); // _ZN4S7C54v181Ev
  ~S7C5(); // tgen
  S7C5(); // tgen
};
//SIG(-1 S7C5) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m Fp Fi} 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 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 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} 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}


void  S7C5 ::v156(){vfunc_called(this, "_ZN4S7C54v156Ev");}
void  S7C5 ::v157(){vfunc_called(this, "_ZN4S7C54v157Ev");}
void  S7C5 ::v158(){vfunc_called(this, "_ZN4S7C54v158Ev");}
void  S7C5 ::v159(){vfunc_called(this, "_ZN4S7C54v159Ev");}
void  S7C5 ::v160(){vfunc_called(this, "_ZN4S7C54v160Ev");}
void  S7C5 ::v161(){vfunc_called(this, "_ZN4S7C54v161Ev");}
void  S7C5 ::v162(){vfunc_called(this, "_ZN4S7C54v162Ev");}
void  S7C5 ::v163(){vfunc_called(this, "_ZN4S7C54v163Ev");}
void  S7C5 ::v164(){vfunc_called(this, "_ZN4S7C54v164Ev");}
void  S7C5 ::v165(){vfunc_called(this, "_ZN4S7C54v165Ev");}
void  S7C5 ::v166(){vfunc_called(this, "_ZN4S7C54v166Ev");}
void  S7C5 ::v167(){vfunc_called(this, "_ZN4S7C54v167Ev");}
void  S7C5 ::v168(){vfunc_called(this, "_ZN4S7C54v168Ev");}
void  S7C5 ::v169(){vfunc_called(this, "_ZN4S7C54v169Ev");}
void  S7C5 ::v170(){vfunc_called(this, "_ZN4S7C54v170Ev");}
void  S7C5 ::v171(){vfunc_called(this, "_ZN4S7C54v171Ev");}
void  S7C5 ::v172(){vfunc_called(this, "_ZN4S7C54v172Ev");}
void  S7C5 ::v173(){vfunc_called(this, "_ZN4S7C54v173Ev");}
void  S7C5 ::v174(){vfunc_called(this, "_ZN4S7C54v174Ev");}
void  S7C5 ::v175(){vfunc_called(this, "_ZN4S7C54v175Ev");}
void  S7C5 ::v176(){vfunc_called(this, "_ZN4S7C54v176Ev");}
void  S7C5 ::v177(){vfunc_called(this, "_ZN4S7C54v177Ev");}
void  S7C5 ::v178(){vfunc_called(this, "_ZN4S7C54v178Ev");}
void  S7C5 ::v179(){vfunc_called(this, "_ZN4S7C54v179Ev");}
void  S7C5 ::v180(){vfunc_called(this, "_ZN4S7C54v180Ev");}
void  S7C5 ::v181(){vfunc_called(this, "_ZN4S7C54v181Ev");}
S7C5 ::~S7C5(){ note_dtor("S7C5", this);} // tgen
S7C5 ::S7C5(){ note_ctor("S7C5", this);} // tgen

static void Test_S7C5()
{
  extern Class_Descriptor cd_S7C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7C5, buf);
    S7C5 *dp, &lv = *(dp=new (buf) S7C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7C5)");
    check_base_class_offset(lv, (S1C11_nt*)(S7C9*)(S7C8*)(S7C7*)(S7C6*), 0, "S7C5");
    check_base_class_offset(lv, (S7C9*)(S7C8*)(S7C7*)(S7C6*), 0, "S7C5");
    check_base_class_offset(lv, (S7C8*)(S7C7*)(S7C6*), 0, "S7C5");
    check_base_class_offset(lv, (S7C7*)(S7C6*), 0, "S7C5");
    check_base_class_offset(lv, (S7C6*), 0, "S7C5");
    test_class_info(&lv, &cd_S7C5);
    dp->~S7C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7C5(Test_S7C5, "S7C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN4S7C5C1Ev();
extern void _ZN4S7C5D1Ev();
Name_Map name_map_S7C5[] = {
  NSPAIR(_ZN4S7C5C1Ev),
  NSPAIR(_ZN4S7C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S7C9;
extern VTBL_ENTRY _ZTI4S7C9[];
extern  VTBL_ENTRY _ZTV4S7C9[];
extern Class_Descriptor cd_S7C8;
extern VTBL_ENTRY _ZTI4S7C8[];
extern  VTBL_ENTRY _ZTV4S7C8[];
extern Class_Descriptor cd_S7C7;
extern VTBL_ENTRY _ZTI4S7C7[];
extern  VTBL_ENTRY _ZTV4S7C7[];
extern Class_Descriptor cd_S7C6;
extern VTBL_ENTRY _ZTI4S7C6[];
extern  VTBL_ENTRY _ZTV4S7C6[];
static Base_Class bases_S7C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI4S7C5[];
extern void _ZN4S7C5D1Ev();
extern void _ZN4S7C5D0Ev();
extern void _ZN4S7C92v5Ev();
extern void _ZN4S7C92v6Ev();
extern void _ZN4S7C92v7Ev();
extern void _ZN4S7C92v8Ev();
extern void _ZN4S7C92v9Ev();
extern void _ZN4S7C93v10Ev();
extern void _ZN4S7C93v11Ev();
extern void _ZN4S7C93v12Ev();
extern void _ZN4S7C93v13Ev();
extern void _ZN4S7C93v14Ev();
extern void _ZN4S7C93v15Ev();
extern void _ZN4S7C93v16Ev();
extern void _ZN4S7C93v17Ev();
extern void _ZN4S7C93v18Ev();
extern void _ZN4S7C93v19Ev();
extern void _ZN4S7C93v20Ev();
extern void _ZN4S7C93v21Ev();
extern void _ZN4S7C93v22Ev();
extern void _ZN4S7C93v23Ev();
extern void _ZN4S7C93v24Ev();
extern void _ZN4S7C93v25Ev();
extern void _ZN4S7C93v26Ev();
extern void _ZN4S7C93v27Ev();
extern void _ZN4S7C93v28Ev();
extern void _ZN4S7C93v29Ev();
extern void _ZN4S7C93v30Ev();
extern void _ZN4S7C93v31Ev();
extern void _ZN4S7C93v32Ev();
extern void _ZN4S7C93v33Ev();
extern void _ZN4S7C93v34Ev();
extern void _ZN4S7C93v35Ev();
extern void _ZN4S7C93v36Ev();
extern void _ZN4S7C93v37Ev();
extern void _ZN4S7C93v38Ev();
extern void _ZN4S7C93v39Ev();
extern void _ZN4S7C93v40Ev();
extern void _ZN4S7C93v41Ev();
extern void _ZN4S7C93v42Ev();
extern void _ZN4S7C93v43Ev();
extern void _ZN4S7C93v44Ev();
extern void _ZN4S7C93v45Ev();
extern void _ZN4S7C93v46Ev();
extern void _ZN4S7C93v47Ev();
extern void _ZN4S7C93v48Ev();
extern void _ZN4S7C93v49Ev();
extern void _ZN4S7C93v50Ev();
extern void _ZN4S7C93v51Ev();
extern void _ZN4S7C93v52Ev();
extern void _ZN4S7C93v53Ev();
extern void _ZN4S7C93v54Ev();
extern void _ZN4S7C93v55Ev();
extern void _ZN4S7C93v56Ev();
extern void _ZN4S7C93v57Ev();
extern void _ZN4S7C93v58Ev();
extern void _ZN4S7C93v59Ev();
extern void _ZN4S7C93v60Ev();
extern void _ZN4S7C93v61Ev();
extern void _ZN4S7C93v62Ev();
extern void _ZN4S7C93v63Ev();
extern void _ZN4S7C93v64Ev();
extern void _ZN4S7C93v65Ev();
extern void _ZN4S7C93v66Ev();
extern void _ZN4S7C93v67Ev();
extern void _ZN4S7C93v68Ev();
extern void _ZN4S7C93v69Ev();
extern void _ZN4S7C93v70Ev();
extern void _ZN4S7C93v71Ev();
extern void _ZN4S7C93v72Ev();
extern void _ZN4S7C93v73Ev();
extern void _ZN4S7C93v74Ev();
extern void _ZN4S7C93v75Ev();
extern void _ZN4S7C93v76Ev();
extern void _ZN4S7C93v77Ev();
extern void _ZN4S7C93v78Ev();
extern void _ZN4S7C93v79Ev();
extern void _ZN4S7C93v80Ev();
extern void _ZN4S7C93v81Ev();
extern void _ZN4S7C93v82Ev();
extern void _ZN4S7C93v83Ev();
extern void _ZN4S7C93v84Ev();
extern void _ZN4S7C93v85Ev();
extern void _ZN4S7C93v86Ev();
extern void _ZN4S7C93v87Ev();
extern void _ZN4S7C93v88Ev();
extern void _ZN4S7C93v89Ev();
extern void _ZN4S7C93v90Ev();
extern void _ZN4S7C93v91Ev();
extern void _ZN4S7C93v92Ev();
extern void _ZN4S7C93v93Ev();
extern void _ZN4S7C93v94Ev();
extern void _ZN4S7C93v95Ev();
extern void _ZN4S7C93v96Ev();
extern void _ZN4S7C93v97Ev();
extern void _ZN4S7C93v98Ev();
extern void _ZN4S7C93v99Ev();
extern void _ZN4S7C94v100Ev();
extern void _ZN4S7C94v101Ev();
extern void _ZN4S7C94v102Ev();
extern void _ZN4S7C94v103Ev();
extern void _ZN4S7C94v104Ev();
extern void _ZN4S7C94v105Ev();
extern void _ZN4S7C94v106Ev();
extern void _ZN4S7C94v107Ev();
extern void _ZN4S7C94v108Ev();
extern void _ZN4S7C94v109Ev();
extern void _ZN4S7C94v110Ev();
extern void _ZN4S7C94v111Ev();
extern void _ZN4S7C74v112Ev();
extern void _ZN4S7C74v113Ev();
extern void _ZN4S7C74v114Ev();
extern void _ZN4S7C74v115Ev();
extern void _ZN4S7C74v116Ev();
extern void _ZN4S7C74v117Ev();
extern void _ZN4S7C74v118Ev();
extern void _ZN4S7C74v119Ev();
extern void _ZN4S7C74v120Ev();
extern void _ZN4S7C74v121Ev();
extern void _ZN4S7C74v122Ev();
extern void _ZN4S7C74v123Ev();
extern void _ZN4S7C74v124Ev();
extern void _ZN4S7C74v125Ev();
extern void _ZN4S7C74v126Ev();
extern void _ZN4S7C74v127Ev();
extern void _ZN4S7C74v128Ev();
extern void _ZN4S7C74v129Ev();
extern void _ZN4S7C74v130Ev();
extern void _ZN4S7C74v131Ev();
extern void _ZN4S7C74v132Ev();
extern void _ZN4S7C74v133Ev();
extern void _ZN4S7C74v134Ev();
extern void _ZN4S7C74v135Ev();
extern void _ZN4S7C74v136Ev();
extern void _ZN4S7C74v137Ev();
extern void _ZN4S7C64v138Ev();
extern void _ZN4S7C64v139Ev();
extern void _ZN4S7C64v140Ev();
extern void _ZN4S7C64v141Ev();
extern void _ZN4S7C64v142Ev();
extern void _ZN4S7C64v143Ev();
extern void _ZN4S7C64v144Ev();
extern void _ZN4S7C64v145Ev();
extern void _ZN4S7C64v146Ev();
extern void _ZN4S7C64v147Ev();
extern void _ZN4S7C64v148Ev();
extern void _ZN4S7C64v149Ev();
extern void _ZN4S7C64v150Ev();
extern void _ZN4S7C64v151Ev();
extern void _ZN4S7C64v152Ev();
extern void _ZN4S7C64v153Ev();
extern void _ZN4S7C64v154Ev();
extern void _ZN4S7C64v155Ev();
extern void _ZN4S7C54v156Ev();
extern void _ZN4S7C54v157Ev();
extern void _ZN4S7C54v158Ev();
extern void _ZN4S7C54v159Ev();
extern void _ZN4S7C54v160Ev();
extern void _ZN4S7C54v161Ev();
extern void _ZN4S7C54v162Ev();
extern void _ZN4S7C54v163Ev();
extern void _ZN4S7C54v164Ev();
extern void _ZN4S7C54v165Ev();
extern void _ZN4S7C54v166Ev();
extern void _ZN4S7C54v167Ev();
extern void _ZN4S7C54v168Ev();
extern void _ZN4S7C54v169Ev();
extern void _ZN4S7C54v170Ev();
extern void _ZN4S7C54v171Ev();
extern void _ZN4S7C54v172Ev();
extern void _ZN4S7C54v173Ev();
extern void _ZN4S7C54v174Ev();
extern void _ZN4S7C54v175Ev();
extern void _ZN4S7C54v176Ev();
extern void _ZN4S7C54v177Ev();
extern void _ZN4S7C54v178Ev();
extern void _ZN4S7C54v179Ev();
extern void _ZN4S7C54v180Ev();
extern void _ZN4S7C54v181Ev();
static  VTBL_ENTRY vtc_S7C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI4S7C5[0]),
  (VTBL_ENTRY)&_ZN4S7C5D1Ev,
  (VTBL_ENTRY)&_ZN4S7C5D0Ev,
  (VTBL_ENTRY)&_ZN4S7C92v5Ev,
  (VTBL_ENTRY)&_ZN4S7C92v6Ev,
  (VTBL_ENTRY)&_ZN4S7C92v7Ev,
  (VTBL_ENTRY)&_ZN4S7C92v8Ev,
  (VTBL_ENTRY)&_ZN4S7C92v9Ev,
  (VTBL_ENTRY)&_ZN4S7C93v10Ev,
  (VTBL_ENTRY)&_ZN4S7C93v11Ev,
  (VTBL_ENTRY)&_ZN4S7C93v12Ev,
  (VTBL_ENTRY)&_ZN4S7C93v13Ev,
  (VTBL_ENTRY)&_ZN4S7C93v14Ev,
  (VTBL_ENTRY)&_ZN4S7C93v15Ev,
  (VTBL_ENTRY)&_ZN4S7C93v16Ev,
  (VTBL_ENTRY)&_ZN4S7C93v17Ev,
  (VTBL_ENTRY)&_ZN4S7C93v18Ev,
  (VTBL_ENTRY)&_ZN4S7C93v19Ev,
  (VTBL_ENTRY)&_ZN4S7C93v20Ev,
  (VTBL_ENTRY)&_ZN4S7C93v21Ev,
  (VTBL_ENTRY)&_ZN4S7C93v22Ev,
  (VTBL_ENTRY)&_ZN4S7C93v23Ev,
  (VTBL_ENTRY)&_ZN4S7C93v24Ev,
  (VTBL_ENTRY)&_ZN4S7C93v25Ev,
  (VTBL_ENTRY)&_ZN4S7C93v26Ev,
  (VTBL_ENTRY)&_ZN4S7C93v27Ev,
  (VTBL_ENTRY)&_ZN4S7C93v28Ev,
  (VTBL_ENTRY)&_ZN4S7C93v29Ev,
  (VTBL_ENTRY)&_ZN4S7C93v30Ev,
  (VTBL_ENTRY)&_ZN4S7C93v31Ev,
  (VTBL_ENTRY)&_ZN4S7C93v32Ev,
  (VTBL_ENTRY)&_ZN4S7C93v33Ev,
  (VTBL_ENTRY)&_ZN4S7C93v34Ev,
  (VTBL_ENTRY)&_ZN4S7C93v35Ev,
  (VTBL_ENTRY)&_ZN4S7C93v36Ev,
  (VTBL_ENTRY)&_ZN4S7C93v37Ev,
  (VTBL_ENTRY)&_ZN4S7C93v38Ev,
  (VTBL_ENTRY)&_ZN4S7C93v39Ev,
  (VTBL_ENTRY)&_ZN4S7C93v40Ev,
  (VTBL_ENTRY)&_ZN4S7C93v41Ev,
  (VTBL_ENTRY)&_ZN4S7C93v42Ev,
  (VTBL_ENTRY)&_ZN4S7C93v43Ev,
  (VTBL_ENTRY)&_ZN4S7C93v44Ev,
  (VTBL_ENTRY)&_ZN4S7C93v45Ev,
  (VTBL_ENTRY)&_ZN4S7C93v46Ev,
  (VTBL_ENTRY)&_ZN4S7C93v47Ev,
  (VTBL_ENTRY)&_ZN4S7C93v48Ev,
  (VTBL_ENTRY)&_ZN4S7C93v49Ev,
  (VTBL_ENTRY)&_ZN4S7C93v50Ev,
  (VTBL_ENTRY)&_ZN4S7C93v51Ev,
  (VTBL_ENTRY)&_ZN4S7C93v52Ev,
  (VTBL_ENTRY)&_ZN4S7C93v53Ev,
  (VTBL_ENTRY)&_ZN4S7C93v54Ev,
  (VTBL_ENTRY)&_ZN4S7C93v55Ev,
  (VTBL_ENTRY)&_ZN4S7C93v56Ev,
  (VTBL_ENTRY)&_ZN4S7C93v57Ev,
  (VTBL_ENTRY)&_ZN4S7C93v58Ev,
  (VTBL_ENTRY)&_ZN4S7C93v59Ev,
  (VTBL_ENTRY)&_ZN4S7C93v60Ev,
  (VTBL_ENTRY)&_ZN4S7C93v61Ev,
  (VTBL_ENTRY)&_ZN4S7C93v62Ev,
  (VTBL_ENTRY)&_ZN4S7C93v63Ev,
  (VTBL_ENTRY)&_ZN4S7C93v64Ev,
  (VTBL_ENTRY)&_ZN4S7C93v65Ev,
  (VTBL_ENTRY)&_ZN4S7C93v66Ev,
  (VTBL_ENTRY)&_ZN4S7C93v67Ev,
  (VTBL_ENTRY)&_ZN4S7C93v68Ev,
  (VTBL_ENTRY)&_ZN4S7C93v69Ev,
  (VTBL_ENTRY)&_ZN4S7C93v70Ev,
  (VTBL_ENTRY)&_ZN4S7C93v71Ev,
  (VTBL_ENTRY)&_ZN4S7C93v72Ev,
  (VTBL_ENTRY)&_ZN4S7C93v73Ev,
  (VTBL_ENTRY)&_ZN4S7C93v74Ev,
  (VTBL_ENTRY)&_ZN4S7C93v75Ev,
  (VTBL_ENTRY)&_ZN4S7C93v76Ev,
  (VTBL_ENTRY)&_ZN4S7C93v77Ev,
  (VTBL_ENTRY)&_ZN4S7C93v78Ev,
  (VTBL_ENTRY)&_ZN4S7C93v79Ev,
  (VTBL_ENTRY)&_ZN4S7C93v80Ev,
  (VTBL_ENTRY)&_ZN4S7C93v81Ev,
  (VTBL_ENTRY)&_ZN4S7C93v82Ev,
  (VTBL_ENTRY)&_ZN4S7C93v83Ev,
  (VTBL_ENTRY)&_ZN4S7C93v84Ev,
  (VTBL_ENTRY)&_ZN4S7C93v85Ev,
  (VTBL_ENTRY)&_ZN4S7C93v86Ev,
  (VTBL_ENTRY)&_ZN4S7C93v87Ev,
  (VTBL_ENTRY)&_ZN4S7C93v88Ev,
  (VTBL_ENTRY)&_ZN4S7C93v89Ev,
  (VTBL_ENTRY)&_ZN4S7C93v90Ev,
  (VTBL_ENTRY)&_ZN4S7C93v91Ev,
  (VTBL_ENTRY)&_ZN4S7C93v92Ev,
  (VTBL_ENTRY)&_ZN4S7C93v93Ev,
  (VTBL_ENTRY)&_ZN4S7C93v94Ev,
  (VTBL_ENTRY)&_ZN4S7C93v95Ev,
  (VTBL_ENTRY)&_ZN4S7C93v96Ev,
  (VTBL_ENTRY)&_ZN4S7C93v97Ev,
  (VTBL_ENTRY)&_ZN4S7C93v98Ev,
  (VTBL_ENTRY)&_ZN4S7C93v99Ev,
  (VTBL_ENTRY)&_ZN4S7C94v100Ev,
  (VTBL_ENTRY)&_ZN4S7C94v101Ev,
  (VTBL_ENTRY)&_ZN4S7C94v102Ev,
  (VTBL_ENTRY)&_ZN4S7C94v103Ev,
  (VTBL_ENTRY)&_ZN4S7C94v104Ev,
  (VTBL_ENTRY)&_ZN4S7C94v105Ev,
  (VTBL_ENTRY)&_ZN4S7C94v106Ev,
  (VTBL_ENTRY)&_ZN4S7C94v107Ev,
  (VTBL_ENTRY)&_ZN4S7C94v108Ev,
  (VTBL_ENTRY)&_ZN4S7C94v109Ev,
  (VTBL_ENTRY)&_ZN4S7C94v110Ev,
  (VTBL_ENTRY)&_ZN4S7C94v111Ev,
  (VTBL_ENTRY)&_ZN4S7C74v112Ev,
  (VTBL_ENTRY)&_ZN4S7C74v113Ev,
  (VTBL_ENTRY)&_ZN4S7C74v114Ev,
  (VTBL_ENTRY)&_ZN4S7C74v115Ev,
  (VTBL_ENTRY)&_ZN4S7C74v116Ev,
  (VTBL_ENTRY)&_ZN4S7C74v117Ev,
  (VTBL_ENTRY)&_ZN4S7C74v118Ev,
  (VTBL_ENTRY)&_ZN4S7C74v119Ev,
  (VTBL_ENTRY)&_ZN4S7C74v120Ev,
  (VTBL_ENTRY)&_ZN4S7C74v121Ev,
  (VTBL_ENTRY)&_ZN4S7C74v122Ev,
  (VTBL_ENTRY)&_ZN4S7C74v123Ev,
  (VTBL_ENTRY)&_ZN4S7C74v124Ev,
  (VTBL_ENTRY)&_ZN4S7C74v125Ev,
  (VTBL_ENTRY)&_ZN4S7C74v126Ev,
  (VTBL_ENTRY)&_ZN4S7C74v127Ev,
  (VTBL_ENTRY)&_ZN4S7C74v128Ev,
  (VTBL_ENTRY)&_ZN4S7C74v129Ev,
  (VTBL_ENTRY)&_ZN4S7C74v130Ev,
  (VTBL_ENTRY)&_ZN4S7C74v131Ev,
  (VTBL_ENTRY)&_ZN4S7C74v132Ev,
  (VTBL_ENTRY)&_ZN4S7C74v133Ev,
  (VTBL_ENTRY)&_ZN4S7C74v134Ev,
  (VTBL_ENTRY)&_ZN4S7C74v135Ev,
  (VTBL_ENTRY)&_ZN4S7C74v136Ev,
  (VTBL_ENTRY)&_ZN4S7C74v137Ev,
  (VTBL_ENTRY)&_ZN4S7C64v138Ev,
  (VTBL_ENTRY)&_ZN4S7C64v139Ev,
  (VTBL_ENTRY)&_ZN4S7C64v140Ev,
  (VTBL_ENTRY)&_ZN4S7C64v141Ev,
  (VTBL_ENTRY)&_ZN4S7C64v142Ev,
  (VTBL_ENTRY)&_ZN4S7C64v143Ev,
  (VTBL_ENTRY)&_ZN4S7C64v144Ev,
  (VTBL_ENTRY)&_ZN4S7C64v145Ev,
  (VTBL_ENTRY)&_ZN4S7C64v146Ev,
  (VTBL_ENTRY)&_ZN4S7C64v147Ev,
  (VTBL_ENTRY)&_ZN4S7C64v148Ev,
  (VTBL_ENTRY)&_ZN4S7C64v149Ev,
  (VTBL_ENTRY)&_ZN4S7C64v150Ev,
  (VTBL_ENTRY)&_ZN4S7C64v151Ev,
  (VTBL_ENTRY)&_ZN4S7C64v152Ev,
  (VTBL_ENTRY)&_ZN4S7C64v153Ev,
  (VTBL_ENTRY)&_ZN4S7C64v154Ev,
  (VTBL_ENTRY)&_ZN4S7C64v155Ev,
  (VTBL_ENTRY)&_ZN4S7C54v156Ev,
  (VTBL_ENTRY)&_ZN4S7C54v157Ev,
  (VTBL_ENTRY)&_ZN4S7C54v158Ev,
  (VTBL_ENTRY)&_ZN4S7C54v159Ev,
  (VTBL_ENTRY)&_ZN4S7C54v160Ev,
  (VTBL_ENTRY)&_ZN4S7C54v161Ev,
  (VTBL_ENTRY)&_ZN4S7C54v162Ev,
  (VTBL_ENTRY)&_ZN4S7C54v163Ev,
  (VTBL_ENTRY)&_ZN4S7C54v164Ev,
  (VTBL_ENTRY)&_ZN4S7C54v165Ev,
  (VTBL_ENTRY)&_ZN4S7C54v166Ev,
  (VTBL_ENTRY)&_ZN4S7C54v167Ev,
  (VTBL_ENTRY)&_ZN4S7C54v168Ev,
  (VTBL_ENTRY)&_ZN4S7C54v169Ev,
  (VTBL_ENTRY)&_ZN4S7C54v170Ev,
  (VTBL_ENTRY)&_ZN4S7C54v171Ev,
  (VTBL_ENTRY)&_ZN4S7C54v172Ev,
  (VTBL_ENTRY)&_ZN4S7C54v173Ev,
  (VTBL_ENTRY)&_ZN4S7C54v174Ev,
  (VTBL_ENTRY)&_ZN4S7C54v175Ev,
  (VTBL_ENTRY)&_ZN4S7C54v176Ev,
  (VTBL_ENTRY)&_ZN4S7C54v177Ev,
  (VTBL_ENTRY)&_ZN4S7C54v178Ev,
  (VTBL_ENTRY)&_ZN4S7C54v179Ev,
  (VTBL_ENTRY)&_ZN4S7C54v180Ev,
  (VTBL_ENTRY)&_ZN4S7C54v181Ev,
};
extern VTBL_ENTRY _ZTI4S7C5[];
extern  VTBL_ENTRY _ZTV4S7C5[];
Class_Descriptor cd_S7C5 = {  "S7C5", // class name
  bases_S7C5, 5,
  &(vtc_S7C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI4S7C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV4S7C5),181, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7C4  : S7C5 {
  ~S7C4(); // tgen
  S7C4(); // tgen
};
//SIG(-1 S7C4) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd m Fp Fi} 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 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 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}}


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

static void Test_S7C4()
{
  extern Class_Descriptor cd_S7C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7C4, buf);
    S7C4 *dp, &lv = *(dp=new (buf) S7C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7C4)");
    check_base_class_offset(lv, (S1C11_nt*)(S7C9*)(S7C8*)(S7C7*)(S7C6*)(S7C5*), 0, "S7C4");
    check_base_class_offset(lv, (S7C9*)(S7C8*)(S7C7*)(S7C6*)(S7C5*), 0, "S7C4");
    check_base_class_offset(lv, (S7C8*)(S7C7*)(S7C6*)(S7C5*), 0, "S7C4");
    check_base_class_offset(lv, (S7C7*)(S7C6*)(S7C5*), 0, "S7C4");
    check_base_class_offset(lv, (S7C6*)(S7C5*), 0, "S7C4");
    check_base_class_offset(lv, (S7C5*), 0, "S7C4");
    test_class_info(&lv, &cd_S7C4);
    dp->~S7C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7C4(Test_S7C4, "S7C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN4S7C4C1Ev();
extern void _ZN4S7C4D1Ev();
Name_Map name_map_S7C4[] = {
  NSPAIR(_ZN4S7C4C1Ev),
  NSPAIR(_ZN4S7C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S7C9;
extern VTBL_ENTRY _ZTI4S7C9[];
extern  VTBL_ENTRY _ZTV4S7C9[];
extern Class_Descriptor cd_S7C8;
extern VTBL_ENTRY _ZTI4S7C8[];
extern  VTBL_ENTRY _ZTV4S7C8[];
extern Class_Descriptor cd_S7C7;
extern VTBL_ENTRY _ZTI4S7C7[];
extern  VTBL_ENTRY _ZTV4S7C7[];
extern Class_Descriptor cd_S7C6;
extern VTBL_ENTRY _ZTI4S7C6[];
extern  VTBL_ENTRY _ZTV4S7C6[];
extern Class_Descriptor cd_S7C5;
extern VTBL_ENTRY _ZTI4S7C5[];
extern  VTBL_ENTRY _ZTV4S7C5[];
static Base_Class bases_S7C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI4S7C4[];
extern void _ZN4S7C4D1Ev();
extern void _ZN4S7C4D0Ev();
extern void _ZN4S7C92v5Ev();
extern void _ZN4S7C92v6Ev();
extern void _ZN4S7C92v7Ev();
extern void _ZN4S7C92v8Ev();
extern void _ZN4S7C92v9Ev();
extern void _ZN4S7C93v10Ev();
extern void _ZN4S7C93v11Ev();
extern void _ZN4S7C93v12Ev();
extern void _ZN4S7C93v13Ev();
extern void _ZN4S7C93v14Ev();
extern void _ZN4S7C93v15Ev();
extern void _ZN4S7C93v16Ev();
extern void _ZN4S7C93v17Ev();
extern void _ZN4S7C93v18Ev();
extern void _ZN4S7C93v19Ev();
extern void _ZN4S7C93v20Ev();
extern void _ZN4S7C93v21Ev();
extern void _ZN4S7C93v22Ev();
extern void _ZN4S7C93v23Ev();
extern void _ZN4S7C93v24Ev();
extern void _ZN4S7C93v25Ev();
extern void _ZN4S7C93v26Ev();
extern void _ZN4S7C93v27Ev();
extern void _ZN4S7C93v28Ev();
extern void _ZN4S7C93v29Ev();
extern void _ZN4S7C93v30Ev();
extern void _ZN4S7C93v31Ev();
extern void _ZN4S7C93v32Ev();
extern void _ZN4S7C93v33Ev();
extern void _ZN4S7C93v34Ev();
extern void _ZN4S7C93v35Ev();
extern void _ZN4S7C93v36Ev();
extern void _ZN4S7C93v37Ev();
extern void _ZN4S7C93v38Ev();
extern void _ZN4S7C93v39Ev();
extern void _ZN4S7C93v40Ev();
extern void _ZN4S7C93v41Ev();
extern void _ZN4S7C93v42Ev();
extern void _ZN4S7C93v43Ev();
extern void _ZN4S7C93v44Ev();
extern void _ZN4S7C93v45Ev();
extern void _ZN4S7C93v46Ev();
extern void _ZN4S7C93v47Ev();
extern void _ZN4S7C93v48Ev();
extern void _ZN4S7C93v49Ev();
extern void _ZN4S7C93v50Ev();
extern void _ZN4S7C93v51Ev();
extern void _ZN4S7C93v52Ev();
extern void _ZN4S7C93v53Ev();
extern void _ZN4S7C93v54Ev();
extern void _ZN4S7C93v55Ev();
extern void _ZN4S7C93v56Ev();
extern void _ZN4S7C93v57Ev();
extern void _ZN4S7C93v58Ev();
extern void _ZN4S7C93v59Ev();
extern void _ZN4S7C93v60Ev();
extern void _ZN4S7C93v61Ev();
extern void _ZN4S7C93v62Ev();
extern void _ZN4S7C93v63Ev();
extern void _ZN4S7C93v64Ev();
extern void _ZN4S7C93v65Ev();
extern void _ZN4S7C93v66Ev();
extern void _ZN4S7C93v67Ev();
extern void _ZN4S7C93v68Ev();
extern void _ZN4S7C93v69Ev();
extern void _ZN4S7C93v70Ev();
extern void _ZN4S7C93v71Ev();
extern void _ZN4S7C93v72Ev();
extern void _ZN4S7C93v73Ev();
extern void _ZN4S7C93v74Ev();
extern void _ZN4S7C93v75Ev();
extern void _ZN4S7C93v76Ev();
extern void _ZN4S7C93v77Ev();
extern void _ZN4S7C93v78Ev();
extern void _ZN4S7C93v79Ev();
extern void _ZN4S7C93v80Ev();
extern void _ZN4S7C93v81Ev();
extern void _ZN4S7C93v82Ev();
extern void _ZN4S7C93v83Ev();
extern void _ZN4S7C93v84Ev();
extern void _ZN4S7C93v85Ev();
extern void _ZN4S7C93v86Ev();
extern void _ZN4S7C93v87Ev();
extern void _ZN4S7C93v88Ev();
extern void _ZN4S7C93v89Ev();
extern void _ZN4S7C93v90Ev();
extern void _ZN4S7C93v91Ev();
extern void _ZN4S7C93v92Ev();
extern void _ZN4S7C93v93Ev();
extern void _ZN4S7C93v94Ev();
extern void _ZN4S7C93v95Ev();
extern void _ZN4S7C93v96Ev();
extern void _ZN4S7C93v97Ev();
extern void _ZN4S7C93v98Ev();
extern void _ZN4S7C93v99Ev();
extern void _ZN4S7C94v100Ev();
extern void _ZN4S7C94v101Ev();
extern void _ZN4S7C94v102Ev();
extern void _ZN4S7C94v103Ev();
extern void _ZN4S7C94v104Ev();
extern void _ZN4S7C94v105Ev();
extern void _ZN4S7C94v106Ev();
extern void _ZN4S7C94v107Ev();
extern void _ZN4S7C94v108Ev();
extern void _ZN4S7C94v109Ev();
extern void _ZN4S7C94v110Ev();
extern void _ZN4S7C94v111Ev();
extern void _ZN4S7C74v112Ev();
extern void _ZN4S7C74v113Ev();
extern void _ZN4S7C74v114Ev();
extern void _ZN4S7C74v115Ev();
extern void _ZN4S7C74v116Ev();
extern void _ZN4S7C74v117Ev();
extern void _ZN4S7C74v118Ev();
extern void _ZN4S7C74v119Ev();
extern void _ZN4S7C74v120Ev();
extern void _ZN4S7C74v121Ev();
extern void _ZN4S7C74v122Ev();
extern void _ZN4S7C74v123Ev();
extern void _ZN4S7C74v124Ev();
extern void _ZN4S7C74v125Ev();
extern void _ZN4S7C74v126Ev();
extern void _ZN4S7C74v127Ev();
extern void _ZN4S7C74v128Ev();
extern void _ZN4S7C74v129Ev();
extern void _ZN4S7C74v130Ev();
extern void _ZN4S7C74v131Ev();
extern void _ZN4S7C74v132Ev();
extern void _ZN4S7C74v133Ev();
extern void _ZN4S7C74v134Ev();
extern void _ZN4S7C74v135Ev();
extern void _ZN4S7C74v136Ev();
extern void _ZN4S7C74v137Ev();
extern void _ZN4S7C64v138Ev();
extern void _ZN4S7C64v139Ev();
extern void _ZN4S7C64v140Ev();
extern void _ZN4S7C64v141Ev();
extern void _ZN4S7C64v142Ev();
extern void _ZN4S7C64v143Ev();
extern void _ZN4S7C64v144Ev();
extern void _ZN4S7C64v145Ev();
extern void _ZN4S7C64v146Ev();
extern void _ZN4S7C64v147Ev();
extern void _ZN4S7C64v148Ev();
extern void _ZN4S7C64v149Ev();
extern void _ZN4S7C64v150Ev();
extern void _ZN4S7C64v151Ev();
extern void _ZN4S7C64v152Ev();
extern void _ZN4S7C64v153Ev();
extern void _ZN4S7C64v154Ev();
extern void _ZN4S7C64v155Ev();
extern void _ZN4S7C54v156Ev();
extern void _ZN4S7C54v157Ev();
extern void _ZN4S7C54v158Ev();
extern void _ZN4S7C54v159Ev();
extern void _ZN4S7C54v160Ev();
extern void _ZN4S7C54v161Ev();
extern void _ZN4S7C54v162Ev();
extern void _ZN4S7C54v163Ev();
extern void _ZN4S7C54v164Ev();
extern void _ZN4S7C54v165Ev();
extern void _ZN4S7C54v166Ev();
extern void _ZN4S7C54v167Ev();
extern void _ZN4S7C54v168Ev();
extern void _ZN4S7C54v169Ev();
extern void _ZN4S7C54v170Ev();
extern void _ZN4S7C54v171Ev();
extern void _ZN4S7C54v172Ev();
extern void _ZN4S7C54v173Ev();
extern void _ZN4S7C54v174Ev();
extern void _ZN4S7C54v175Ev();
extern void _ZN4S7C54v176Ev();
extern void _ZN4S7C54v177Ev();
extern void _ZN4S7C54v178Ev();
extern void _ZN4S7C54v179Ev();
extern void _ZN4S7C54v180Ev();
extern void _ZN4S7C54v181Ev();
static  VTBL_ENTRY vtc_S7C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI4S7C4[0]),
  (VTBL_ENTRY)&_ZN4S7C4D1Ev,
  (VTBL_ENTRY)&_ZN4S7C4D0Ev,
  (VTBL_ENTRY)&_ZN4S7C92v5Ev,
  (VTBL_ENTRY)&_ZN4S7C92v6Ev,
  (VTBL_ENTRY)&_ZN4S7C92v7Ev,
  (VTBL_ENTRY)&_ZN4S7C92v8Ev,
  (VTBL_ENTRY)&_ZN4S7C92v9Ev,
  (VTBL_ENTRY)&_ZN4S7C93v10Ev,
  (VTBL_ENTRY)&_ZN4S7C93v11Ev,
  (VTBL_ENTRY)&_ZN4S7C93v12Ev,
  (VTBL_ENTRY)&_ZN4S7C93v13Ev,
  (VTBL_ENTRY)&_ZN4S7C93v14Ev,
  (VTBL_ENTRY)&_ZN4S7C93v15Ev,
  (VTBL_ENTRY)&_ZN4S7C93v16Ev,
  (VTBL_ENTRY)&_ZN4S7C93v17Ev,
  (VTBL_ENTRY)&_ZN4S7C93v18Ev,
  (VTBL_ENTRY)&_ZN4S7C93v19Ev,
  (VTBL_ENTRY)&_ZN4S7C93v20Ev,
  (VTBL_ENTRY)&_ZN4S7C93v21Ev,
  (VTBL_ENTRY)&_ZN4S7C93v22Ev,
  (VTBL_ENTRY)&_ZN4S7C93v23Ev,
  (VTBL_ENTRY)&_ZN4S7C93v24Ev,
  (VTBL_ENTRY)&_ZN4S7C93v25Ev,
  (VTBL_ENTRY)&_ZN4S7C93v26Ev,
  (VTBL_ENTRY)&_ZN4S7C93v27Ev,
  (VTBL_ENTRY)&_ZN4S7C93v28Ev,
  (VTBL_ENTRY)&_ZN4S7C93v29Ev,
  (VTBL_ENTRY)&_ZN4S7C93v30Ev,
  (VTBL_ENTRY)&_ZN4S7C93v31Ev,
  (VTBL_ENTRY)&_ZN4S7C93v32Ev,
  (VTBL_ENTRY)&_ZN4S7C93v33Ev,
  (VTBL_ENTRY)&_ZN4S7C93v34Ev,
  (VTBL_ENTRY)&_ZN4S7C93v35Ev,
  (VTBL_ENTRY)&_ZN4S7C93v36Ev,
  (VTBL_ENTRY)&_ZN4S7C93v37Ev,
  (VTBL_ENTRY)&_ZN4S7C93v38Ev,
  (VTBL_ENTRY)&_ZN4S7C93v39Ev,
  (VTBL_ENTRY)&_ZN4S7C93v40Ev,
  (VTBL_ENTRY)&_ZN4S7C93v41Ev,
  (VTBL_ENTRY)&_ZN4S7C93v42Ev,
  (VTBL_ENTRY)&_ZN4S7C93v43Ev,
  (VTBL_ENTRY)&_ZN4S7C93v44Ev,
  (VTBL_ENTRY)&_ZN4S7C93v45Ev,
  (VTBL_ENTRY)&_ZN4S7C93v46Ev,
  (VTBL_ENTRY)&_ZN4S7C93v47Ev,
  (VTBL_ENTRY)&_ZN4S7C93v48Ev,
  (VTBL_ENTRY)&_ZN4S7C93v49Ev,
  (VTBL_ENTRY)&_ZN4S7C93v50Ev,
  (VTBL_ENTRY)&_ZN4S7C93v51Ev,
  (VTBL_ENTRY)&_ZN4S7C93v52Ev,
  (VTBL_ENTRY)&_ZN4S7C93v53Ev,
  (VTBL_ENTRY)&_ZN4S7C93v54Ev,
  (VTBL_ENTRY)&_ZN4S7C93v55Ev,
  (VTBL_ENTRY)&_ZN4S7C93v56Ev,
  (VTBL_ENTRY)&_ZN4S7C93v57Ev,
  (VTBL_ENTRY)&_ZN4S7C93v58Ev,
  (VTBL_ENTRY)&_ZN4S7C93v59Ev,
  (VTBL_ENTRY)&_ZN4S7C93v60Ev,
  (VTBL_ENTRY)&_ZN4S7C93v61Ev,
  (VTBL_ENTRY)&_ZN4S7C93v62Ev,
  (VTBL_ENTRY)&_ZN4S7C93v63Ev,
  (VTBL_ENTRY)&_ZN4S7C93v64Ev,
  (VTBL_ENTRY)&_ZN4S7C93v65Ev,
  (VTBL_ENTRY)&_ZN4S7C93v66Ev,
  (VTBL_ENTRY)&_ZN4S7C93v67Ev,
  (VTBL_ENTRY)&_ZN4S7C93v68Ev,
  (VTBL_ENTRY)&_ZN4S7C93v69Ev,
  (VTBL_ENTRY)&_ZN4S7C93v70Ev,
  (VTBL_ENTRY)&_ZN4S7C93v71Ev,
  (VTBL_ENTRY)&_ZN4S7C93v72Ev,
  (VTBL_ENTRY)&_ZN4S7C93v73Ev,
  (VTBL_ENTRY)&_ZN4S7C93v74Ev,
  (VTBL_ENTRY)&_ZN4S7C93v75Ev,
  (VTBL_ENTRY)&_ZN4S7C93v76Ev,
  (VTBL_ENTRY)&_ZN4S7C93v77Ev,
  (VTBL_ENTRY)&_ZN4S7C93v78Ev,
  (VTBL_ENTRY)&_ZN4S7C93v79Ev,
  (VTBL_ENTRY)&_ZN4S7C93v80Ev,
  (VTBL_ENTRY)&_ZN4S7C93v81Ev,
  (VTBL_ENTRY)&_ZN4S7C93v82Ev,
  (VTBL_ENTRY)&_ZN4S7C93v83Ev,
  (VTBL_ENTRY)&_ZN4S7C93v84Ev,
  (VTBL_ENTRY)&_ZN4S7C93v85Ev,
  (VTBL_ENTRY)&_ZN4S7C93v86Ev,
  (VTBL_ENTRY)&_ZN4S7C93v87Ev,
  (VTBL_ENTRY)&_ZN4S7C93v88Ev,
  (VTBL_ENTRY)&_ZN4S7C93v89Ev,
  (VTBL_ENTRY)&_ZN4S7C93v90Ev,
  (VTBL_ENTRY)&_ZN4S7C93v91Ev,
  (VTBL_ENTRY)&_ZN4S7C93v92Ev,
  (VTBL_ENTRY)&_ZN4S7C93v93Ev,
  (VTBL_ENTRY)&_ZN4S7C93v94Ev,
  (VTBL_ENTRY)&_ZN4S7C93v95Ev,
  (VTBL_ENTRY)&_ZN4S7C93v96Ev,
  (VTBL_ENTRY)&_ZN4S7C93v97Ev,
  (VTBL_ENTRY)&_ZN4S7C93v98Ev,
  (VTBL_ENTRY)&_ZN4S7C93v99Ev,
  (VTBL_ENTRY)&_ZN4S7C94v100Ev,
  (VTBL_ENTRY)&_ZN4S7C94v101Ev,
  (VTBL_ENTRY)&_ZN4S7C94v102Ev,
  (VTBL_ENTRY)&_ZN4S7C94v103Ev,
  (VTBL_ENTRY)&_ZN4S7C94v104Ev,
  (VTBL_ENTRY)&_ZN4S7C94v105Ev,
  (VTBL_ENTRY)&_ZN4S7C94v106Ev,
  (VTBL_ENTRY)&_ZN4S7C94v107Ev,
  (VTBL_ENTRY)&_ZN4S7C94v108Ev,
  (VTBL_ENTRY)&_ZN4S7C94v109Ev,
  (VTBL_ENTRY)&_ZN4S7C94v110Ev,
  (VTBL_ENTRY)&_ZN4S7C94v111Ev,
  (VTBL_ENTRY)&_ZN4S7C74v112Ev,
  (VTBL_ENTRY)&_ZN4S7C74v113Ev,
  (VTBL_ENTRY)&_ZN4S7C74v114Ev,
  (VTBL_ENTRY)&_ZN4S7C74v115Ev,
  (VTBL_ENTRY)&_ZN4S7C74v116Ev,
  (VTBL_ENTRY)&_ZN4S7C74v117Ev,
  (VTBL_ENTRY)&_ZN4S7C74v118Ev,
  (VTBL_ENTRY)&_ZN4S7C74v119Ev,
  (VTBL_ENTRY)&_ZN4S7C74v120Ev,
  (VTBL_ENTRY)&_ZN4S7C74v121Ev,
  (VTBL_ENTRY)&_ZN4S7C74v122Ev,
  (VTBL_ENTRY)&_ZN4S7C74v123Ev,
  (VTBL_ENTRY)&_ZN4S7C74v124Ev,
  (VTBL_ENTRY)&_ZN4S7C74v125Ev,
  (VTBL_ENTRY)&_ZN4S7C74v126Ev,
  (VTBL_ENTRY)&_ZN4S7C74v127Ev,
  (VTBL_ENTRY)&_ZN4S7C74v128Ev,
  (VTBL_ENTRY)&_ZN4S7C74v129Ev,
  (VTBL_ENTRY)&_ZN4S7C74v130Ev,
  (VTBL_ENTRY)&_ZN4S7C74v131Ev,
  (VTBL_ENTRY)&_ZN4S7C74v132Ev,
  (VTBL_ENTRY)&_ZN4S7C74v133Ev,
  (VTBL_ENTRY)&_ZN4S7C74v134Ev,
  (VTBL_ENTRY)&_ZN4S7C74v135Ev,
  (VTBL_ENTRY)&_ZN4S7C74v136Ev,
  (VTBL_ENTRY)&_ZN4S7C74v137Ev,
  (VTBL_ENTRY)&_ZN4S7C64v138Ev,
  (VTBL_ENTRY)&_ZN4S7C64v139Ev,
  (VTBL_ENTRY)&_ZN4S7C64v140Ev,
  (VTBL_ENTRY)&_ZN4S7C64v141Ev,
  (VTBL_ENTRY)&_ZN4S7C64v142Ev,
  (VTBL_ENTRY)&_ZN4S7C64v143Ev,
  (VTBL_ENTRY)&_ZN4S7C64v144Ev,
  (VTBL_ENTRY)&_ZN4S7C64v145Ev,
  (VTBL_ENTRY)&_ZN4S7C64v146Ev,
  (VTBL_ENTRY)&_ZN4S7C64v147Ev,
  (VTBL_ENTRY)&_ZN4S7C64v148Ev,
  (VTBL_ENTRY)&_ZN4S7C64v149Ev,
  (VTBL_ENTRY)&_ZN4S7C64v150Ev,
  (VTBL_ENTRY)&_ZN4S7C64v151Ev,
  (VTBL_ENTRY)&_ZN4S7C64v152Ev,
  (VTBL_ENTRY)&_ZN4S7C64v153Ev,
  (VTBL_ENTRY)&_ZN4S7C64v154Ev,
  (VTBL_ENTRY)&_ZN4S7C64v155Ev,
  (VTBL_ENTRY)&_ZN4S7C54v156Ev,
  (VTBL_ENTRY)&_ZN4S7C54v157Ev,
  (VTBL_ENTRY)&_ZN4S7C54v158Ev,
  (VTBL_ENTRY)&_ZN4S7C54v159Ev,
  (VTBL_ENTRY)&_ZN4S7C54v160Ev,
  (VTBL_ENTRY)&_ZN4S7C54v161Ev,
  (VTBL_ENTRY)&_ZN4S7C54v162Ev,
  (VTBL_ENTRY)&_ZN4S7C54v163Ev,
  (VTBL_ENTRY)&_ZN4S7C54v164Ev,
  (VTBL_ENTRY)&_ZN4S7C54v165Ev,
  (VTBL_ENTRY)&_ZN4S7C54v166Ev,
  (VTBL_ENTRY)&_ZN4S7C54v167Ev,
  (VTBL_ENTRY)&_ZN4S7C54v168Ev,
  (VTBL_ENTRY)&_ZN4S7C54v169Ev,
  (VTBL_ENTRY)&_ZN4S7C54v170Ev,
  (VTBL_ENTRY)&_ZN4S7C54v171Ev,
  (VTBL_ENTRY)&_ZN4S7C54v172Ev,
  (VTBL_ENTRY)&_ZN4S7C54v173Ev,
  (VTBL_ENTRY)&_ZN4S7C54v174Ev,
  (VTBL_ENTRY)&_ZN4S7C54v175Ev,
  (VTBL_ENTRY)&_ZN4S7C54v176Ev,
  (VTBL_ENTRY)&_ZN4S7C54v177Ev,
  (VTBL_ENTRY)&_ZN4S7C54v178Ev,
  (VTBL_ENTRY)&_ZN4S7C54v179Ev,
  (VTBL_ENTRY)&_ZN4S7C54v180Ev,
  (VTBL_ENTRY)&_ZN4S7C54v181Ev,
};
extern VTBL_ENTRY _ZTI4S7C4[];
extern  VTBL_ENTRY _ZTV4S7C4[];
Class_Descriptor cd_S7C4 = {  "S7C4", // class name
  bases_S7C4, 6,
  &(vtc_S7C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI4S7C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV4S7C4),181, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7C3  : S7C4 {
  virtual void  v182(); // _ZN4S7C34v182Ev
  virtual void  v183(); // _ZN4S7C34v183Ev
  virtual void  v184(); // _ZN4S7C34v184Ev
  virtual void  v185(); // _ZN4S7C34v185Ev
  virtual void  v186(); // _ZN4S7C34v186Ev
  virtual void  v187(); // _ZN4S7C34v187Ev
  ~S7C3(); // tgen
  S7C3(); // tgen
};
//SIG(-1 S7C3) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ vd m Fp Fi} 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 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 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}} v1 v2 v3 v4 v5 v6}


void  S7C3 ::v182(){vfunc_called(this, "_ZN4S7C34v182Ev");}
void  S7C3 ::v183(){vfunc_called(this, "_ZN4S7C34v183Ev");}
void  S7C3 ::v184(){vfunc_called(this, "_ZN4S7C34v184Ev");}
void  S7C3 ::v185(){vfunc_called(this, "_ZN4S7C34v185Ev");}
void  S7C3 ::v186(){vfunc_called(this, "_ZN4S7C34v186Ev");}
void  S7C3 ::v187(){vfunc_called(this, "_ZN4S7C34v187Ev");}
S7C3 ::~S7C3(){ note_dtor("S7C3", this);} // tgen
S7C3 ::S7C3(){ note_ctor("S7C3", this);} // tgen

static void Test_S7C3()
{
  extern Class_Descriptor cd_S7C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7C3, buf);
    S7C3 *dp, &lv = *(dp=new (buf) S7C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7C3)");
    check_base_class_offset(lv, (S1C11_nt*)(S7C9*)(S7C8*)(S7C7*)(S7C6*)(S7C5*)(S7C4*), 0, "S7C3");
    check_base_class_offset(lv, (S7C9*)(S7C8*)(S7C7*)(S7C6*)(S7C5*)(S7C4*), 0, "S7C3");
    check_base_class_offset(lv, (S7C8*)(S7C7*)(S7C6*)(S7C5*)(S7C4*), 0, "S7C3");
    check_base_class_offset(lv, (S7C7*)(S7C6*)(S7C5*)(S7C4*), 0, "S7C3");
    check_base_class_offset(lv, (S7C6*)(S7C5*)(S7C4*), 0, "S7C3");
    check_base_class_offset(lv, (S7C5*)(S7C4*), 0, "S7C3");
    check_base_class_offset(lv, (S7C4*), 0, "S7C3");
    test_class_info(&lv, &cd_S7C3);
    dp->~S7C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7C3(Test_S7C3, "S7C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN4S7C3C1Ev();
extern void _ZN4S7C3D1Ev();
Name_Map name_map_S7C3[] = {
  NSPAIR(_ZN4S7C3C1Ev),
  NSPAIR(_ZN4S7C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S7C9;
extern VTBL_ENTRY _ZTI4S7C9[];
extern  VTBL_ENTRY _ZTV4S7C9[];
extern Class_Descriptor cd_S7C8;
extern VTBL_ENTRY _ZTI4S7C8[];
extern  VTBL_ENTRY _ZTV4S7C8[];
extern Class_Descriptor cd_S7C7;
extern VTBL_ENTRY _ZTI4S7C7[];
extern  VTBL_ENTRY _ZTV4S7C7[];
extern Class_Descriptor cd_S7C6;
extern VTBL_ENTRY _ZTI4S7C6[];
extern  VTBL_ENTRY _ZTV4S7C6[];
extern Class_Descriptor cd_S7C5;
extern VTBL_ENTRY _ZTI4S7C5[];
extern  VTBL_ENTRY _ZTV4S7C5[];
extern Class_Descriptor cd_S7C4;
extern VTBL_ENTRY _ZTI4S7C4[];
extern  VTBL_ENTRY _ZTV4S7C4[];
static Base_Class bases_S7C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI4S7C3[];
extern void _ZN4S7C3D1Ev();
extern void _ZN4S7C3D0Ev();
extern void _ZN4S7C92v5Ev();
extern void _ZN4S7C92v6Ev();
extern void _ZN4S7C92v7Ev();
extern void _ZN4S7C92v8Ev();
extern void _ZN4S7C92v9Ev();
extern void _ZN4S7C93v10Ev();
extern void _ZN4S7C93v11Ev();
extern void _ZN4S7C93v12Ev();
extern void _ZN4S7C93v13Ev();
extern void _ZN4S7C93v14Ev();
extern void _ZN4S7C93v15Ev();
extern void _ZN4S7C93v16Ev();
extern void _ZN4S7C93v17Ev();
extern void _ZN4S7C93v18Ev();
extern void _ZN4S7C93v19Ev();
extern void _ZN4S7C93v20Ev();
extern void _ZN4S7C93v21Ev();
extern void _ZN4S7C93v22Ev();
extern void _ZN4S7C93v23Ev();
extern void _ZN4S7C93v24Ev();
extern void _ZN4S7C93v25Ev();
extern void _ZN4S7C93v26Ev();
extern void _ZN4S7C93v27Ev();
extern void _ZN4S7C93v28Ev();
extern void _ZN4S7C93v29Ev();
extern void _ZN4S7C93v30Ev();
extern void _ZN4S7C93v31Ev();
extern void _ZN4S7C93v32Ev();
extern void _ZN4S7C93v33Ev();
extern void _ZN4S7C93v34Ev();
extern void _ZN4S7C93v35Ev();
extern void _ZN4S7C93v36Ev();
extern void _ZN4S7C93v37Ev();
extern void _ZN4S7C93v38Ev();
extern void _ZN4S7C93v39Ev();
extern void _ZN4S7C93v40Ev();
extern void _ZN4S7C93v41Ev();
extern void _ZN4S7C93v42Ev();
extern void _ZN4S7C93v43Ev();
extern void _ZN4S7C93v44Ev();
extern void _ZN4S7C93v45Ev();
extern void _ZN4S7C93v46Ev();
extern void _ZN4S7C93v47Ev();
extern void _ZN4S7C93v48Ev();
extern void _ZN4S7C93v49Ev();
extern void _ZN4S7C93v50Ev();
extern void _ZN4S7C93v51Ev();
extern void _ZN4S7C93v52Ev();
extern void _ZN4S7C93v53Ev();
extern void _ZN4S7C93v54Ev();
extern void _ZN4S7C93v55Ev();
extern void _ZN4S7C93v56Ev();
extern void _ZN4S7C93v57Ev();
extern void _ZN4S7C93v58Ev();
extern void _ZN4S7C93v59Ev();
extern void _ZN4S7C93v60Ev();
extern void _ZN4S7C93v61Ev();
extern void _ZN4S7C93v62Ev();
extern void _ZN4S7C93v63Ev();
extern void _ZN4S7C93v64Ev();
extern void _ZN4S7C93v65Ev();
extern void _ZN4S7C93v66Ev();
extern void _ZN4S7C93v67Ev();
extern void _ZN4S7C93v68Ev();
extern void _ZN4S7C93v69Ev();
extern void _ZN4S7C93v70Ev();
extern void _ZN4S7C93v71Ev();
extern void _ZN4S7C93v72Ev();
extern void _ZN4S7C93v73Ev();
extern void _ZN4S7C93v74Ev();
extern void _ZN4S7C93v75Ev();
extern void _ZN4S7C93v76Ev();
extern void _ZN4S7C93v77Ev();
extern void _ZN4S7C93v78Ev();
extern void _ZN4S7C93v79Ev();
extern void _ZN4S7C93v80Ev();
extern void _ZN4S7C93v81Ev();
extern void _ZN4S7C93v82Ev();
extern void _ZN4S7C93v83Ev();
extern void _ZN4S7C93v84Ev();
extern void _ZN4S7C93v85Ev();
extern void _ZN4S7C93v86Ev();
extern void _ZN4S7C93v87Ev();
extern void _ZN4S7C93v88Ev();
extern void _ZN4S7C93v89Ev();
extern void _ZN4S7C93v90Ev();
extern void _ZN4S7C93v91Ev();
extern void _ZN4S7C93v92Ev();
extern void _ZN4S7C93v93Ev();
extern void _ZN4S7C93v94Ev();
extern void _ZN4S7C93v95Ev();
extern void _ZN4S7C93v96Ev();
extern void _ZN4S7C93v97Ev();
extern void _ZN4S7C93v98Ev();
extern void _ZN4S7C93v99Ev();
extern void _ZN4S7C94v100Ev();
extern void _ZN4S7C94v101Ev();
extern void _ZN4S7C94v102Ev();
extern void _ZN4S7C94v103Ev();
extern void _ZN4S7C94v104Ev();
extern void _ZN4S7C94v105Ev();
extern void _ZN4S7C94v106Ev();
extern void _ZN4S7C94v107Ev();
extern void _ZN4S7C94v108Ev();
extern void _ZN4S7C94v109Ev();
extern void _ZN4S7C94v110Ev();
extern void _ZN4S7C94v111Ev();
extern void _ZN4S7C74v112Ev();
extern void _ZN4S7C74v113Ev();
extern void _ZN4S7C74v114Ev();
extern void _ZN4S7C74v115Ev();
extern void _ZN4S7C74v116Ev();
extern void _ZN4S7C74v117Ev();
extern void _ZN4S7C74v118Ev();
extern void _ZN4S7C74v119Ev();
extern void _ZN4S7C74v120Ev();
extern void _ZN4S7C74v121Ev();
extern void _ZN4S7C74v122Ev();
extern void _ZN4S7C74v123Ev();
extern void _ZN4S7C74v124Ev();
extern void _ZN4S7C74v125Ev();
extern void _ZN4S7C74v126Ev();
extern void _ZN4S7C74v127Ev();
extern void _ZN4S7C74v128Ev();
extern void _ZN4S7C74v129Ev();
extern void _ZN4S7C74v130Ev();
extern void _ZN4S7C74v131Ev();
extern void _ZN4S7C74v132Ev();
extern void _ZN4S7C74v133Ev();
extern void _ZN4S7C74v134Ev();
extern void _ZN4S7C74v135Ev();
extern void _ZN4S7C74v136Ev();
extern void _ZN4S7C74v137Ev();
extern void _ZN4S7C64v138Ev();
extern void _ZN4S7C64v139Ev();
extern void _ZN4S7C64v140Ev();
extern void _ZN4S7C64v141Ev();
extern void _ZN4S7C64v142Ev();
extern void _ZN4S7C64v143Ev();
extern void _ZN4S7C64v144Ev();
extern void _ZN4S7C64v145Ev();
extern void _ZN4S7C64v146Ev();
extern void _ZN4S7C64v147Ev();
extern void _ZN4S7C64v148Ev();
extern void _ZN4S7C64v149Ev();
extern void _ZN4S7C64v150Ev();
extern void _ZN4S7C64v151Ev();
extern void _ZN4S7C64v152Ev();
extern void _ZN4S7C64v153Ev();
extern void _ZN4S7C64v154Ev();
extern void _ZN4S7C64v155Ev();
extern void _ZN4S7C54v156Ev();
extern void _ZN4S7C54v157Ev();
extern void _ZN4S7C54v158Ev();
extern void _ZN4S7C54v159Ev();
extern void _ZN4S7C54v160Ev();
extern void _ZN4S7C54v161Ev();
extern void _ZN4S7C54v162Ev();
extern void _ZN4S7C54v163Ev();
extern void _ZN4S7C54v164Ev();
extern void _ZN4S7C54v165Ev();
extern void _ZN4S7C54v166Ev();
extern void _ZN4S7C54v167Ev();
extern void _ZN4S7C54v168Ev();
extern void _ZN4S7C54v169Ev();
extern void _ZN4S7C54v170Ev();
extern void _ZN4S7C54v171Ev();
extern void _ZN4S7C54v172Ev();
extern void _ZN4S7C54v173Ev();
extern void _ZN4S7C54v174Ev();
extern void _ZN4S7C54v175Ev();
extern void _ZN4S7C54v176Ev();
extern void _ZN4S7C54v177Ev();
extern void _ZN4S7C54v178Ev();
extern void _ZN4S7C54v179Ev();
extern void _ZN4S7C54v180Ev();
extern void _ZN4S7C54v181Ev();
extern void _ZN4S7C34v182Ev();
extern void _ZN4S7C34v183Ev();
extern void _ZN4S7C34v184Ev();
extern void _ZN4S7C34v185Ev();
extern void _ZN4S7C34v186Ev();
extern void _ZN4S7C34v187Ev();
static  VTBL_ENTRY vtc_S7C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI4S7C3[0]),
  (VTBL_ENTRY)&_ZN4S7C3D1Ev,
  (VTBL_ENTRY)&_ZN4S7C3D0Ev,
  (VTBL_ENTRY)&_ZN4S7C92v5Ev,
  (VTBL_ENTRY)&_ZN4S7C92v6Ev,
  (VTBL_ENTRY)&_ZN4S7C92v7Ev,
  (VTBL_ENTRY)&_ZN4S7C92v8Ev,
  (VTBL_ENTRY)&_ZN4S7C92v9Ev,
  (VTBL_ENTRY)&_ZN4S7C93v10Ev,
  (VTBL_ENTRY)&_ZN4S7C93v11Ev,
  (VTBL_ENTRY)&_ZN4S7C93v12Ev,
  (VTBL_ENTRY)&_ZN4S7C93v13Ev,
  (VTBL_ENTRY)&_ZN4S7C93v14Ev,
  (VTBL_ENTRY)&_ZN4S7C93v15Ev,
  (VTBL_ENTRY)&_ZN4S7C93v16Ev,
  (VTBL_ENTRY)&_ZN4S7C93v17Ev,
  (VTBL_ENTRY)&_ZN4S7C93v18Ev,
  (VTBL_ENTRY)&_ZN4S7C93v19Ev,
  (VTBL_ENTRY)&_ZN4S7C93v20Ev,
  (VTBL_ENTRY)&_ZN4S7C93v21Ev,
  (VTBL_ENTRY)&_ZN4S7C93v22Ev,
  (VTBL_ENTRY)&_ZN4S7C93v23Ev,
  (VTBL_ENTRY)&_ZN4S7C93v24Ev,
  (VTBL_ENTRY)&_ZN4S7C93v25Ev,
  (VTBL_ENTRY)&_ZN4S7C93v26Ev,
  (VTBL_ENTRY)&_ZN4S7C93v27Ev,
  (VTBL_ENTRY)&_ZN4S7C93v28Ev,
  (VTBL_ENTRY)&_ZN4S7C93v29Ev,
  (VTBL_ENTRY)&_ZN4S7C93v30Ev,
  (VTBL_ENTRY)&_ZN4S7C93v31Ev,
  (VTBL_ENTRY)&_ZN4S7C93v32Ev,
  (VTBL_ENTRY)&_ZN4S7C93v33Ev,
  (VTBL_ENTRY)&_ZN4S7C93v34Ev,
  (VTBL_ENTRY)&_ZN4S7C93v35Ev,
  (VTBL_ENTRY)&_ZN4S7C93v36Ev,
  (VTBL_ENTRY)&_ZN4S7C93v37Ev,
  (VTBL_ENTRY)&_ZN4S7C93v38Ev,
  (VTBL_ENTRY)&_ZN4S7C93v39Ev,
  (VTBL_ENTRY)&_ZN4S7C93v40Ev,
  (VTBL_ENTRY)&_ZN4S7C93v41Ev,
  (VTBL_ENTRY)&_ZN4S7C93v42Ev,
  (VTBL_ENTRY)&_ZN4S7C93v43Ev,
  (VTBL_ENTRY)&_ZN4S7C93v44Ev,
  (VTBL_ENTRY)&_ZN4S7C93v45Ev,
  (VTBL_ENTRY)&_ZN4S7C93v46Ev,
  (VTBL_ENTRY)&_ZN4S7C93v47Ev,
  (VTBL_ENTRY)&_ZN4S7C93v48Ev,
  (VTBL_ENTRY)&_ZN4S7C93v49Ev,
  (VTBL_ENTRY)&_ZN4S7C93v50Ev,
  (VTBL_ENTRY)&_ZN4S7C93v51Ev,
  (VTBL_ENTRY)&_ZN4S7C93v52Ev,
  (VTBL_ENTRY)&_ZN4S7C93v53Ev,
  (VTBL_ENTRY)&_ZN4S7C93v54Ev,
  (VTBL_ENTRY)&_ZN4S7C93v55Ev,
  (VTBL_ENTRY)&_ZN4S7C93v56Ev,
  (VTBL_ENTRY)&_ZN4S7C93v57Ev,
  (VTBL_ENTRY)&_ZN4S7C93v58Ev,
  (VTBL_ENTRY)&_ZN4S7C93v59Ev,
  (VTBL_ENTRY)&_ZN4S7C93v60Ev,
  (VTBL_ENTRY)&_ZN4S7C93v61Ev,
  (VTBL_ENTRY)&_ZN4S7C93v62Ev,
  (VTBL_ENTRY)&_ZN4S7C93v63Ev,
  (VTBL_ENTRY)&_ZN4S7C93v64Ev,
  (VTBL_ENTRY)&_ZN4S7C93v65Ev,
  (VTBL_ENTRY)&_ZN4S7C93v66Ev,
  (VTBL_ENTRY)&_ZN4S7C93v67Ev,
  (VTBL_ENTRY)&_ZN4S7C93v68Ev,
  (VTBL_ENTRY)&_ZN4S7C93v69Ev,
  (VTBL_ENTRY)&_ZN4S7C93v70Ev,
  (VTBL_ENTRY)&_ZN4S7C93v71Ev,
  (VTBL_ENTRY)&_ZN4S7C93v72Ev,
  (VTBL_ENTRY)&_ZN4S7C93v73Ev,
  (VTBL_ENTRY)&_ZN4S7C93v74Ev,
  (VTBL_ENTRY)&_ZN4S7C93v75Ev,
  (VTBL_ENTRY)&_ZN4S7C93v76Ev,
  (VTBL_ENTRY)&_ZN4S7C93v77Ev,
  (VTBL_ENTRY)&_ZN4S7C93v78Ev,
  (VTBL_ENTRY)&_ZN4S7C93v79Ev,
  (VTBL_ENTRY)&_ZN4S7C93v80Ev,
  (VTBL_ENTRY)&_ZN4S7C93v81Ev,
  (VTBL_ENTRY)&_ZN4S7C93v82Ev,
  (VTBL_ENTRY)&_ZN4S7C93v83Ev,
  (VTBL_ENTRY)&_ZN4S7C93v84Ev,
  (VTBL_ENTRY)&_ZN4S7C93v85Ev,
  (VTBL_ENTRY)&_ZN4S7C93v86Ev,
  (VTBL_ENTRY)&_ZN4S7C93v87Ev,
  (VTBL_ENTRY)&_ZN4S7C93v88Ev,
  (VTBL_ENTRY)&_ZN4S7C93v89Ev,
  (VTBL_ENTRY)&_ZN4S7C93v90Ev,
  (VTBL_ENTRY)&_ZN4S7C93v91Ev,
  (VTBL_ENTRY)&_ZN4S7C93v92Ev,
  (VTBL_ENTRY)&_ZN4S7C93v93Ev,
  (VTBL_ENTRY)&_ZN4S7C93v94Ev,
  (VTBL_ENTRY)&_ZN4S7C93v95Ev,
  (VTBL_ENTRY)&_ZN4S7C93v96Ev,
  (VTBL_ENTRY)&_ZN4S7C93v97Ev,
  (VTBL_ENTRY)&_ZN4S7C93v98Ev,
  (VTBL_ENTRY)&_ZN4S7C93v99Ev,
  (VTBL_ENTRY)&_ZN4S7C94v100Ev,
  (VTBL_ENTRY)&_ZN4S7C94v101Ev,
  (VTBL_ENTRY)&_ZN4S7C94v102Ev,
  (VTBL_ENTRY)&_ZN4S7C94v103Ev,
  (VTBL_ENTRY)&_ZN4S7C94v104Ev,
  (VTBL_ENTRY)&_ZN4S7C94v105Ev,
  (VTBL_ENTRY)&_ZN4S7C94v106Ev,
  (VTBL_ENTRY)&_ZN4S7C94v107Ev,
  (VTBL_ENTRY)&_ZN4S7C94v108Ev,
  (VTBL_ENTRY)&_ZN4S7C94v109Ev,
  (VTBL_ENTRY)&_ZN4S7C94v110Ev,
  (VTBL_ENTRY)&_ZN4S7C94v111Ev,
  (VTBL_ENTRY)&_ZN4S7C74v112Ev,
  (VTBL_ENTRY)&_ZN4S7C74v113Ev,
  (VTBL_ENTRY)&_ZN4S7C74v114Ev,
  (VTBL_ENTRY)&_ZN4S7C74v115Ev,
  (VTBL_ENTRY)&_ZN4S7C74v116Ev,
  (VTBL_ENTRY)&_ZN4S7C74v117Ev,
  (VTBL_ENTRY)&_ZN4S7C74v118Ev,
  (VTBL_ENTRY)&_ZN4S7C74v119Ev,
  (VTBL_ENTRY)&_ZN4S7C74v120Ev,
  (VTBL_ENTRY)&_ZN4S7C74v121Ev,
  (VTBL_ENTRY)&_ZN4S7C74v122Ev,
  (VTBL_ENTRY)&_ZN4S7C74v123Ev,
  (VTBL_ENTRY)&_ZN4S7C74v124Ev,
  (VTBL_ENTRY)&_ZN4S7C74v125Ev,
  (VTBL_ENTRY)&_ZN4S7C74v126Ev,
  (VTBL_ENTRY)&_ZN4S7C74v127Ev,
  (VTBL_ENTRY)&_ZN4S7C74v128Ev,
  (VTBL_ENTRY)&_ZN4S7C74v129Ev,
  (VTBL_ENTRY)&_ZN4S7C74v130Ev,
  (VTBL_ENTRY)&_ZN4S7C74v131Ev,
  (VTBL_ENTRY)&_ZN4S7C74v132Ev,
  (VTBL_ENTRY)&_ZN4S7C74v133Ev,
  (VTBL_ENTRY)&_ZN4S7C74v134Ev,
  (VTBL_ENTRY)&_ZN4S7C74v135Ev,
  (VTBL_ENTRY)&_ZN4S7C74v136Ev,
  (VTBL_ENTRY)&_ZN4S7C74v137Ev,
  (VTBL_ENTRY)&_ZN4S7C64v138Ev,
  (VTBL_ENTRY)&_ZN4S7C64v139Ev,
  (VTBL_ENTRY)&_ZN4S7C64v140Ev,
  (VTBL_ENTRY)&_ZN4S7C64v141Ev,
  (VTBL_ENTRY)&_ZN4S7C64v142Ev,
  (VTBL_ENTRY)&_ZN4S7C64v143Ev,
  (VTBL_ENTRY)&_ZN4S7C64v144Ev,
  (VTBL_ENTRY)&_ZN4S7C64v145Ev,
  (VTBL_ENTRY)&_ZN4S7C64v146Ev,
  (VTBL_ENTRY)&_ZN4S7C64v147Ev,
  (VTBL_ENTRY)&_ZN4S7C64v148Ev,
  (VTBL_ENTRY)&_ZN4S7C64v149Ev,
  (VTBL_ENTRY)&_ZN4S7C64v150Ev,
  (VTBL_ENTRY)&_ZN4S7C64v151Ev,
  (VTBL_ENTRY)&_ZN4S7C64v152Ev,
  (VTBL_ENTRY)&_ZN4S7C64v153Ev,
  (VTBL_ENTRY)&_ZN4S7C64v154Ev,
  (VTBL_ENTRY)&_ZN4S7C64v155Ev,
  (VTBL_ENTRY)&_ZN4S7C54v156Ev,
  (VTBL_ENTRY)&_ZN4S7C54v157Ev,
  (VTBL_ENTRY)&_ZN4S7C54v158Ev,
  (VTBL_ENTRY)&_ZN4S7C54v159Ev,
  (VTBL_ENTRY)&_ZN4S7C54v160Ev,
  (VTBL_ENTRY)&_ZN4S7C54v161Ev,
  (VTBL_ENTRY)&_ZN4S7C54v162Ev,
  (VTBL_ENTRY)&_ZN4S7C54v163Ev,
  (VTBL_ENTRY)&_ZN4S7C54v164Ev,
  (VTBL_ENTRY)&_ZN4S7C54v165Ev,
  (VTBL_ENTRY)&_ZN4S7C54v166Ev,
  (VTBL_ENTRY)&_ZN4S7C54v167Ev,
  (VTBL_ENTRY)&_ZN4S7C54v168Ev,
  (VTBL_ENTRY)&_ZN4S7C54v169Ev,
  (VTBL_ENTRY)&_ZN4S7C54v170Ev,
  (VTBL_ENTRY)&_ZN4S7C54v171Ev,
  (VTBL_ENTRY)&_ZN4S7C54v172Ev,
  (VTBL_ENTRY)&_ZN4S7C54v173Ev,
  (VTBL_ENTRY)&_ZN4S7C54v174Ev,
  (VTBL_ENTRY)&_ZN4S7C54v175Ev,
  (VTBL_ENTRY)&_ZN4S7C54v176Ev,
  (VTBL_ENTRY)&_ZN4S7C54v177Ev,
  (VTBL_ENTRY)&_ZN4S7C54v178Ev,
  (VTBL_ENTRY)&_ZN4S7C54v179Ev,
  (VTBL_ENTRY)&_ZN4S7C54v180Ev,
  (VTBL_ENTRY)&_ZN4S7C54v181Ev,
  (VTBL_ENTRY)&_ZN4S7C34v182Ev,
  (VTBL_ENTRY)&_ZN4S7C34v183Ev,
  (VTBL_ENTRY)&_ZN4S7C34v184Ev,
  (VTBL_ENTRY)&_ZN4S7C34v185Ev,
  (VTBL_ENTRY)&_ZN4S7C34v186Ev,
  (VTBL_ENTRY)&_ZN4S7C34v187Ev,
};
extern VTBL_ENTRY _ZTI4S7C3[];
extern  VTBL_ENTRY _ZTV4S7C3[];
Class_Descriptor cd_S7C3 = {  "S7C3", // class name
  bases_S7C3, 7,
  &(vtc_S7C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI4S7C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV4S7C3),187, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7C2  : S7C3 {
  virtual void  v188(); // _ZN4S7C24v188Ev
  virtual void  v189(); // _ZN4S7C24v189Ev
  virtual void  v190(); // _ZN4S7C24v190Ev
  virtual void  v191(); // _ZN4S7C24v191Ev
  virtual void  v192(); // _ZN4S7C24v192Ev
  virtual void  v193(); // _ZN4S7C24v193Ev
  virtual void  v194(); // _ZN4S7C24v194Ev
  virtual void  v195(); // _ZN4S7C24v195Ev
  virtual void  v196(); // _ZN4S7C24v196Ev
  virtual void  v197(); // _ZN4S7C24v197Ev
  virtual void  v198(); // _ZN4S7C24v198Ev
  virtual void  v199(); // _ZN4S7C24v199Ev
  virtual void  v200(); // _ZN4S7C24v200Ev
  virtual void  v201(); // _ZN4S7C24v201Ev
  virtual void  v202(); // _ZN4S7C24v202Ev
  virtual void  v203(); // _ZN4S7C24v203Ev
  virtual void  v204(); // _ZN4S7C24v204Ev
  virtual void  v205(); // _ZN4S7C24v205Ev
  virtual void  v206(); // _ZN4S7C24v206Ev
  virtual void  v207(); // _ZN4S7C24v207Ev
  virtual void  v208(); // _ZN4S7C24v208Ev
  ~S7C2(); // tgen
  S7C2(); // tgen
};
//SIG(-1 S7C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ BC9{ vd m Fp Fi} 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 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 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21}


void  S7C2 ::v188(){vfunc_called(this, "_ZN4S7C24v188Ev");}
void  S7C2 ::v189(){vfunc_called(this, "_ZN4S7C24v189Ev");}
void  S7C2 ::v190(){vfunc_called(this, "_ZN4S7C24v190Ev");}
void  S7C2 ::v191(){vfunc_called(this, "_ZN4S7C24v191Ev");}
void  S7C2 ::v192(){vfunc_called(this, "_ZN4S7C24v192Ev");}
void  S7C2 ::v193(){vfunc_called(this, "_ZN4S7C24v193Ev");}
void  S7C2 ::v194(){vfunc_called(this, "_ZN4S7C24v194Ev");}
void  S7C2 ::v195(){vfunc_called(this, "_ZN4S7C24v195Ev");}
void  S7C2 ::v196(){vfunc_called(this, "_ZN4S7C24v196Ev");}
void  S7C2 ::v197(){vfunc_called(this, "_ZN4S7C24v197Ev");}
void  S7C2 ::v198(){vfunc_called(this, "_ZN4S7C24v198Ev");}
void  S7C2 ::v199(){vfunc_called(this, "_ZN4S7C24v199Ev");}
void  S7C2 ::v200(){vfunc_called(this, "_ZN4S7C24v200Ev");}
void  S7C2 ::v201(){vfunc_called(this, "_ZN4S7C24v201Ev");}
void  S7C2 ::v202(){vfunc_called(this, "_ZN4S7C24v202Ev");}
void  S7C2 ::v203(){vfunc_called(this, "_ZN4S7C24v203Ev");}
void  S7C2 ::v204(){vfunc_called(this, "_ZN4S7C24v204Ev");}
void  S7C2 ::v205(){vfunc_called(this, "_ZN4S7C24v205Ev");}
void  S7C2 ::v206(){vfunc_called(this, "_ZN4S7C24v206Ev");}
void  S7C2 ::v207(){vfunc_called(this, "_ZN4S7C24v207Ev");}
void  S7C2 ::v208(){vfunc_called(this, "_ZN4S7C24v208Ev");}
S7C2 ::~S7C2(){ note_dtor("S7C2", this);} // tgen
S7C2 ::S7C2(){ note_ctor("S7C2", this);} // tgen

static void Test_S7C2()
{
  extern Class_Descriptor cd_S7C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7C2, buf);
    S7C2 *dp, &lv = *(dp=new (buf) S7C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S7C9*)(S7C8*)(S7C7*)(S7C6*)(S7C5*)(S7C4*)(S7C3*), 0, "S7C2");
    check_base_class_offset(lv, (S7C9*)(S7C8*)(S7C7*)(S7C6*)(S7C5*)(S7C4*)(S7C3*), 0, "S7C2");
    check_base_class_offset(lv, (S7C8*)(S7C7*)(S7C6*)(S7C5*)(S7C4*)(S7C3*), 0, "S7C2");
    check_base_class_offset(lv, (S7C7*)(S7C6*)(S7C5*)(S7C4*)(S7C3*), 0, "S7C2");
    check_base_class_offset(lv, (S7C6*)(S7C5*)(S7C4*)(S7C3*), 0, "S7C2");
    check_base_class_offset(lv, (S7C5*)(S7C4*)(S7C3*), 0, "S7C2");
    check_base_class_offset(lv, (S7C4*)(S7C3*), 0, "S7C2");
    check_base_class_offset(lv, (S7C3*), 0, "S7C2");
    test_class_info(&lv, &cd_S7C2);
    dp->~S7C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7C2(Test_S7C2, "S7C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN4S7C2C1Ev();
extern void _ZN4S7C2D1Ev();
Name_Map name_map_S7C2[] = {
  NSPAIR(_ZN4S7C2C1Ev),
  NSPAIR(_ZN4S7C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S7C9;
extern VTBL_ENTRY _ZTI4S7C9[];
extern  VTBL_ENTRY _ZTV4S7C9[];
extern Class_Descriptor cd_S7C8;
extern VTBL_ENTRY _ZTI4S7C8[];
extern  VTBL_ENTRY _ZTV4S7C8[];
extern Class_Descriptor cd_S7C7;
extern VTBL_ENTRY _ZTI4S7C7[];
extern  VTBL_ENTRY _ZTV4S7C7[];
extern Class_Descriptor cd_S7C6;
extern VTBL_ENTRY _ZTI4S7C6[];
extern  VTBL_ENTRY _ZTV4S7C6[];
extern Class_Descriptor cd_S7C5;
extern VTBL_ENTRY _ZTI4S7C5[];
extern  VTBL_ENTRY _ZTV4S7C5[];
extern Class_Descriptor cd_S7C4;
extern VTBL_ENTRY _ZTI4S7C4[];
extern  VTBL_ENTRY _ZTV4S7C4[];
extern Class_Descriptor cd_S7C3;
extern VTBL_ENTRY _ZTI4S7C3[];
extern  VTBL_ENTRY _ZTV4S7C3[];
static Base_Class bases_S7C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI4S7C2[];
extern void _ZN4S7C2D1Ev();
extern void _ZN4S7C2D0Ev();
extern void _ZN4S7C92v5Ev();
extern void _ZN4S7C92v6Ev();
extern void _ZN4S7C92v7Ev();
extern void _ZN4S7C92v8Ev();
extern void _ZN4S7C92v9Ev();
extern void _ZN4S7C93v10Ev();
extern void _ZN4S7C93v11Ev();
extern void _ZN4S7C93v12Ev();
extern void _ZN4S7C93v13Ev();
extern void _ZN4S7C93v14Ev();
extern void _ZN4S7C93v15Ev();
extern void _ZN4S7C93v16Ev();
extern void _ZN4S7C93v17Ev();
extern void _ZN4S7C93v18Ev();
extern void _ZN4S7C93v19Ev();
extern void _ZN4S7C93v20Ev();
extern void _ZN4S7C93v21Ev();
extern void _ZN4S7C93v22Ev();
extern void _ZN4S7C93v23Ev();
extern void _ZN4S7C93v24Ev();
extern void _ZN4S7C93v25Ev();
extern void _ZN4S7C93v26Ev();
extern void _ZN4S7C93v27Ev();
extern void _ZN4S7C93v28Ev();
extern void _ZN4S7C93v29Ev();
extern void _ZN4S7C93v30Ev();
extern void _ZN4S7C93v31Ev();
extern void _ZN4S7C93v32Ev();
extern void _ZN4S7C93v33Ev();
extern void _ZN4S7C93v34Ev();
extern void _ZN4S7C93v35Ev();
extern void _ZN4S7C93v36Ev();
extern void _ZN4S7C93v37Ev();
extern void _ZN4S7C93v38Ev();
extern void _ZN4S7C93v39Ev();
extern void _ZN4S7C93v40Ev();
extern void _ZN4S7C93v41Ev();
extern void _ZN4S7C93v42Ev();
extern void _ZN4S7C93v43Ev();
extern void _ZN4S7C93v44Ev();
extern void _ZN4S7C93v45Ev();
extern void _ZN4S7C93v46Ev();
extern void _ZN4S7C93v47Ev();
extern void _ZN4S7C93v48Ev();
extern void _ZN4S7C93v49Ev();
extern void _ZN4S7C93v50Ev();
extern void _ZN4S7C93v51Ev();
extern void _ZN4S7C93v52Ev();
extern void _ZN4S7C93v53Ev();
extern void _ZN4S7C93v54Ev();
extern void _ZN4S7C93v55Ev();
extern void _ZN4S7C93v56Ev();
extern void _ZN4S7C93v57Ev();
extern void _ZN4S7C93v58Ev();
extern void _ZN4S7C93v59Ev();
extern void _ZN4S7C93v60Ev();
extern void _ZN4S7C93v61Ev();
extern void _ZN4S7C93v62Ev();
extern void _ZN4S7C93v63Ev();
extern void _ZN4S7C93v64Ev();
extern void _ZN4S7C93v65Ev();
extern void _ZN4S7C93v66Ev();
extern void _ZN4S7C93v67Ev();
extern void _ZN4S7C93v68Ev();
extern void _ZN4S7C93v69Ev();
extern void _ZN4S7C93v70Ev();
extern void _ZN4S7C93v71Ev();
extern void _ZN4S7C93v72Ev();
extern void _ZN4S7C93v73Ev();
extern void _ZN4S7C93v74Ev();
extern void _ZN4S7C93v75Ev();
extern void _ZN4S7C93v76Ev();
extern void _ZN4S7C93v77Ev();
extern void _ZN4S7C93v78Ev();
extern void _ZN4S7C93v79Ev();
extern void _ZN4S7C93v80Ev();
extern void _ZN4S7C93v81Ev();
extern void _ZN4S7C93v82Ev();
extern void _ZN4S7C93v83Ev();
extern void _ZN4S7C93v84Ev();
extern void _ZN4S7C93v85Ev();
extern void _ZN4S7C93v86Ev();
extern void _ZN4S7C93v87Ev();
extern void _ZN4S7C93v88Ev();
extern void _ZN4S7C93v89Ev();
extern void _ZN4S7C93v90Ev();
extern void _ZN4S7C93v91Ev();
extern void _ZN4S7C93v92Ev();
extern void _ZN4S7C93v93Ev();
extern void _ZN4S7C93v94Ev();
extern void _ZN4S7C93v95Ev();
extern void _ZN4S7C93v96Ev();
extern void _ZN4S7C93v97Ev();
extern void _ZN4S7C93v98Ev();
extern void _ZN4S7C93v99Ev();
extern void _ZN4S7C94v100Ev();
extern void _ZN4S7C94v101Ev();
extern void _ZN4S7C94v102Ev();
extern void _ZN4S7C94v103Ev();
extern void _ZN4S7C94v104Ev();
extern void _ZN4S7C94v105Ev();
extern void _ZN4S7C94v106Ev();
extern void _ZN4S7C94v107Ev();
extern void _ZN4S7C94v108Ev();
extern void _ZN4S7C94v109Ev();
extern void _ZN4S7C94v110Ev();
extern void _ZN4S7C94v111Ev();
extern void _ZN4S7C74v112Ev();
extern void _ZN4S7C74v113Ev();
extern void _ZN4S7C74v114Ev();
extern void _ZN4S7C74v115Ev();
extern void _ZN4S7C74v116Ev();
extern void _ZN4S7C74v117Ev();
extern void _ZN4S7C74v118Ev();
extern void _ZN4S7C74v119Ev();
extern void _ZN4S7C74v120Ev();
extern void _ZN4S7C74v121Ev();
extern void _ZN4S7C74v122Ev();
extern void _ZN4S7C74v123Ev();
extern void _ZN4S7C74v124Ev();
extern void _ZN4S7C74v125Ev();
extern void _ZN4S7C74v126Ev();
extern void _ZN4S7C74v127Ev();
extern void _ZN4S7C74v128Ev();
extern void _ZN4S7C74v129Ev();
extern void _ZN4S7C74v130Ev();
extern void _ZN4S7C74v131Ev();
extern void _ZN4S7C74v132Ev();
extern void _ZN4S7C74v133Ev();
extern void _ZN4S7C74v134Ev();
extern void _ZN4S7C74v135Ev();
extern void _ZN4S7C74v136Ev();
extern void _ZN4S7C74v137Ev();
extern void _ZN4S7C64v138Ev();
extern void _ZN4S7C64v139Ev();
extern void _ZN4S7C64v140Ev();
extern void _ZN4S7C64v141Ev();
extern void _ZN4S7C64v142Ev();
extern void _ZN4S7C64v143Ev();
extern void _ZN4S7C64v144Ev();
extern void _ZN4S7C64v145Ev();
extern void _ZN4S7C64v146Ev();
extern void _ZN4S7C64v147Ev();
extern void _ZN4S7C64v148Ev();
extern void _ZN4S7C64v149Ev();
extern void _ZN4S7C64v150Ev();
extern void _ZN4S7C64v151Ev();
extern void _ZN4S7C64v152Ev();
extern void _ZN4S7C64v153Ev();
extern void _ZN4S7C64v154Ev();
extern void _ZN4S7C64v155Ev();
extern void _ZN4S7C54v156Ev();
extern void _ZN4S7C54v157Ev();
extern void _ZN4S7C54v158Ev();
extern void _ZN4S7C54v159Ev();
extern void _ZN4S7C54v160Ev();
extern void _ZN4S7C54v161Ev();
extern void _ZN4S7C54v162Ev();
extern void _ZN4S7C54v163Ev();
extern void _ZN4S7C54v164Ev();
extern void _ZN4S7C54v165Ev();
extern void _ZN4S7C54v166Ev();
extern void _ZN4S7C54v167Ev();
extern void _ZN4S7C54v168Ev();
extern void _ZN4S7C54v169Ev();
extern void _ZN4S7C54v170Ev();
extern void _ZN4S7C54v171Ev();
extern void _ZN4S7C54v172Ev();
extern void _ZN4S7C54v173Ev();
extern void _ZN4S7C54v174Ev();
extern void _ZN4S7C54v175Ev();
extern void _ZN4S7C54v176Ev();
extern void _ZN4S7C54v177Ev();
extern void _ZN4S7C54v178Ev();
extern void _ZN4S7C54v179Ev();
extern void _ZN4S7C54v180Ev();
extern void _ZN4S7C54v181Ev();
extern void _ZN4S7C34v182Ev();
extern void _ZN4S7C34v183Ev();
extern void _ZN4S7C34v184Ev();
extern void _ZN4S7C34v185Ev();
extern void _ZN4S7C34v186Ev();
extern void _ZN4S7C34v187Ev();
extern void _ZN4S7C24v188Ev();
extern void _ZN4S7C24v189Ev();
extern void _ZN4S7C24v190Ev();
extern void _ZN4S7C24v191Ev();
extern void _ZN4S7C24v192Ev();
extern void _ZN4S7C24v193Ev();
extern void _ZN4S7C24v194Ev();
extern void _ZN4S7C24v195Ev();
extern void _ZN4S7C24v196Ev();
extern void _ZN4S7C24v197Ev();
extern void _ZN4S7C24v198Ev();
extern void _ZN4S7C24v199Ev();
extern void _ZN4S7C24v200Ev();
extern void _ZN4S7C24v201Ev();
extern void _ZN4S7C24v202Ev();
extern void _ZN4S7C24v203Ev();
extern void _ZN4S7C24v204Ev();
extern void _ZN4S7C24v205Ev();
extern void _ZN4S7C24v206Ev();
extern void _ZN4S7C24v207Ev();
extern void _ZN4S7C24v208Ev();
static  VTBL_ENTRY vtc_S7C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI4S7C2[0]),
  (VTBL_ENTRY)&_ZN4S7C2D1Ev,
  (VTBL_ENTRY)&_ZN4S7C2D0Ev,
  (VTBL_ENTRY)&_ZN4S7C92v5Ev,
  (VTBL_ENTRY)&_ZN4S7C92v6Ev,
  (VTBL_ENTRY)&_ZN4S7C92v7Ev,
  (VTBL_ENTRY)&_ZN4S7C92v8Ev,
  (VTBL_ENTRY)&_ZN4S7C92v9Ev,
  (VTBL_ENTRY)&_ZN4S7C93v10Ev,
  (VTBL_ENTRY)&_ZN4S7C93v11Ev,
  (VTBL_ENTRY)&_ZN4S7C93v12Ev,
  (VTBL_ENTRY)&_ZN4S7C93v13Ev,
  (VTBL_ENTRY)&_ZN4S7C93v14Ev,
  (VTBL_ENTRY)&_ZN4S7C93v15Ev,
  (VTBL_ENTRY)&_ZN4S7C93v16Ev,
  (VTBL_ENTRY)&_ZN4S7C93v17Ev,
  (VTBL_ENTRY)&_ZN4S7C93v18Ev,
  (VTBL_ENTRY)&_ZN4S7C93v19Ev,
  (VTBL_ENTRY)&_ZN4S7C93v20Ev,
  (VTBL_ENTRY)&_ZN4S7C93v21Ev,
  (VTBL_ENTRY)&_ZN4S7C93v22Ev,
  (VTBL_ENTRY)&_ZN4S7C93v23Ev,
  (VTBL_ENTRY)&_ZN4S7C93v24Ev,
  (VTBL_ENTRY)&_ZN4S7C93v25Ev,
  (VTBL_ENTRY)&_ZN4S7C93v26Ev,
  (VTBL_ENTRY)&_ZN4S7C93v27Ev,
  (VTBL_ENTRY)&_ZN4S7C93v28Ev,
  (VTBL_ENTRY)&_ZN4S7C93v29Ev,
  (VTBL_ENTRY)&_ZN4S7C93v30Ev,
  (VTBL_ENTRY)&_ZN4S7C93v31Ev,
  (VTBL_ENTRY)&_ZN4S7C93v32Ev,
  (VTBL_ENTRY)&_ZN4S7C93v33Ev,
  (VTBL_ENTRY)&_ZN4S7C93v34Ev,
  (VTBL_ENTRY)&_ZN4S7C93v35Ev,
  (VTBL_ENTRY)&_ZN4S7C93v36Ev,
  (VTBL_ENTRY)&_ZN4S7C93v37Ev,
  (VTBL_ENTRY)&_ZN4S7C93v38Ev,
  (VTBL_ENTRY)&_ZN4S7C93v39Ev,
  (VTBL_ENTRY)&_ZN4S7C93v40Ev,
  (VTBL_ENTRY)&_ZN4S7C93v41Ev,
  (VTBL_ENTRY)&_ZN4S7C93v42Ev,
  (VTBL_ENTRY)&_ZN4S7C93v43Ev,
  (VTBL_ENTRY)&_ZN4S7C93v44Ev,
  (VTBL_ENTRY)&_ZN4S7C93v45Ev,
  (VTBL_ENTRY)&_ZN4S7C93v46Ev,
  (VTBL_ENTRY)&_ZN4S7C93v47Ev,
  (VTBL_ENTRY)&_ZN4S7C93v48Ev,
  (VTBL_ENTRY)&_ZN4S7C93v49Ev,
  (VTBL_ENTRY)&_ZN4S7C93v50Ev,
  (VTBL_ENTRY)&_ZN4S7C93v51Ev,
  (VTBL_ENTRY)&_ZN4S7C93v52Ev,
  (VTBL_ENTRY)&_ZN4S7C93v53Ev,
  (VTBL_ENTRY)&_ZN4S7C93v54Ev,
  (VTBL_ENTRY)&_ZN4S7C93v55Ev,
  (VTBL_ENTRY)&_ZN4S7C93v56Ev,
  (VTBL_ENTRY)&_ZN4S7C93v57Ev,
  (VTBL_ENTRY)&_ZN4S7C93v58Ev,
  (VTBL_ENTRY)&_ZN4S7C93v59Ev,
  (VTBL_ENTRY)&_ZN4S7C93v60Ev,
  (VTBL_ENTRY)&_ZN4S7C93v61Ev,
  (VTBL_ENTRY)&_ZN4S7C93v62Ev,
  (VTBL_ENTRY)&_ZN4S7C93v63Ev,
  (VTBL_ENTRY)&_ZN4S7C93v64Ev,
  (VTBL_ENTRY)&_ZN4S7C93v65Ev,
  (VTBL_ENTRY)&_ZN4S7C93v66Ev,
  (VTBL_ENTRY)&_ZN4S7C93v67Ev,
  (VTBL_ENTRY)&_ZN4S7C93v68Ev,
  (VTBL_ENTRY)&_ZN4S7C93v69Ev,
  (VTBL_ENTRY)&_ZN4S7C93v70Ev,
  (VTBL_ENTRY)&_ZN4S7C93v71Ev,
  (VTBL_ENTRY)&_ZN4S7C93v72Ev,
  (VTBL_ENTRY)&_ZN4S7C93v73Ev,
  (VTBL_ENTRY)&_ZN4S7C93v74Ev,
  (VTBL_ENTRY)&_ZN4S7C93v75Ev,
  (VTBL_ENTRY)&_ZN4S7C93v76Ev,
  (VTBL_ENTRY)&_ZN4S7C93v77Ev,
  (VTBL_ENTRY)&_ZN4S7C93v78Ev,
  (VTBL_ENTRY)&_ZN4S7C93v79Ev,
  (VTBL_ENTRY)&_ZN4S7C93v80Ev,
  (VTBL_ENTRY)&_ZN4S7C93v81Ev,
  (VTBL_ENTRY)&_ZN4S7C93v82Ev,
  (VTBL_ENTRY)&_ZN4S7C93v83Ev,
  (VTBL_ENTRY)&_ZN4S7C93v84Ev,
  (VTBL_ENTRY)&_ZN4S7C93v85Ev,
  (VTBL_ENTRY)&_ZN4S7C93v86Ev,
  (VTBL_ENTRY)&_ZN4S7C93v87Ev,
  (VTBL_ENTRY)&_ZN4S7C93v88Ev,
  (VTBL_ENTRY)&_ZN4S7C93v89Ev,
  (VTBL_ENTRY)&_ZN4S7C93v90Ev,
  (VTBL_ENTRY)&_ZN4S7C93v91Ev,
  (VTBL_ENTRY)&_ZN4S7C93v92Ev,
  (VTBL_ENTRY)&_ZN4S7C93v93Ev,
  (VTBL_ENTRY)&_ZN4S7C93v94Ev,
  (VTBL_ENTRY)&_ZN4S7C93v95Ev,
  (VTBL_ENTRY)&_ZN4S7C93v96Ev,
  (VTBL_ENTRY)&_ZN4S7C93v97Ev,
  (VTBL_ENTRY)&_ZN4S7C93v98Ev,
  (VTBL_ENTRY)&_ZN4S7C93v99Ev,
  (VTBL_ENTRY)&_ZN4S7C94v100Ev,
  (VTBL_ENTRY)&_ZN4S7C94v101Ev,
  (VTBL_ENTRY)&_ZN4S7C94v102Ev,
  (VTBL_ENTRY)&_ZN4S7C94v103Ev,
  (VTBL_ENTRY)&_ZN4S7C94v104Ev,
  (VTBL_ENTRY)&_ZN4S7C94v105Ev,
  (VTBL_ENTRY)&_ZN4S7C94v106Ev,
  (VTBL_ENTRY)&_ZN4S7C94v107Ev,
  (VTBL_ENTRY)&_ZN4S7C94v108Ev,
  (VTBL_ENTRY)&_ZN4S7C94v109Ev,
  (VTBL_ENTRY)&_ZN4S7C94v110Ev,
  (VTBL_ENTRY)&_ZN4S7C94v111Ev,
  (VTBL_ENTRY)&_ZN4S7C74v112Ev,
  (VTBL_ENTRY)&_ZN4S7C74v113Ev,
  (VTBL_ENTRY)&_ZN4S7C74v114Ev,
  (VTBL_ENTRY)&_ZN4S7C74v115Ev,
  (VTBL_ENTRY)&_ZN4S7C74v116Ev,
  (VTBL_ENTRY)&_ZN4S7C74v117Ev,
  (VTBL_ENTRY)&_ZN4S7C74v118Ev,
  (VTBL_ENTRY)&_ZN4S7C74v119Ev,
  (VTBL_ENTRY)&_ZN4S7C74v120Ev,
  (VTBL_ENTRY)&_ZN4S7C74v121Ev,
  (VTBL_ENTRY)&_ZN4S7C74v122Ev,
  (VTBL_ENTRY)&_ZN4S7C74v123Ev,
  (VTBL_ENTRY)&_ZN4S7C74v124Ev,
  (VTBL_ENTRY)&_ZN4S7C74v125Ev,
  (VTBL_ENTRY)&_ZN4S7C74v126Ev,
  (VTBL_ENTRY)&_ZN4S7C74v127Ev,
  (VTBL_ENTRY)&_ZN4S7C74v128Ev,
  (VTBL_ENTRY)&_ZN4S7C74v129Ev,
  (VTBL_ENTRY)&_ZN4S7C74v130Ev,
  (VTBL_ENTRY)&_ZN4S7C74v131Ev,
  (VTBL_ENTRY)&_ZN4S7C74v132Ev,
  (VTBL_ENTRY)&_ZN4S7C74v133Ev,
  (VTBL_ENTRY)&_ZN4S7C74v134Ev,
  (VTBL_ENTRY)&_ZN4S7C74v135Ev,
  (VTBL_ENTRY)&_ZN4S7C74v136Ev,
  (VTBL_ENTRY)&_ZN4S7C74v137Ev,
  (VTBL_ENTRY)&_ZN4S7C64v138Ev,
  (VTBL_ENTRY)&_ZN4S7C64v139Ev,
  (VTBL_ENTRY)&_ZN4S7C64v140Ev,
  (VTBL_ENTRY)&_ZN4S7C64v141Ev,
  (VTBL_ENTRY)&_ZN4S7C64v142Ev,
  (VTBL_ENTRY)&_ZN4S7C64v143Ev,
  (VTBL_ENTRY)&_ZN4S7C64v144Ev,
  (VTBL_ENTRY)&_ZN4S7C64v145Ev,
  (VTBL_ENTRY)&_ZN4S7C64v146Ev,
  (VTBL_ENTRY)&_ZN4S7C64v147Ev,
  (VTBL_ENTRY)&_ZN4S7C64v148Ev,
  (VTBL_ENTRY)&_ZN4S7C64v149Ev,
  (VTBL_ENTRY)&_ZN4S7C64v150Ev,
  (VTBL_ENTRY)&_ZN4S7C64v151Ev,
  (VTBL_ENTRY)&_ZN4S7C64v152Ev,
  (VTBL_ENTRY)&_ZN4S7C64v153Ev,
  (VTBL_ENTRY)&_ZN4S7C64v154Ev,
  (VTBL_ENTRY)&_ZN4S7C64v155Ev,
  (VTBL_ENTRY)&_ZN4S7C54v156Ev,
  (VTBL_ENTRY)&_ZN4S7C54v157Ev,
  (VTBL_ENTRY)&_ZN4S7C54v158Ev,
  (VTBL_ENTRY)&_ZN4S7C54v159Ev,
  (VTBL_ENTRY)&_ZN4S7C54v160Ev,
  (VTBL_ENTRY)&_ZN4S7C54v161Ev,
  (VTBL_ENTRY)&_ZN4S7C54v162Ev,
  (VTBL_ENTRY)&_ZN4S7C54v163Ev,
  (VTBL_ENTRY)&_ZN4S7C54v164Ev,
  (VTBL_ENTRY)&_ZN4S7C54v165Ev,
  (VTBL_ENTRY)&_ZN4S7C54v166Ev,
  (VTBL_ENTRY)&_ZN4S7C54v167Ev,
  (VTBL_ENTRY)&_ZN4S7C54v168Ev,
  (VTBL_ENTRY)&_ZN4S7C54v169Ev,
  (VTBL_ENTRY)&_ZN4S7C54v170Ev,
  (VTBL_ENTRY)&_ZN4S7C54v171Ev,
  (VTBL_ENTRY)&_ZN4S7C54v172Ev,
  (VTBL_ENTRY)&_ZN4S7C54v173Ev,
  (VTBL_ENTRY)&_ZN4S7C54v174Ev,
  (VTBL_ENTRY)&_ZN4S7C54v175Ev,
  (VTBL_ENTRY)&_ZN4S7C54v176Ev,
  (VTBL_ENTRY)&_ZN4S7C54v177Ev,
  (VTBL_ENTRY)&_ZN4S7C54v178Ev,
  (VTBL_ENTRY)&_ZN4S7C54v179Ev,
  (VTBL_ENTRY)&_ZN4S7C54v180Ev,
  (VTBL_ENTRY)&_ZN4S7C54v181Ev,
  (VTBL_ENTRY)&_ZN4S7C34v182Ev,
  (VTBL_ENTRY)&_ZN4S7C34v183Ev,
  (VTBL_ENTRY)&_ZN4S7C34v184Ev,
  (VTBL_ENTRY)&_ZN4S7C34v185Ev,
  (VTBL_ENTRY)&_ZN4S7C34v186Ev,
  (VTBL_ENTRY)&_ZN4S7C34v187Ev,
  (VTBL_ENTRY)&_ZN4S7C24v188Ev,
  (VTBL_ENTRY)&_ZN4S7C24v189Ev,
  (VTBL_ENTRY)&_ZN4S7C24v190Ev,
  (VTBL_ENTRY)&_ZN4S7C24v191Ev,
  (VTBL_ENTRY)&_ZN4S7C24v192Ev,
  (VTBL_ENTRY)&_ZN4S7C24v193Ev,
  (VTBL_ENTRY)&_ZN4S7C24v194Ev,
  (VTBL_ENTRY)&_ZN4S7C24v195Ev,
  (VTBL_ENTRY)&_ZN4S7C24v196Ev,
  (VTBL_ENTRY)&_ZN4S7C24v197Ev,
  (VTBL_ENTRY)&_ZN4S7C24v198Ev,
  (VTBL_ENTRY)&_ZN4S7C24v199Ev,
  (VTBL_ENTRY)&_ZN4S7C24v200Ev,
  (VTBL_ENTRY)&_ZN4S7C24v201Ev,
  (VTBL_ENTRY)&_ZN4S7C24v202Ev,
  (VTBL_ENTRY)&_ZN4S7C24v203Ev,
  (VTBL_ENTRY)&_ZN4S7C24v204Ev,
  (VTBL_ENTRY)&_ZN4S7C24v205Ev,
  (VTBL_ENTRY)&_ZN4S7C24v206Ev,
  (VTBL_ENTRY)&_ZN4S7C24v207Ev,
  (VTBL_ENTRY)&_ZN4S7C24v208Ev,
};
extern VTBL_ENTRY _ZTI4S7C2[];
extern  VTBL_ENTRY _ZTV4S7C2[];
Class_Descriptor cd_S7C2 = {  "S7C2", // class name
  bases_S7C2, 8,
  &(vtc_S7C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI4S7C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV4S7C2),208, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  8, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7C1  : S7C2 {
  virtual void  v1(); // _ZN4S7C12v1Ev
  virtual void  v2(); // _ZN4S7C12v2Ev
  virtual void  v3(); // _ZN4S7C12v3Ev
  virtual void  v4(); // _ZN4S7C12v4Ev
  ~S7C1(); // tgen
  S7C1(); // tgen
};
//SIG(1 S7C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ BC9{ BC10{ vd m Fp Fi} 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 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 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} v1 v2 v3 v4}


void  S7C1 ::v1(){vfunc_called(this, "_ZN4S7C12v1Ev");}
void  S7C1 ::v2(){vfunc_called(this, "_ZN4S7C12v2Ev");}
void  S7C1 ::v3(){vfunc_called(this, "_ZN4S7C12v3Ev");}
void  S7C1 ::v4(){vfunc_called(this, "_ZN4S7C12v4Ev");}
S7C1 ::~S7C1(){ note_dtor("S7C1", this);} // tgen
S7C1 ::S7C1(){ note_ctor("S7C1", this);} // tgen

static void Test_S7C1()
{
  extern Class_Descriptor cd_S7C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7C1, buf);
    S7C1 *dp, &lv = *(dp=new (buf) S7C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S7C9*)(S7C8*)(S7C7*)(S7C6*)(S7C5*)(S7C4*)(S7C3*)(S7C2*), 0, "S7C1");
    check_base_class_offset(lv, (S7C9*)(S7C8*)(S7C7*)(S7C6*)(S7C5*)(S7C4*)(S7C3*)(S7C2*), 0, "S7C1");
    check_base_class_offset(lv, (S7C8*)(S7C7*)(S7C6*)(S7C5*)(S7C4*)(S7C3*)(S7C2*), 0, "S7C1");
    check_base_class_offset(lv, (S7C7*)(S7C6*)(S7C5*)(S7C4*)(S7C3*)(S7C2*), 0, "S7C1");
    check_base_class_offset(lv, (S7C6*)(S7C5*)(S7C4*)(S7C3*)(S7C2*), 0, "S7C1");
    check_base_class_offset(lv, (S7C5*)(S7C4*)(S7C3*)(S7C2*), 0, "S7C1");
    check_base_class_offset(lv, (S7C4*)(S7C3*)(S7C2*), 0, "S7C1");
    check_base_class_offset(lv, (S7C3*)(S7C2*), 0, "S7C1");
    check_base_class_offset(lv, (S7C2*), 0, "S7C1");
    test_class_info(&lv, &cd_S7C1);
    dp->~S7C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7C1(Test_S7C1, "S7C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN4S7C1C1Ev();
extern void _ZN4S7C1D1Ev();
Name_Map name_map_S7C1[] = {
  NSPAIR(_ZN4S7C1C1Ev),
  NSPAIR(_ZN4S7C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S7C9;
extern VTBL_ENTRY _ZTI4S7C9[];
extern  VTBL_ENTRY _ZTV4S7C9[];
extern Class_Descriptor cd_S7C8;
extern VTBL_ENTRY _ZTI4S7C8[];
extern  VTBL_ENTRY _ZTV4S7C8[];
extern Class_Descriptor cd_S7C7;
extern VTBL_ENTRY _ZTI4S7C7[];
extern  VTBL_ENTRY _ZTV4S7C7[];
extern Class_Descriptor cd_S7C6;
extern VTBL_ENTRY _ZTI4S7C6[];
extern  VTBL_ENTRY _ZTV4S7C6[];
extern Class_Descriptor cd_S7C5;
extern VTBL_ENTRY _ZTI4S7C5[];
extern  VTBL_ENTRY _ZTV4S7C5[];
extern Class_Descriptor cd_S7C4;
extern VTBL_ENTRY _ZTI4S7C4[];
extern  VTBL_ENTRY _ZTV4S7C4[];
extern Class_Descriptor cd_S7C3;
extern VTBL_ENTRY _ZTI4S7C3[];
extern  VTBL_ENTRY _ZTV4S7C3[];
extern Class_Descriptor cd_S7C2;
extern VTBL_ENTRY _ZTI4S7C2[];
extern  VTBL_ENTRY _ZTV4S7C2[];
static Base_Class bases_S7C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI4S7C1[];
extern void _ZN4S7C1D1Ev();
extern void _ZN4S7C1D0Ev();
extern void _ZN4S7C92v5Ev();
extern void _ZN4S7C92v6Ev();
extern void _ZN4S7C92v7Ev();
extern void _ZN4S7C92v8Ev();
extern void _ZN4S7C92v9Ev();
extern void _ZN4S7C93v10Ev();
extern void _ZN4S7C93v11Ev();
extern void _ZN4S7C93v12Ev();
extern void _ZN4S7C93v13Ev();
extern void _ZN4S7C93v14Ev();
extern void _ZN4S7C93v15Ev();
extern void _ZN4S7C93v16Ev();
extern void _ZN4S7C93v17Ev();
extern void _ZN4S7C93v18Ev();
extern void _ZN4S7C93v19Ev();
extern void _ZN4S7C93v20Ev();
extern void _ZN4S7C93v21Ev();
extern void _ZN4S7C93v22Ev();
extern void _ZN4S7C93v23Ev();
extern void _ZN4S7C93v24Ev();
extern void _ZN4S7C93v25Ev();
extern void _ZN4S7C93v26Ev();
extern void _ZN4S7C93v27Ev();
extern void _ZN4S7C93v28Ev();
extern void _ZN4S7C93v29Ev();
extern void _ZN4S7C93v30Ev();
extern void _ZN4S7C93v31Ev();
extern void _ZN4S7C93v32Ev();
extern void _ZN4S7C93v33Ev();
extern void _ZN4S7C93v34Ev();
extern void _ZN4S7C93v35Ev();
extern void _ZN4S7C93v36Ev();
extern void _ZN4S7C93v37Ev();
extern void _ZN4S7C93v38Ev();
extern void _ZN4S7C93v39Ev();
extern void _ZN4S7C93v40Ev();
extern void _ZN4S7C93v41Ev();
extern void _ZN4S7C93v42Ev();
extern void _ZN4S7C93v43Ev();
extern void _ZN4S7C93v44Ev();
extern void _ZN4S7C93v45Ev();
extern void _ZN4S7C93v46Ev();
extern void _ZN4S7C93v47Ev();
extern void _ZN4S7C93v48Ev();
extern void _ZN4S7C93v49Ev();
extern void _ZN4S7C93v50Ev();
extern void _ZN4S7C93v51Ev();
extern void _ZN4S7C93v52Ev();
extern void _ZN4S7C93v53Ev();
extern void _ZN4S7C93v54Ev();
extern void _ZN4S7C93v55Ev();
extern void _ZN4S7C93v56Ev();
extern void _ZN4S7C93v57Ev();
extern void _ZN4S7C93v58Ev();
extern void _ZN4S7C93v59Ev();
extern void _ZN4S7C93v60Ev();
extern void _ZN4S7C93v61Ev();
extern void _ZN4S7C93v62Ev();
extern void _ZN4S7C93v63Ev();
extern void _ZN4S7C93v64Ev();
extern void _ZN4S7C93v65Ev();
extern void _ZN4S7C93v66Ev();
extern void _ZN4S7C93v67Ev();
extern void _ZN4S7C93v68Ev();
extern void _ZN4S7C93v69Ev();
extern void _ZN4S7C93v70Ev();
extern void _ZN4S7C93v71Ev();
extern void _ZN4S7C93v72Ev();
extern void _ZN4S7C93v73Ev();
extern void _ZN4S7C93v74Ev();
extern void _ZN4S7C93v75Ev();
extern void _ZN4S7C93v76Ev();
extern void _ZN4S7C93v77Ev();
extern void _ZN4S7C93v78Ev();
extern void _ZN4S7C93v79Ev();
extern void _ZN4S7C93v80Ev();
extern void _ZN4S7C93v81Ev();
extern void _ZN4S7C93v82Ev();
extern void _ZN4S7C93v83Ev();
extern void _ZN4S7C93v84Ev();
extern void _ZN4S7C93v85Ev();
extern void _ZN4S7C93v86Ev();
extern void _ZN4S7C93v87Ev();
extern void _ZN4S7C93v88Ev();
extern void _ZN4S7C93v89Ev();
extern void _ZN4S7C93v90Ev();
extern void _ZN4S7C93v91Ev();
extern void _ZN4S7C93v92Ev();
extern void _ZN4S7C93v93Ev();
extern void _ZN4S7C93v94Ev();
extern void _ZN4S7C93v95Ev();
extern void _ZN4S7C93v96Ev();
extern void _ZN4S7C93v97Ev();
extern void _ZN4S7C93v98Ev();
extern void _ZN4S7C93v99Ev();
extern void _ZN4S7C94v100Ev();
extern void _ZN4S7C94v101Ev();
extern void _ZN4S7C94v102Ev();
extern void _ZN4S7C94v103Ev();
extern void _ZN4S7C94v104Ev();
extern void _ZN4S7C94v105Ev();
extern void _ZN4S7C94v106Ev();
extern void _ZN4S7C94v107Ev();
extern void _ZN4S7C94v108Ev();
extern void _ZN4S7C94v109Ev();
extern void _ZN4S7C94v110Ev();
extern void _ZN4S7C94v111Ev();
extern void _ZN4S7C74v112Ev();
extern void _ZN4S7C74v113Ev();
extern void _ZN4S7C74v114Ev();
extern void _ZN4S7C74v115Ev();
extern void _ZN4S7C74v116Ev();
extern void _ZN4S7C74v117Ev();
extern void _ZN4S7C74v118Ev();
extern void _ZN4S7C74v119Ev();
extern void _ZN4S7C74v120Ev();
extern void _ZN4S7C74v121Ev();
extern void _ZN4S7C74v122Ev();
extern void _ZN4S7C74v123Ev();
extern void _ZN4S7C74v124Ev();
extern void _ZN4S7C74v125Ev();
extern void _ZN4S7C74v126Ev();
extern void _ZN4S7C74v127Ev();
extern void _ZN4S7C74v128Ev();
extern void _ZN4S7C74v129Ev();
extern void _ZN4S7C74v130Ev();
extern void _ZN4S7C74v131Ev();
extern void _ZN4S7C74v132Ev();
extern void _ZN4S7C74v133Ev();
extern void _ZN4S7C74v134Ev();
extern void _ZN4S7C74v135Ev();
extern void _ZN4S7C74v136Ev();
extern void _ZN4S7C74v137Ev();
extern void _ZN4S7C64v138Ev();
extern void _ZN4S7C64v139Ev();
extern void _ZN4S7C64v140Ev();
extern void _ZN4S7C64v141Ev();
extern void _ZN4S7C64v142Ev();
extern void _ZN4S7C64v143Ev();
extern void _ZN4S7C64v144Ev();
extern void _ZN4S7C64v145Ev();
extern void _ZN4S7C64v146Ev();
extern void _ZN4S7C64v147Ev();
extern void _ZN4S7C64v148Ev();
extern void _ZN4S7C64v149Ev();
extern void _ZN4S7C64v150Ev();
extern void _ZN4S7C64v151Ev();
extern void _ZN4S7C64v152Ev();
extern void _ZN4S7C64v153Ev();
extern void _ZN4S7C64v154Ev();
extern void _ZN4S7C64v155Ev();
extern void _ZN4S7C54v156Ev();
extern void _ZN4S7C54v157Ev();
extern void _ZN4S7C54v158Ev();
extern void _ZN4S7C54v159Ev();
extern void _ZN4S7C54v160Ev();
extern void _ZN4S7C54v161Ev();
extern void _ZN4S7C54v162Ev();
extern void _ZN4S7C54v163Ev();
extern void _ZN4S7C54v164Ev();
extern void _ZN4S7C54v165Ev();
extern void _ZN4S7C54v166Ev();
extern void _ZN4S7C54v167Ev();
extern void _ZN4S7C54v168Ev();
extern void _ZN4S7C54v169Ev();
extern void _ZN4S7C54v170Ev();
extern void _ZN4S7C54v171Ev();
extern void _ZN4S7C54v172Ev();
extern void _ZN4S7C54v173Ev();
extern void _ZN4S7C54v174Ev();
extern void _ZN4S7C54v175Ev();
extern void _ZN4S7C54v176Ev();
extern void _ZN4S7C54v177Ev();
extern void _ZN4S7C54v178Ev();
extern void _ZN4S7C54v179Ev();
extern void _ZN4S7C54v180Ev();
extern void _ZN4S7C54v181Ev();
extern void _ZN4S7C34v182Ev();
extern void _ZN4S7C34v183Ev();
extern void _ZN4S7C34v184Ev();
extern void _ZN4S7C34v185Ev();
extern void _ZN4S7C34v186Ev();
extern void _ZN4S7C34v187Ev();
extern void _ZN4S7C24v188Ev();
extern void _ZN4S7C24v189Ev();
extern void _ZN4S7C24v190Ev();
extern void _ZN4S7C24v191Ev();
extern void _ZN4S7C24v192Ev();
extern void _ZN4S7C24v193Ev();
extern void _ZN4S7C24v194Ev();
extern void _ZN4S7C24v195Ev();
extern void _ZN4S7C24v196Ev();
extern void _ZN4S7C24v197Ev();
extern void _ZN4S7C24v198Ev();
extern void _ZN4S7C24v199Ev();
extern void _ZN4S7C24v200Ev();
extern void _ZN4S7C24v201Ev();
extern void _ZN4S7C24v202Ev();
extern void _ZN4S7C24v203Ev();
extern void _ZN4S7C24v204Ev();
extern void _ZN4S7C24v205Ev();
extern void _ZN4S7C24v206Ev();
extern void _ZN4S7C24v207Ev();
extern void _ZN4S7C24v208Ev();
extern void _ZN4S7C12v1Ev();
extern void _ZN4S7C12v2Ev();
extern void _ZN4S7C12v3Ev();
extern void _ZN4S7C12v4Ev();
static  VTBL_ENTRY vtc_S7C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI4S7C1[0]),
  (VTBL_ENTRY)&_ZN4S7C1D1Ev,
  (VTBL_ENTRY)&_ZN4S7C1D0Ev,
  (VTBL_ENTRY)&_ZN4S7C92v5Ev,
  (VTBL_ENTRY)&_ZN4S7C92v6Ev,
  (VTBL_ENTRY)&_ZN4S7C92v7Ev,
  (VTBL_ENTRY)&_ZN4S7C92v8Ev,
  (VTBL_ENTRY)&_ZN4S7C92v9Ev,
  (VTBL_ENTRY)&_ZN4S7C93v10Ev,
  (VTBL_ENTRY)&_ZN4S7C93v11Ev,
  (VTBL_ENTRY)&_ZN4S7C93v12Ev,
  (VTBL_ENTRY)&_ZN4S7C93v13Ev,
  (VTBL_ENTRY)&_ZN4S7C93v14Ev,
  (VTBL_ENTRY)&_ZN4S7C93v15Ev,
  (VTBL_ENTRY)&_ZN4S7C93v16Ev,
  (VTBL_ENTRY)&_ZN4S7C93v17Ev,
  (VTBL_ENTRY)&_ZN4S7C93v18Ev,
  (VTBL_ENTRY)&_ZN4S7C93v19Ev,
  (VTBL_ENTRY)&_ZN4S7C93v20Ev,
  (VTBL_ENTRY)&_ZN4S7C93v21Ev,
  (VTBL_ENTRY)&_ZN4S7C93v22Ev,
  (VTBL_ENTRY)&_ZN4S7C93v23Ev,
  (VTBL_ENTRY)&_ZN4S7C93v24Ev,
  (VTBL_ENTRY)&_ZN4S7C93v25Ev,
  (VTBL_ENTRY)&_ZN4S7C93v26Ev,
  (VTBL_ENTRY)&_ZN4S7C93v27Ev,
  (VTBL_ENTRY)&_ZN4S7C93v28Ev,
  (VTBL_ENTRY)&_ZN4S7C93v29Ev,
  (VTBL_ENTRY)&_ZN4S7C93v30Ev,
  (VTBL_ENTRY)&_ZN4S7C93v31Ev,
  (VTBL_ENTRY)&_ZN4S7C93v32Ev,
  (VTBL_ENTRY)&_ZN4S7C93v33Ev,
  (VTBL_ENTRY)&_ZN4S7C93v34Ev,
  (VTBL_ENTRY)&_ZN4S7C93v35Ev,
  (VTBL_ENTRY)&_ZN4S7C93v36Ev,
  (VTBL_ENTRY)&_ZN4S7C93v37Ev,
  (VTBL_ENTRY)&_ZN4S7C93v38Ev,
  (VTBL_ENTRY)&_ZN4S7C93v39Ev,
  (VTBL_ENTRY)&_ZN4S7C93v40Ev,
  (VTBL_ENTRY)&_ZN4S7C93v41Ev,
  (VTBL_ENTRY)&_ZN4S7C93v42Ev,
  (VTBL_ENTRY)&_ZN4S7C93v43Ev,
  (VTBL_ENTRY)&_ZN4S7C93v44Ev,
  (VTBL_ENTRY)&_ZN4S7C93v45Ev,
  (VTBL_ENTRY)&_ZN4S7C93v46Ev,
  (VTBL_ENTRY)&_ZN4S7C93v47Ev,
  (VTBL_ENTRY)&_ZN4S7C93v48Ev,
  (VTBL_ENTRY)&_ZN4S7C93v49Ev,
  (VTBL_ENTRY)&_ZN4S7C93v50Ev,
  (VTBL_ENTRY)&_ZN4S7C93v51Ev,
  (VTBL_ENTRY)&_ZN4S7C93v52Ev,
  (VTBL_ENTRY)&_ZN4S7C93v53Ev,
  (VTBL_ENTRY)&_ZN4S7C93v54Ev,
  (VTBL_ENTRY)&_ZN4S7C93v55Ev,
  (VTBL_ENTRY)&_ZN4S7C93v56Ev,
  (VTBL_ENTRY)&_ZN4S7C93v57Ev,
  (VTBL_ENTRY)&_ZN4S7C93v58Ev,
  (VTBL_ENTRY)&_ZN4S7C93v59Ev,
  (VTBL_ENTRY)&_ZN4S7C93v60Ev,
  (VTBL_ENTRY)&_ZN4S7C93v61Ev,
  (VTBL_ENTRY)&_ZN4S7C93v62Ev,
  (VTBL_ENTRY)&_ZN4S7C93v63Ev,
  (VTBL_ENTRY)&_ZN4S7C93v64Ev,
  (VTBL_ENTRY)&_ZN4S7C93v65Ev,
  (VTBL_ENTRY)&_ZN4S7C93v66Ev,
  (VTBL_ENTRY)&_ZN4S7C93v67Ev,
  (VTBL_ENTRY)&_ZN4S7C93v68Ev,
  (VTBL_ENTRY)&_ZN4S7C93v69Ev,
  (VTBL_ENTRY)&_ZN4S7C93v70Ev,
  (VTBL_ENTRY)&_ZN4S7C93v71Ev,
  (VTBL_ENTRY)&_ZN4S7C93v72Ev,
  (VTBL_ENTRY)&_ZN4S7C93v73Ev,
  (VTBL_ENTRY)&_ZN4S7C93v74Ev,
  (VTBL_ENTRY)&_ZN4S7C93v75Ev,
  (VTBL_ENTRY)&_ZN4S7C93v76Ev,
  (VTBL_ENTRY)&_ZN4S7C93v77Ev,
  (VTBL_ENTRY)&_ZN4S7C93v78Ev,
  (VTBL_ENTRY)&_ZN4S7C93v79Ev,
  (VTBL_ENTRY)&_ZN4S7C93v80Ev,
  (VTBL_ENTRY)&_ZN4S7C93v81Ev,
  (VTBL_ENTRY)&_ZN4S7C93v82Ev,
  (VTBL_ENTRY)&_ZN4S7C93v83Ev,
  (VTBL_ENTRY)&_ZN4S7C93v84Ev,
  (VTBL_ENTRY)&_ZN4S7C93v85Ev,
  (VTBL_ENTRY)&_ZN4S7C93v86Ev,
  (VTBL_ENTRY)&_ZN4S7C93v87Ev,
  (VTBL_ENTRY)&_ZN4S7C93v88Ev,
  (VTBL_ENTRY)&_ZN4S7C93v89Ev,
  (VTBL_ENTRY)&_ZN4S7C93v90Ev,
  (VTBL_ENTRY)&_ZN4S7C93v91Ev,
  (VTBL_ENTRY)&_ZN4S7C93v92Ev,
  (VTBL_ENTRY)&_ZN4S7C93v93Ev,
  (VTBL_ENTRY)&_ZN4S7C93v94Ev,
  (VTBL_ENTRY)&_ZN4S7C93v95Ev,
  (VTBL_ENTRY)&_ZN4S7C93v96Ev,
  (VTBL_ENTRY)&_ZN4S7C93v97Ev,
  (VTBL_ENTRY)&_ZN4S7C93v98Ev,
  (VTBL_ENTRY)&_ZN4S7C93v99Ev,
  (VTBL_ENTRY)&_ZN4S7C94v100Ev,
  (VTBL_ENTRY)&_ZN4S7C94v101Ev,
  (VTBL_ENTRY)&_ZN4S7C94v102Ev,
  (VTBL_ENTRY)&_ZN4S7C94v103Ev,
  (VTBL_ENTRY)&_ZN4S7C94v104Ev,
  (VTBL_ENTRY)&_ZN4S7C94v105Ev,
  (VTBL_ENTRY)&_ZN4S7C94v106Ev,
  (VTBL_ENTRY)&_ZN4S7C94v107Ev,
  (VTBL_ENTRY)&_ZN4S7C94v108Ev,
  (VTBL_ENTRY)&_ZN4S7C94v109Ev,
  (VTBL_ENTRY)&_ZN4S7C94v110Ev,
  (VTBL_ENTRY)&_ZN4S7C94v111Ev,
  (VTBL_ENTRY)&_ZN4S7C74v112Ev,
  (VTBL_ENTRY)&_ZN4S7C74v113Ev,
  (VTBL_ENTRY)&_ZN4S7C74v114Ev,
  (VTBL_ENTRY)&_ZN4S7C74v115Ev,
  (VTBL_ENTRY)&_ZN4S7C74v116Ev,
  (VTBL_ENTRY)&_ZN4S7C74v117Ev,
  (VTBL_ENTRY)&_ZN4S7C74v118Ev,
  (VTBL_ENTRY)&_ZN4S7C74v119Ev,
  (VTBL_ENTRY)&_ZN4S7C74v120Ev,
  (VTBL_ENTRY)&_ZN4S7C74v121Ev,
  (VTBL_ENTRY)&_ZN4S7C74v122Ev,
  (VTBL_ENTRY)&_ZN4S7C74v123Ev,
  (VTBL_ENTRY)&_ZN4S7C74v124Ev,
  (VTBL_ENTRY)&_ZN4S7C74v125Ev,
  (VTBL_ENTRY)&_ZN4S7C74v126Ev,
  (VTBL_ENTRY)&_ZN4S7C74v127Ev,
  (VTBL_ENTRY)&_ZN4S7C74v128Ev,
  (VTBL_ENTRY)&_ZN4S7C74v129Ev,
  (VTBL_ENTRY)&_ZN4S7C74v130Ev,
  (VTBL_ENTRY)&_ZN4S7C74v131Ev,
  (VTBL_ENTRY)&_ZN4S7C74v132Ev,
  (VTBL_ENTRY)&_ZN4S7C74v133Ev,
  (VTBL_ENTRY)&_ZN4S7C74v134Ev,
  (VTBL_ENTRY)&_ZN4S7C74v135Ev,
  (VTBL_ENTRY)&_ZN4S7C74v136Ev,
  (VTBL_ENTRY)&_ZN4S7C74v137Ev,
  (VTBL_ENTRY)&_ZN4S7C64v138Ev,
  (VTBL_ENTRY)&_ZN4S7C64v139Ev,
  (VTBL_ENTRY)&_ZN4S7C64v140Ev,
  (VTBL_ENTRY)&_ZN4S7C64v141Ev,
  (VTBL_ENTRY)&_ZN4S7C64v142Ev,
  (VTBL_ENTRY)&_ZN4S7C64v143Ev,
  (VTBL_ENTRY)&_ZN4S7C64v144Ev,
  (VTBL_ENTRY)&_ZN4S7C64v145Ev,
  (VTBL_ENTRY)&_ZN4S7C64v146Ev,
  (VTBL_ENTRY)&_ZN4S7C64v147Ev,
  (VTBL_ENTRY)&_ZN4S7C64v148Ev,
  (VTBL_ENTRY)&_ZN4S7C64v149Ev,
  (VTBL_ENTRY)&_ZN4S7C64v150Ev,
  (VTBL_ENTRY)&_ZN4S7C64v151Ev,
  (VTBL_ENTRY)&_ZN4S7C64v152Ev,
  (VTBL_ENTRY)&_ZN4S7C64v153Ev,
  (VTBL_ENTRY)&_ZN4S7C64v154Ev,
  (VTBL_ENTRY)&_ZN4S7C64v155Ev,
  (VTBL_ENTRY)&_ZN4S7C54v156Ev,
  (VTBL_ENTRY)&_ZN4S7C54v157Ev,
  (VTBL_ENTRY)&_ZN4S7C54v158Ev,
  (VTBL_ENTRY)&_ZN4S7C54v159Ev,
  (VTBL_ENTRY)&_ZN4S7C54v160Ev,
  (VTBL_ENTRY)&_ZN4S7C54v161Ev,
  (VTBL_ENTRY)&_ZN4S7C54v162Ev,
  (VTBL_ENTRY)&_ZN4S7C54v163Ev,
  (VTBL_ENTRY)&_ZN4S7C54v164Ev,
  (VTBL_ENTRY)&_ZN4S7C54v165Ev,
  (VTBL_ENTRY)&_ZN4S7C54v166Ev,
  (VTBL_ENTRY)&_ZN4S7C54v167Ev,
  (VTBL_ENTRY)&_ZN4S7C54v168Ev,
  (VTBL_ENTRY)&_ZN4S7C54v169Ev,
  (VTBL_ENTRY)&_ZN4S7C54v170Ev,
  (VTBL_ENTRY)&_ZN4S7C54v171Ev,
  (VTBL_ENTRY)&_ZN4S7C54v172Ev,
  (VTBL_ENTRY)&_ZN4S7C54v173Ev,
  (VTBL_ENTRY)&_ZN4S7C54v174Ev,
  (VTBL_ENTRY)&_ZN4S7C54v175Ev,
  (VTBL_ENTRY)&_ZN4S7C54v176Ev,
  (VTBL_ENTRY)&_ZN4S7C54v177Ev,
  (VTBL_ENTRY)&_ZN4S7C54v178Ev,
  (VTBL_ENTRY)&_ZN4S7C54v179Ev,
  (VTBL_ENTRY)&_ZN4S7C54v180Ev,
  (VTBL_ENTRY)&_ZN4S7C54v181Ev,
  (VTBL_ENTRY)&_ZN4S7C34v182Ev,
  (VTBL_ENTRY)&_ZN4S7C34v183Ev,
  (VTBL_ENTRY)&_ZN4S7C34v184Ev,
  (VTBL_ENTRY)&_ZN4S7C34v185Ev,
  (VTBL_ENTRY)&_ZN4S7C34v186Ev,
  (VTBL_ENTRY)&_ZN4S7C34v187Ev,
  (VTBL_ENTRY)&_ZN4S7C24v188Ev,
  (VTBL_ENTRY)&_ZN4S7C24v189Ev,
  (VTBL_ENTRY)&_ZN4S7C24v190Ev,
  (VTBL_ENTRY)&_ZN4S7C24v191Ev,
  (VTBL_ENTRY)&_ZN4S7C24v192Ev,
  (VTBL_ENTRY)&_ZN4S7C24v193Ev,
  (VTBL_ENTRY)&_ZN4S7C24v194Ev,
  (VTBL_ENTRY)&_ZN4S7C24v195Ev,
  (VTBL_ENTRY)&_ZN4S7C24v196Ev,
  (VTBL_ENTRY)&_ZN4S7C24v197Ev,
  (VTBL_ENTRY)&_ZN4S7C24v198Ev,
  (VTBL_ENTRY)&_ZN4S7C24v199Ev,
  (VTBL_ENTRY)&_ZN4S7C24v200Ev,
  (VTBL_ENTRY)&_ZN4S7C24v201Ev,
  (VTBL_ENTRY)&_ZN4S7C24v202Ev,
  (VTBL_ENTRY)&_ZN4S7C24v203Ev,
  (VTBL_ENTRY)&_ZN4S7C24v204Ev,
  (VTBL_ENTRY)&_ZN4S7C24v205Ev,
  (VTBL_ENTRY)&_ZN4S7C24v206Ev,
  (VTBL_ENTRY)&_ZN4S7C24v207Ev,
  (VTBL_ENTRY)&_ZN4S7C24v208Ev,
  (VTBL_ENTRY)&_ZN4S7C12v1Ev,
  (VTBL_ENTRY)&_ZN4S7C12v2Ev,
  (VTBL_ENTRY)&_ZN4S7C12v3Ev,
  (VTBL_ENTRY)&_ZN4S7C12v4Ev,
};
extern VTBL_ENTRY _ZTI4S7C1[];
extern  VTBL_ENTRY _ZTV4S7C1[];
Class_Descriptor cd_S7C1 = {  "S7C1", // class name
  bases_S7C1, 9,
  &(vtc_S7C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI4S7C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV4S7C1),212, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  9, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S123C6  : S1C11_nt {
  virtual void  v17(); // _ZN6S123C63v17Ev
  virtual void  v18(); // _ZN6S123C63v18Ev
  virtual void  v19(); // _ZN6S123C63v19Ev
  virtual void  v20(); // _ZN6S123C63v20Ev
  virtual void  v21(); // _ZN6S123C63v21Ev
  virtual void  v22(); // _ZN6S123C63v22Ev
  virtual void  v23(); // _ZN6S123C63v23Ev
  virtual void  v24(); // _ZN6S123C63v24Ev
  virtual void  v25(); // _ZN6S123C63v25Ev
  virtual void  v26(); // _ZN6S123C63v26Ev
  virtual void  v27(); // _ZN6S123C63v27Ev
  virtual void  v28(); // _ZN6S123C63v28Ev
  virtual void  v29(); // _ZN6S123C63v29Ev
  virtual void  v30(); // _ZN6S123C63v30Ev
  virtual void  v31(); // _ZN6S123C63v31Ev
  virtual void  v32(); // _ZN6S123C63v32Ev
  virtual void  v33(); // _ZN6S123C63v33Ev
  virtual void  v34(); // _ZN6S123C63v34Ev
  virtual void  v35(); // _ZN6S123C63v35Ev
  virtual void  v36(); // _ZN6S123C63v36Ev
  virtual void  v37(); // _ZN6S123C63v37Ev
  virtual void  v38(); // _ZN6S123C63v38Ev
  virtual void  v39(); // _ZN6S123C63v39Ev
  virtual void  v40(); // _ZN6S123C63v40Ev
  virtual void  v41(); // _ZN6S123C63v41Ev
  virtual void  v42(); // _ZN6S123C63v42Ev
  virtual void  v43(); // _ZN6S123C63v43Ev
  virtual void  v44(); // _ZN6S123C63v44Ev
  virtual void  v45(); // _ZN6S123C63v45Ev
  virtual void  v46(); // _ZN6S123C63v46Ev
  virtual void  v47(); // _ZN6S123C63v47Ev
  virtual void  v48(); // _ZN6S123C63v48Ev
  virtual void  v49(); // _ZN6S123C63v49Ev
  virtual void  v50(); // _ZN6S123C63v50Ev
  virtual void  v51(); // _ZN6S123C63v51Ev
  virtual void  v52(); // _ZN6S123C63v52Ev
  virtual void  v53(); // _ZN6S123C63v53Ev
  virtual void  v54(); // _ZN6S123C63v54Ev
  virtual void  v55(); // _ZN6S123C63v55Ev
  virtual void  v56(); // _ZN6S123C63v56Ev
  virtual void  v57(); // _ZN6S123C63v57Ev
  virtual void  v58(); // _ZN6S123C63v58Ev
  virtual void  v59(); // _ZN6S123C63v59Ev
  virtual void  v60(); // _ZN6S123C63v60Ev
  virtual void  v61(); // _ZN6S123C63v61Ev
  virtual void  v62(); // _ZN6S123C63v62Ev
  virtual void  v63(); // _ZN6S123C63v63Ev
  virtual void  v64(); // _ZN6S123C63v64Ev
  virtual void  v65(); // _ZN6S123C63v65Ev
  virtual void  v66(); // _ZN6S123C63v66Ev
  virtual void  v67(); // _ZN6S123C63v67Ev
  virtual void  v68(); // _ZN6S123C63v68Ev
  virtual void  v69(); // _ZN6S123C63v69Ev
  virtual void  v70(); // _ZN6S123C63v70Ev
  virtual void  v71(); // _ZN6S123C63v71Ev
  virtual void  v72(); // _ZN6S123C63v72Ev
  virtual void  v73(); // _ZN6S123C63v73Ev
  virtual void  v74(); // _ZN6S123C63v74Ev
  virtual void  v75(); // _ZN6S123C63v75Ev
  virtual void  v76(); // _ZN6S123C63v76Ev
  virtual void  v77(); // _ZN6S123C63v77Ev
  virtual void  v78(); // _ZN6S123C63v78Ev
  virtual void  v79(); // _ZN6S123C63v79Ev
  virtual void  v80(); // _ZN6S123C63v80Ev
  virtual void  v81(); // _ZN6S123C63v81Ev
  virtual void  v82(); // _ZN6S123C63v82Ev
  virtual void  v83(); // _ZN6S123C63v83Ev
  virtual void  v84(); // _ZN6S123C63v84Ev
  virtual void  v85(); // _ZN6S123C63v85Ev
  virtual void  v86(); // _ZN6S123C63v86Ev
  virtual void  v87(); // _ZN6S123C63v87Ev
  virtual void  v88(); // _ZN6S123C63v88Ev
  virtual void  v89(); // _ZN6S123C63v89Ev
  virtual void  v90(); // _ZN6S123C63v90Ev
  virtual void  v91(); // _ZN6S123C63v91Ev
  virtual void  v92(); // _ZN6S123C63v92Ev
  virtual void  v93(); // _ZN6S123C63v93Ev
  virtual void  v94(); // _ZN6S123C63v94Ev
  virtual void  v95(); // _ZN6S123C63v95Ev
  virtual void  v96(); // _ZN6S123C63v96Ev
  virtual void  v97(); // _ZN6S123C63v97Ev
  virtual void  v98(); // _ZN6S123C63v98Ev
  virtual void  v99(); // _ZN6S123C63v99Ev
  virtual void  v100(); // _ZN6S123C64v100Ev
  virtual void  v101(); // _ZN6S123C64v101Ev
  virtual void  v102(); // _ZN6S123C64v102Ev
  virtual void  v103(); // _ZN6S123C64v103Ev
  virtual void  v104(); // _ZN6S123C64v104Ev
  virtual void  v105(); // _ZN6S123C64v105Ev
  virtual void  v106(); // _ZN6S123C64v106Ev
  virtual void  v107(); // _ZN6S123C64v107Ev
  virtual void  v108(); // _ZN6S123C64v108Ev
  virtual void  v109(); // _ZN6S123C64v109Ev
  virtual void  v110(); // _ZN6S123C64v110Ev
  virtual void  v111(); // _ZN6S123C64v111Ev
  virtual void  v112(); // _ZN6S123C64v112Ev
  virtual void  v113(); // _ZN6S123C64v113Ev
  virtual void  v114(); // _ZN6S123C64v114Ev
  virtual void  v115(); // _ZN6S123C64v115Ev
  virtual void  v116(); // _ZN6S123C64v116Ev
  virtual void  v117(); // _ZN6S123C64v117Ev
  virtual void  v118(); // _ZN6S123C64v118Ev
  virtual void  v119(); // _ZN6S123C64v119Ev
  virtual void  v120(); // _ZN6S123C64v120Ev
  virtual void  v121(); // _ZN6S123C64v121Ev
  virtual void  v122(); // _ZN6S123C64v122Ev
  virtual void  v123(); // _ZN6S123C64v123Ev
  ~S123C6(); // tgen
  S123C6(); // tgen
};
//SIG(-1 S123C6) C1{ BC2{ vd m Fp Fi} 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 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}


void  S123C6 ::v17(){vfunc_called(this, "_ZN6S123C63v17Ev");}
void  S123C6 ::v18(){vfunc_called(this, "_ZN6S123C63v18Ev");}
void  S123C6 ::v19(){vfunc_called(this, "_ZN6S123C63v19Ev");}
void  S123C6 ::v20(){vfunc_called(this, "_ZN6S123C63v20Ev");}
void  S123C6 ::v21(){vfunc_called(this, "_ZN6S123C63v21Ev");}
void  S123C6 ::v22(){vfunc_called(this, "_ZN6S123C63v22Ev");}
void  S123C6 ::v23(){vfunc_called(this, "_ZN6S123C63v23Ev");}
void  S123C6 ::v24(){vfunc_called(this, "_ZN6S123C63v24Ev");}
void  S123C6 ::v25(){vfunc_called(this, "_ZN6S123C63v25Ev");}
void  S123C6 ::v26(){vfunc_called(this, "_ZN6S123C63v26Ev");}
void  S123C6 ::v27(){vfunc_called(this, "_ZN6S123C63v27Ev");}
void  S123C6 ::v28(){vfunc_called(this, "_ZN6S123C63v28Ev");}
void  S123C6 ::v29(){vfunc_called(this, "_ZN6S123C63v29Ev");}
void  S123C6 ::v30(){vfunc_called(this, "_ZN6S123C63v30Ev");}
void  S123C6 ::v31(){vfunc_called(this, "_ZN6S123C63v31Ev");}
void  S123C6 ::v32(){vfunc_called(this, "_ZN6S123C63v32Ev");}
void  S123C6 ::v33(){vfunc_called(this, "_ZN6S123C63v33Ev");}
void  S123C6 ::v34(){vfunc_called(this, "_ZN6S123C63v34Ev");}
void  S123C6 ::v35(){vfunc_called(this, "_ZN6S123C63v35Ev");}
void  S123C6 ::v36(){vfunc_called(this, "_ZN6S123C63v36Ev");}
void  S123C6 ::v37(){vfunc_called(this, "_ZN6S123C63v37Ev");}
void  S123C6 ::v38(){vfunc_called(this, "_ZN6S123C63v38Ev");}
void  S123C6 ::v39(){vfunc_called(this, "_ZN6S123C63v39Ev");}
void  S123C6 ::v40(){vfunc_called(this, "_ZN6S123C63v40Ev");}
void  S123C6 ::v41(){vfunc_called(this, "_ZN6S123C63v41Ev");}
void  S123C6 ::v42(){vfunc_called(this, "_ZN6S123C63v42Ev");}
void  S123C6 ::v43(){vfunc_called(this, "_ZN6S123C63v43Ev");}
void  S123C6 ::v44(){vfunc_called(this, "_ZN6S123C63v44Ev");}
void  S123C6 ::v45(){vfunc_called(this, "_ZN6S123C63v45Ev");}
void  S123C6 ::v46(){vfunc_called(this, "_ZN6S123C63v46Ev");}
void  S123C6 ::v47(){vfunc_called(this, "_ZN6S123C63v47Ev");}
void  S123C6 ::v48(){vfunc_called(this, "_ZN6S123C63v48Ev");}
void  S123C6 ::v49(){vfunc_called(this, "_ZN6S123C63v49Ev");}
void  S123C6 ::v50(){vfunc_called(this, "_ZN6S123C63v50Ev");}
void  S123C6 ::v51(){vfunc_called(this, "_ZN6S123C63v51Ev");}
void  S123C6 ::v52(){vfunc_called(this, "_ZN6S123C63v52Ev");}
void  S123C6 ::v53(){vfunc_called(this, "_ZN6S123C63v53Ev");}
void  S123C6 ::v54(){vfunc_called(this, "_ZN6S123C63v54Ev");}
void  S123C6 ::v55(){vfunc_called(this, "_ZN6S123C63v55Ev");}
void  S123C6 ::v56(){vfunc_called(this, "_ZN6S123C63v56Ev");}
void  S123C6 ::v57(){vfunc_called(this, "_ZN6S123C63v57Ev");}
void  S123C6 ::v58(){vfunc_called(this, "_ZN6S123C63v58Ev");}
void  S123C6 ::v59(){vfunc_called(this, "_ZN6S123C63v59Ev");}
void  S123C6 ::v60(){vfunc_called(this, "_ZN6S123C63v60Ev");}
void  S123C6 ::v61(){vfunc_called(this, "_ZN6S123C63v61Ev");}
void  S123C6 ::v62(){vfunc_called(this, "_ZN6S123C63v62Ev");}
void  S123C6 ::v63(){vfunc_called(this, "_ZN6S123C63v63Ev");}
void  S123C6 ::v64(){vfunc_called(this, "_ZN6S123C63v64Ev");}
void  S123C6 ::v65(){vfunc_called(this, "_ZN6S123C63v65Ev");}
void  S123C6 ::v66(){vfunc_called(this, "_ZN6S123C63v66Ev");}
void  S123C6 ::v67(){vfunc_called(this, "_ZN6S123C63v67Ev");}
void  S123C6 ::v68(){vfunc_called(this, "_ZN6S123C63v68Ev");}
void  S123C6 ::v69(){vfunc_called(this, "_ZN6S123C63v69Ev");}
void  S123C6 ::v70(){vfunc_called(this, "_ZN6S123C63v70Ev");}
void  S123C6 ::v71(){vfunc_called(this, "_ZN6S123C63v71Ev");}
void  S123C6 ::v72(){vfunc_called(this, "_ZN6S123C63v72Ev");}
void  S123C6 ::v73(){vfunc_called(this, "_ZN6S123C63v73Ev");}
void  S123C6 ::v74(){vfunc_called(this, "_ZN6S123C63v74Ev");}
void  S123C6 ::v75(){vfunc_called(this, "_ZN6S123C63v75Ev");}
void  S123C6 ::v76(){vfunc_called(this, "_ZN6S123C63v76Ev");}
void  S123C6 ::v77(){vfunc_called(this, "_ZN6S123C63v77Ev");}
void  S123C6 ::v78(){vfunc_called(this, "_ZN6S123C63v78Ev");}
void  S123C6 ::v79(){vfunc_called(this, "_ZN6S123C63v79Ev");}
void  S123C6 ::v80(){vfunc_called(this, "_ZN6S123C63v80Ev");}
void  S123C6 ::v81(){vfunc_called(this, "_ZN6S123C63v81Ev");}
void  S123C6 ::v82(){vfunc_called(this, "_ZN6S123C63v82Ev");}
void  S123C6 ::v83(){vfunc_called(this, "_ZN6S123C63v83Ev");}
void  S123C6 ::v84(){vfunc_called(this, "_ZN6S123C63v84Ev");}
void  S123C6 ::v85(){vfunc_called(this, "_ZN6S123C63v85Ev");}
void  S123C6 ::v86(){vfunc_called(this, "_ZN6S123C63v86Ev");}
void  S123C6 ::v87(){vfunc_called(this, "_ZN6S123C63v87Ev");}
void  S123C6 ::v88(){vfunc_called(this, "_ZN6S123C63v88Ev");}
void  S123C6 ::v89(){vfunc_called(this, "_ZN6S123C63v89Ev");}
void  S123C6 ::v90(){vfunc_called(this, "_ZN6S123C63v90Ev");}
void  S123C6 ::v91(){vfunc_called(this, "_ZN6S123C63v91Ev");}
void  S123C6 ::v92(){vfunc_called(this, "_ZN6S123C63v92Ev");}
void  S123C6 ::v93(){vfunc_called(this, "_ZN6S123C63v93Ev");}
void  S123C6 ::v94(){vfunc_called(this, "_ZN6S123C63v94Ev");}
void  S123C6 ::v95(){vfunc_called(this, "_ZN6S123C63v95Ev");}
void  S123C6 ::v96(){vfunc_called(this, "_ZN6S123C63v96Ev");}
void  S123C6 ::v97(){vfunc_called(this, "_ZN6S123C63v97Ev");}
void  S123C6 ::v98(){vfunc_called(this, "_ZN6S123C63v98Ev");}
void  S123C6 ::v99(){vfunc_called(this, "_ZN6S123C63v99Ev");}
void  S123C6 ::v100(){vfunc_called(this, "_ZN6S123C64v100Ev");}
void  S123C6 ::v101(){vfunc_called(this, "_ZN6S123C64v101Ev");}
void  S123C6 ::v102(){vfunc_called(this, "_ZN6S123C64v102Ev");}
void  S123C6 ::v103(){vfunc_called(this, "_ZN6S123C64v103Ev");}
void  S123C6 ::v104(){vfunc_called(this, "_ZN6S123C64v104Ev");}
void  S123C6 ::v105(){vfunc_called(this, "_ZN6S123C64v105Ev");}
void  S123C6 ::v106(){vfunc_called(this, "_ZN6S123C64v106Ev");}
void  S123C6 ::v107(){vfunc_called(this, "_ZN6S123C64v107Ev");}
void  S123C6 ::v108(){vfunc_called(this, "_ZN6S123C64v108Ev");}
void  S123C6 ::v109(){vfunc_called(this, "_ZN6S123C64v109Ev");}
void  S123C6 ::v110(){vfunc_called(this, "_ZN6S123C64v110Ev");}
void  S123C6 ::v111(){vfunc_called(this, "_ZN6S123C64v111Ev");}
void  S123C6 ::v112(){vfunc_called(this, "_ZN6S123C64v112Ev");}
void  S123C6 ::v113(){vfunc_called(this, "_ZN6S123C64v113Ev");}
void  S123C6 ::v114(){vfunc_called(this, "_ZN6S123C64v114Ev");}
void  S123C6 ::v115(){vfunc_called(this, "_ZN6S123C64v115Ev");}
void  S123C6 ::v116(){vfunc_called(this, "_ZN6S123C64v116Ev");}
void  S123C6 ::v117(){vfunc_called(this, "_ZN6S123C64v117Ev");}
void  S123C6 ::v118(){vfunc_called(this, "_ZN6S123C64v118Ev");}
void  S123C6 ::v119(){vfunc_called(this, "_ZN6S123C64v119Ev");}
void  S123C6 ::v120(){vfunc_called(this, "_ZN6S123C64v120Ev");}
void  S123C6 ::v121(){vfunc_called(this, "_ZN6S123C64v121Ev");}
void  S123C6 ::v122(){vfunc_called(this, "_ZN6S123C64v122Ev");}
void  S123C6 ::v123(){vfunc_called(this, "_ZN6S123C64v123Ev");}
S123C6 ::~S123C6(){ note_dtor("S123C6", this);} // tgen
S123C6 ::S123C6(){ note_ctor("S123C6", this);} // tgen

static void Test_S123C6()
{
  extern Class_Descriptor cd_S123C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S123C6, buf);
    S123C6 *dp, &lv = *(dp=new (buf) S123C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S123C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S123C6)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S123C6");
    test_class_info(&lv, &cd_S123C6);
    dp->~S123C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS123C6(Test_S123C6, "S123C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S123C6C1Ev();
extern void _ZN6S123C6D1Ev();
Name_Map name_map_S123C6[] = {
  NSPAIR(_ZN6S123C6C1Ev),
  NSPAIR(_ZN6S123C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S123C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI6S123C6[];
extern void _ZN6S123C6D1Ev();
extern void _ZN6S123C6D0Ev();
extern void _ZN6S123C63v17Ev();
extern void _ZN6S123C63v18Ev();
extern void _ZN6S123C63v19Ev();
extern void _ZN6S123C63v20Ev();
extern void _ZN6S123C63v21Ev();
extern void _ZN6S123C63v22Ev();
extern void _ZN6S123C63v23Ev();
extern void _ZN6S123C63v24Ev();
extern void _ZN6S123C63v25Ev();
extern void _ZN6S123C63v26Ev();
extern void _ZN6S123C63v27Ev();
extern void _ZN6S123C63v28Ev();
extern void _ZN6S123C63v29Ev();
extern void _ZN6S123C63v30Ev();
extern void _ZN6S123C63v31Ev();
extern void _ZN6S123C63v32Ev();
extern void _ZN6S123C63v33Ev();
extern void _ZN6S123C63v34Ev();
extern void _ZN6S123C63v35Ev();
extern void _ZN6S123C63v36Ev();
extern void _ZN6S123C63v37Ev();
extern void _ZN6S123C63v38Ev();
extern void _ZN6S123C63v39Ev();
extern void _ZN6S123C63v40Ev();
extern void _ZN6S123C63v41Ev();
extern void _ZN6S123C63v42Ev();
extern void _ZN6S123C63v43Ev();
extern void _ZN6S123C63v44Ev();
extern void _ZN6S123C63v45Ev();
extern void _ZN6S123C63v46Ev();
extern void _ZN6S123C63v47Ev();
extern void _ZN6S123C63v48Ev();
extern void _ZN6S123C63v49Ev();
extern void _ZN6S123C63v50Ev();
extern void _ZN6S123C63v51Ev();
extern void _ZN6S123C63v52Ev();
extern void _ZN6S123C63v53Ev();
extern void _ZN6S123C63v54Ev();
extern void _ZN6S123C63v55Ev();
extern void _ZN6S123C63v56Ev();
extern void _ZN6S123C63v57Ev();
extern void _ZN6S123C63v58Ev();
extern void _ZN6S123C63v59Ev();
extern void _ZN6S123C63v60Ev();
extern void _ZN6S123C63v61Ev();
extern void _ZN6S123C63v62Ev();
extern void _ZN6S123C63v63Ev();
extern void _ZN6S123C63v64Ev();
extern void _ZN6S123C63v65Ev();
extern void _ZN6S123C63v66Ev();
extern void _ZN6S123C63v67Ev();
extern void _ZN6S123C63v68Ev();
extern void _ZN6S123C63v69Ev();
extern void _ZN6S123C63v70Ev();
extern void _ZN6S123C63v71Ev();
extern void _ZN6S123C63v72Ev();
extern void _ZN6S123C63v73Ev();
extern void _ZN6S123C63v74Ev();
extern void _ZN6S123C63v75Ev();
extern void _ZN6S123C63v76Ev();
extern void _ZN6S123C63v77Ev();
extern void _ZN6S123C63v78Ev();
extern void _ZN6S123C63v79Ev();
extern void _ZN6S123C63v80Ev();
extern void _ZN6S123C63v81Ev();
extern void _ZN6S123C63v82Ev();
extern void _ZN6S123C63v83Ev();
extern void _ZN6S123C63v84Ev();
extern void _ZN6S123C63v85Ev();
extern void _ZN6S123C63v86Ev();
extern void _ZN6S123C63v87Ev();
extern void _ZN6S123C63v88Ev();
extern void _ZN6S123C63v89Ev();
extern void _ZN6S123C63v90Ev();
extern void _ZN6S123C63v91Ev();
extern void _ZN6S123C63v92Ev();
extern void _ZN6S123C63v93Ev();
extern void _ZN6S123C63v94Ev();
extern void _ZN6S123C63v95Ev();
extern void _ZN6S123C63v96Ev();
extern void _ZN6S123C63v97Ev();
extern void _ZN6S123C63v98Ev();
extern void _ZN6S123C63v99Ev();
extern void _ZN6S123C64v100Ev();
extern void _ZN6S123C64v101Ev();
extern void _ZN6S123C64v102Ev();
extern void _ZN6S123C64v103Ev();
extern void _ZN6S123C64v104Ev();
extern void _ZN6S123C64v105Ev();
extern void _ZN6S123C64v106Ev();
extern void _ZN6S123C64v107Ev();
extern void _ZN6S123C64v108Ev();
extern void _ZN6S123C64v109Ev();
extern void _ZN6S123C64v110Ev();
extern void _ZN6S123C64v111Ev();
extern void _ZN6S123C64v112Ev();
extern void _ZN6S123C64v113Ev();
extern void _ZN6S123C64v114Ev();
extern void _ZN6S123C64v115Ev();
extern void _ZN6S123C64v116Ev();
extern void _ZN6S123C64v117Ev();
extern void _ZN6S123C64v118Ev();
extern void _ZN6S123C64v119Ev();
extern void _ZN6S123C64v120Ev();
extern void _ZN6S123C64v121Ev();
extern void _ZN6S123C64v122Ev();
extern void _ZN6S123C64v123Ev();
static  VTBL_ENTRY vtc_S123C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S123C6[0]),
  (VTBL_ENTRY)&_ZN6S123C6D1Ev,
  (VTBL_ENTRY)&_ZN6S123C6D0Ev,
  (VTBL_ENTRY)&_ZN6S123C63v17Ev,
  (VTBL_ENTRY)&_ZN6S123C63v18Ev,
  (VTBL_ENTRY)&_ZN6S123C63v19Ev,
  (VTBL_ENTRY)&_ZN6S123C63v20Ev,
  (VTBL_ENTRY)&_ZN6S123C63v21Ev,
  (VTBL_ENTRY)&_ZN6S123C63v22Ev,
  (VTBL_ENTRY)&_ZN6S123C63v23Ev,
  (VTBL_ENTRY)&_ZN6S123C63v24Ev,
  (VTBL_ENTRY)&_ZN6S123C63v25Ev,
  (VTBL_ENTRY)&_ZN6S123C63v26Ev,
  (VTBL_ENTRY)&_ZN6S123C63v27Ev,
  (VTBL_ENTRY)&_ZN6S123C63v28Ev,
  (VTBL_ENTRY)&_ZN6S123C63v29Ev,
  (VTBL_ENTRY)&_ZN6S123C63v30Ev,
  (VTBL_ENTRY)&_ZN6S123C63v31Ev,
  (VTBL_ENTRY)&_ZN6S123C63v32Ev,
  (VTBL_ENTRY)&_ZN6S123C63v33Ev,
  (VTBL_ENTRY)&_ZN6S123C63v34Ev,
  (VTBL_ENTRY)&_ZN6S123C63v35Ev,
  (VTBL_ENTRY)&_ZN6S123C63v36Ev,
  (VTBL_ENTRY)&_ZN6S123C63v37Ev,
  (VTBL_ENTRY)&_ZN6S123C63v38Ev,
  (VTBL_ENTRY)&_ZN6S123C63v39Ev,
  (VTBL_ENTRY)&_ZN6S123C63v40Ev,
  (VTBL_ENTRY)&_ZN6S123C63v41Ev,
  (VTBL_ENTRY)&_ZN6S123C63v42Ev,
  (VTBL_ENTRY)&_ZN6S123C63v43Ev,
  (VTBL_ENTRY)&_ZN6S123C63v44Ev,
  (VTBL_ENTRY)&_ZN6S123C63v45Ev,
  (VTBL_ENTRY)&_ZN6S123C63v46Ev,
  (VTBL_ENTRY)&_ZN6S123C63v47Ev,
  (VTBL_ENTRY)&_ZN6S123C63v48Ev,
  (VTBL_ENTRY)&_ZN6S123C63v49Ev,
  (VTBL_ENTRY)&_ZN6S123C63v50Ev,
  (VTBL_ENTRY)&_ZN6S123C63v51Ev,
  (VTBL_ENTRY)&_ZN6S123C63v52Ev,
  (VTBL_ENTRY)&_ZN6S123C63v53Ev,
  (VTBL_ENTRY)&_ZN6S123C63v54Ev,
  (VTBL_ENTRY)&_ZN6S123C63v55Ev,
  (VTBL_ENTRY)&_ZN6S123C63v56Ev,
  (VTBL_ENTRY)&_ZN6S123C63v57Ev,
  (VTBL_ENTRY)&_ZN6S123C63v58Ev,
  (VTBL_ENTRY)&_ZN6S123C63v59Ev,
  (VTBL_ENTRY)&_ZN6S123C63v60Ev,
  (VTBL_ENTRY)&_ZN6S123C63v61Ev,
  (VTBL_ENTRY)&_ZN6S123C63v62Ev,
  (VTBL_ENTRY)&_ZN6S123C63v63Ev,
  (VTBL_ENTRY)&_ZN6S123C63v64Ev,
  (VTBL_ENTRY)&_ZN6S123C63v65Ev,
  (VTBL_ENTRY)&_ZN6S123C63v66Ev,
  (VTBL_ENTRY)&_ZN6S123C63v67Ev,
  (VTBL_ENTRY)&_ZN6S123C63v68Ev,
  (VTBL_ENTRY)&_ZN6S123C63v69Ev,
  (VTBL_ENTRY)&_ZN6S123C63v70Ev,
  (VTBL_ENTRY)&_ZN6S123C63v71Ev,
  (VTBL_ENTRY)&_ZN6S123C63v72Ev,
  (VTBL_ENTRY)&_ZN6S123C63v73Ev,
  (VTBL_ENTRY)&_ZN6S123C63v74Ev,
  (VTBL_ENTRY)&_ZN6S123C63v75Ev,
  (VTBL_ENTRY)&_ZN6S123C63v76Ev,
  (VTBL_ENTRY)&_ZN6S123C63v77Ev,
  (VTBL_ENTRY)&_ZN6S123C63v78Ev,
  (VTBL_ENTRY)&_ZN6S123C63v79Ev,
  (VTBL_ENTRY)&_ZN6S123C63v80Ev,
  (VTBL_ENTRY)&_ZN6S123C63v81Ev,
  (VTBL_ENTRY)&_ZN6S123C63v82Ev,
  (VTBL_ENTRY)&_ZN6S123C63v83Ev,
  (VTBL_ENTRY)&_ZN6S123C63v84Ev,
  (VTBL_ENTRY)&_ZN6S123C63v85Ev,
  (VTBL_ENTRY)&_ZN6S123C63v86Ev,
  (VTBL_ENTRY)&_ZN6S123C63v87Ev,
  (VTBL_ENTRY)&_ZN6S123C63v88Ev,
  (VTBL_ENTRY)&_ZN6S123C63v89Ev,
  (VTBL_ENTRY)&_ZN6S123C63v90Ev,
  (VTBL_ENTRY)&_ZN6S123C63v91Ev,
  (VTBL_ENTRY)&_ZN6S123C63v92Ev,
  (VTBL_ENTRY)&_ZN6S123C63v93Ev,
  (VTBL_ENTRY)&_ZN6S123C63v94Ev,
  (VTBL_ENTRY)&_ZN6S123C63v95Ev,
  (VTBL_ENTRY)&_ZN6S123C63v96Ev,
  (VTBL_ENTRY)&_ZN6S123C63v97Ev,
  (VTBL_ENTRY)&_ZN6S123C63v98Ev,
  (VTBL_ENTRY)&_ZN6S123C63v99Ev,
  (VTBL_ENTRY)&_ZN6S123C64v100Ev,
  (VTBL_ENTRY)&_ZN6S123C64v101Ev,
  (VTBL_ENTRY)&_ZN6S123C64v102Ev,
  (VTBL_ENTRY)&_ZN6S123C64v103Ev,
  (VTBL_ENTRY)&_ZN6S123C64v104Ev,
  (VTBL_ENTRY)&_ZN6S123C64v105Ev,
  (VTBL_ENTRY)&_ZN6S123C64v106Ev,
  (VTBL_ENTRY)&_ZN6S123C64v107Ev,
  (VTBL_ENTRY)&_ZN6S123C64v108Ev,
  (VTBL_ENTRY)&_ZN6S123C64v109Ev,
  (VTBL_ENTRY)&_ZN6S123C64v110Ev,
  (VTBL_ENTRY)&_ZN6S123C64v111Ev,
  (VTBL_ENTRY)&_ZN6S123C64v112Ev,
  (VTBL_ENTRY)&_ZN6S123C64v113Ev,
  (VTBL_ENTRY)&_ZN6S123C64v114Ev,
  (VTBL_ENTRY)&_ZN6S123C64v115Ev,
  (VTBL_ENTRY)&_ZN6S123C64v116Ev,
  (VTBL_ENTRY)&_ZN6S123C64v117Ev,
  (VTBL_ENTRY)&_ZN6S123C64v118Ev,
  (VTBL_ENTRY)&_ZN6S123C64v119Ev,
  (VTBL_ENTRY)&_ZN6S123C64v120Ev,
  (VTBL_ENTRY)&_ZN6S123C64v121Ev,
  (VTBL_ENTRY)&_ZN6S123C64v122Ev,
  (VTBL_ENTRY)&_ZN6S123C64v123Ev,
};
extern VTBL_ENTRY _ZTI6S123C6[];
extern  VTBL_ENTRY _ZTV6S123C6[];
Class_Descriptor cd_S123C6 = {  "S123C6", // class name
  bases_S123C6, 1,
  &(vtc_S123C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S123C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S123C6),111, //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  S123C5  : S123C6 {
  ~S123C5(); // tgen
  S123C5(); // tgen
};
//SIG(-1 S123C5) C1{ BC2{ BC3{ vd m Fp Fi} 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 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}}


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

static void Test_S123C5()
{
  extern Class_Descriptor cd_S123C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S123C5, buf);
    S123C5 *dp, &lv = *(dp=new (buf) S123C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S123C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S123C5)");
    check_base_class_offset(lv, (S1C11_nt*)(S123C6*), 0, "S123C5");
    check_base_class_offset(lv, (S123C6*), 0, "S123C5");
    test_class_info(&lv, &cd_S123C5);
    dp->~S123C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS123C5(Test_S123C5, "S123C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S123C5C1Ev();
extern void _ZN6S123C5D1Ev();
Name_Map name_map_S123C5[] = {
  NSPAIR(_ZN6S123C5C1Ev),
  NSPAIR(_ZN6S123C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S123C6;
extern VTBL_ENTRY _ZTI6S123C6[];
extern  VTBL_ENTRY _ZTV6S123C6[];
static Base_Class bases_S123C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S123C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S123C5[];
extern void _ZN6S123C5D1Ev();
extern void _ZN6S123C5D0Ev();
extern void _ZN6S123C63v17Ev();
extern void _ZN6S123C63v18Ev();
extern void _ZN6S123C63v19Ev();
extern void _ZN6S123C63v20Ev();
extern void _ZN6S123C63v21Ev();
extern void _ZN6S123C63v22Ev();
extern void _ZN6S123C63v23Ev();
extern void _ZN6S123C63v24Ev();
extern void _ZN6S123C63v25Ev();
extern void _ZN6S123C63v26Ev();
extern void _ZN6S123C63v27Ev();
extern void _ZN6S123C63v28Ev();
extern void _ZN6S123C63v29Ev();
extern void _ZN6S123C63v30Ev();
extern void _ZN6S123C63v31Ev();
extern void _ZN6S123C63v32Ev();
extern void _ZN6S123C63v33Ev();
extern void _ZN6S123C63v34Ev();
extern void _ZN6S123C63v35Ev();
extern void _ZN6S123C63v36Ev();
extern void _ZN6S123C63v37Ev();
extern void _ZN6S123C63v38Ev();
extern void _ZN6S123C63v39Ev();
extern void _ZN6S123C63v40Ev();
extern void _ZN6S123C63v41Ev();
extern void _ZN6S123C63v42Ev();
extern void _ZN6S123C63v43Ev();
extern void _ZN6S123C63v44Ev();
extern void _ZN6S123C63v45Ev();
extern void _ZN6S123C63v46Ev();
extern void _ZN6S123C63v47Ev();
extern void _ZN6S123C63v48Ev();
extern void _ZN6S123C63v49Ev();
extern void _ZN6S123C63v50Ev();
extern void _ZN6S123C63v51Ev();
extern void _ZN6S123C63v52Ev();
extern void _ZN6S123C63v53Ev();
extern void _ZN6S123C63v54Ev();
extern void _ZN6S123C63v55Ev();
extern void _ZN6S123C63v56Ev();
extern void _ZN6S123C63v57Ev();
extern void _ZN6S123C63v58Ev();
extern void _ZN6S123C63v59Ev();
extern void _ZN6S123C63v60Ev();
extern void _ZN6S123C63v61Ev();
extern void _ZN6S123C63v62Ev();
extern void _ZN6S123C63v63Ev();
extern void _ZN6S123C63v64Ev();
extern void _ZN6S123C63v65Ev();
extern void _ZN6S123C63v66Ev();
extern void _ZN6S123C63v67Ev();
extern void _ZN6S123C63v68Ev();
extern void _ZN6S123C63v69Ev();
extern void _ZN6S123C63v70Ev();
extern void _ZN6S123C63v71Ev();
extern void _ZN6S123C63v72Ev();
extern void _ZN6S123C63v73Ev();
extern void _ZN6S123C63v74Ev();
extern void _ZN6S123C63v75Ev();
extern void _ZN6S123C63v76Ev();
extern void _ZN6S123C63v77Ev();
extern void _ZN6S123C63v78Ev();
extern void _ZN6S123C63v79Ev();
extern void _ZN6S123C63v80Ev();
extern void _ZN6S123C63v81Ev();
extern void _ZN6S123C63v82Ev();
extern void _ZN6S123C63v83Ev();
extern void _ZN6S123C63v84Ev();
extern void _ZN6S123C63v85Ev();
extern void _ZN6S123C63v86Ev();
extern void _ZN6S123C63v87Ev();
extern void _ZN6S123C63v88Ev();
extern void _ZN6S123C63v89Ev();
extern void _ZN6S123C63v90Ev();
extern void _ZN6S123C63v91Ev();
extern void _ZN6S123C63v92Ev();
extern void _ZN6S123C63v93Ev();
extern void _ZN6S123C63v94Ev();
extern void _ZN6S123C63v95Ev();
extern void _ZN6S123C63v96Ev();
extern void _ZN6S123C63v97Ev();
extern void _ZN6S123C63v98Ev();
extern void _ZN6S123C63v99Ev();
extern void _ZN6S123C64v100Ev();
extern void _ZN6S123C64v101Ev();
extern void _ZN6S123C64v102Ev();
extern void _ZN6S123C64v103Ev();
extern void _ZN6S123C64v104Ev();
extern void _ZN6S123C64v105Ev();
extern void _ZN6S123C64v106Ev();
extern void _ZN6S123C64v107Ev();
extern void _ZN6S123C64v108Ev();
extern void _ZN6S123C64v109Ev();
extern void _ZN6S123C64v110Ev();
extern void _ZN6S123C64v111Ev();
extern void _ZN6S123C64v112Ev();
extern void _ZN6S123C64v113Ev();
extern void _ZN6S123C64v114Ev();
extern void _ZN6S123C64v115Ev();
extern void _ZN6S123C64v116Ev();
extern void _ZN6S123C64v117Ev();
extern void _ZN6S123C64v118Ev();
extern void _ZN6S123C64v119Ev();
extern void _ZN6S123C64v120Ev();
extern void _ZN6S123C64v121Ev();
extern void _ZN6S123C64v122Ev();
extern void _ZN6S123C64v123Ev();
static  VTBL_ENTRY vtc_S123C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S123C5[0]),
  (VTBL_ENTRY)&_ZN6S123C5D1Ev,
  (VTBL_ENTRY)&_ZN6S123C5D0Ev,
  (VTBL_ENTRY)&_ZN6S123C63v17Ev,
  (VTBL_ENTRY)&_ZN6S123C63v18Ev,
  (VTBL_ENTRY)&_ZN6S123C63v19Ev,
  (VTBL_ENTRY)&_ZN6S123C63v20Ev,
  (VTBL_ENTRY)&_ZN6S123C63v21Ev,
  (VTBL_ENTRY)&_ZN6S123C63v22Ev,
  (VTBL_ENTRY)&_ZN6S123C63v23Ev,
  (VTBL_ENTRY)&_ZN6S123C63v24Ev,
  (VTBL_ENTRY)&_ZN6S123C63v25Ev,
  (VTBL_ENTRY)&_ZN6S123C63v26Ev,
  (VTBL_ENTRY)&_ZN6S123C63v27Ev,
  (VTBL_ENTRY)&_ZN6S123C63v28Ev,
  (VTBL_ENTRY)&_ZN6S123C63v29Ev,
  (VTBL_ENTRY)&_ZN6S123C63v30Ev,
  (VTBL_ENTRY)&_ZN6S123C63v31Ev,
  (VTBL_ENTRY)&_ZN6S123C63v32Ev,
  (VTBL_ENTRY)&_ZN6S123C63v33Ev,
  (VTBL_ENTRY)&_ZN6S123C63v34Ev,
  (VTBL_ENTRY)&_ZN6S123C63v35Ev,
  (VTBL_ENTRY)&_ZN6S123C63v36Ev,
  (VTBL_ENTRY)&_ZN6S123C63v37Ev,
  (VTBL_ENTRY)&_ZN6S123C63v38Ev,
  (VTBL_ENTRY)&_ZN6S123C63v39Ev,
  (VTBL_ENTRY)&_ZN6S123C63v40Ev,
  (VTBL_ENTRY)&_ZN6S123C63v41Ev,
  (VTBL_ENTRY)&_ZN6S123C63v42Ev,
  (VTBL_ENTRY)&_ZN6S123C63v43Ev,
  (VTBL_ENTRY)&_ZN6S123C63v44Ev,
  (VTBL_ENTRY)&_ZN6S123C63v45Ev,
  (VTBL_ENTRY)&_ZN6S123C63v46Ev,
  (VTBL_ENTRY)&_ZN6S123C63v47Ev,
  (VTBL_ENTRY)&_ZN6S123C63v48Ev,
  (VTBL_ENTRY)&_ZN6S123C63v49Ev,
  (VTBL_ENTRY)&_ZN6S123C63v50Ev,
  (VTBL_ENTRY)&_ZN6S123C63v51Ev,
  (VTBL_ENTRY)&_ZN6S123C63v52Ev,
  (VTBL_ENTRY)&_ZN6S123C63v53Ev,
  (VTBL_ENTRY)&_ZN6S123C63v54Ev,
  (VTBL_ENTRY)&_ZN6S123C63v55Ev,
  (VTBL_ENTRY)&_ZN6S123C63v56Ev,
  (VTBL_ENTRY)&_ZN6S123C63v57Ev,
  (VTBL_ENTRY)&_ZN6S123C63v58Ev,
  (VTBL_ENTRY)&_ZN6S123C63v59Ev,
  (VTBL_ENTRY)&_ZN6S123C63v60Ev,
  (VTBL_ENTRY)&_ZN6S123C63v61Ev,
  (VTBL_ENTRY)&_ZN6S123C63v62Ev,
  (VTBL_ENTRY)&_ZN6S123C63v63Ev,
  (VTBL_ENTRY)&_ZN6S123C63v64Ev,
  (VTBL_ENTRY)&_ZN6S123C63v65Ev,
  (VTBL_ENTRY)&_ZN6S123C63v66Ev,
  (VTBL_ENTRY)&_ZN6S123C63v67Ev,
  (VTBL_ENTRY)&_ZN6S123C63v68Ev,
  (VTBL_ENTRY)&_ZN6S123C63v69Ev,
  (VTBL_ENTRY)&_ZN6S123C63v70Ev,
  (VTBL_ENTRY)&_ZN6S123C63v71Ev,
  (VTBL_ENTRY)&_ZN6S123C63v72Ev,
  (VTBL_ENTRY)&_ZN6S123C63v73Ev,
  (VTBL_ENTRY)&_ZN6S123C63v74Ev,
  (VTBL_ENTRY)&_ZN6S123C63v75Ev,
  (VTBL_ENTRY)&_ZN6S123C63v76Ev,
  (VTBL_ENTRY)&_ZN6S123C63v77Ev,
  (VTBL_ENTRY)&_ZN6S123C63v78Ev,
  (VTBL_ENTRY)&_ZN6S123C63v79Ev,
  (VTBL_ENTRY)&_ZN6S123C63v80Ev,
  (VTBL_ENTRY)&_ZN6S123C63v81Ev,
  (VTBL_ENTRY)&_ZN6S123C63v82Ev,
  (VTBL_ENTRY)&_ZN6S123C63v83Ev,
  (VTBL_ENTRY)&_ZN6S123C63v84Ev,
  (VTBL_ENTRY)&_ZN6S123C63v85Ev,
  (VTBL_ENTRY)&_ZN6S123C63v86Ev,
  (VTBL_ENTRY)&_ZN6S123C63v87Ev,
  (VTBL_ENTRY)&_ZN6S123C63v88Ev,
  (VTBL_ENTRY)&_ZN6S123C63v89Ev,
  (VTBL_ENTRY)&_ZN6S123C63v90Ev,
  (VTBL_ENTRY)&_ZN6S123C63v91Ev,
  (VTBL_ENTRY)&_ZN6S123C63v92Ev,
  (VTBL_ENTRY)&_ZN6S123C63v93Ev,
  (VTBL_ENTRY)&_ZN6S123C63v94Ev,
  (VTBL_ENTRY)&_ZN6S123C63v95Ev,
  (VTBL_ENTRY)&_ZN6S123C63v96Ev,
  (VTBL_ENTRY)&_ZN6S123C63v97Ev,
  (VTBL_ENTRY)&_ZN6S123C63v98Ev,
  (VTBL_ENTRY)&_ZN6S123C63v99Ev,
  (VTBL_ENTRY)&_ZN6S123C64v100Ev,
  (VTBL_ENTRY)&_ZN6S123C64v101Ev,
  (VTBL_ENTRY)&_ZN6S123C64v102Ev,
  (VTBL_ENTRY)&_ZN6S123C64v103Ev,
  (VTBL_ENTRY)&_ZN6S123C64v104Ev,
  (VTBL_ENTRY)&_ZN6S123C64v105Ev,
  (VTBL_ENTRY)&_ZN6S123C64v106Ev,
  (VTBL_ENTRY)&_ZN6S123C64v107Ev,
  (VTBL_ENTRY)&_ZN6S123C64v108Ev,
  (VTBL_ENTRY)&_ZN6S123C64v109Ev,
  (VTBL_ENTRY)&_ZN6S123C64v110Ev,
  (VTBL_ENTRY)&_ZN6S123C64v111Ev,
  (VTBL_ENTRY)&_ZN6S123C64v112Ev,
  (VTBL_ENTRY)&_ZN6S123C64v113Ev,
  (VTBL_ENTRY)&_ZN6S123C64v114Ev,
  (VTBL_ENTRY)&_ZN6S123C64v115Ev,
  (VTBL_ENTRY)&_ZN6S123C64v116Ev,
  (VTBL_ENTRY)&_ZN6S123C64v117Ev,
  (VTBL_ENTRY)&_ZN6S123C64v118Ev,
  (VTBL_ENTRY)&_ZN6S123C64v119Ev,
  (VTBL_ENTRY)&_ZN6S123C64v120Ev,
  (VTBL_ENTRY)&_ZN6S123C64v121Ev,
  (VTBL_ENTRY)&_ZN6S123C64v122Ev,
  (VTBL_ENTRY)&_ZN6S123C64v123Ev,
};
extern VTBL_ENTRY _ZTI6S123C5[];
extern  VTBL_ENTRY _ZTV6S123C5[];
Class_Descriptor cd_S123C5 = {  "S123C5", // class name
  bases_S123C5, 2,
  &(vtc_S123C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S123C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S123C5),111, //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  S123C4  : S123C5 {
  virtual void  v124(); // _ZN6S123C44v124Ev
  virtual void  v125(); // _ZN6S123C44v125Ev
  virtual void  v126(); // _ZN6S123C44v126Ev
  virtual void  v127(); // _ZN6S123C44v127Ev
  virtual void  v128(); // _ZN6S123C44v128Ev
  virtual void  v129(); // _ZN6S123C44v129Ev
  virtual void  v130(); // _ZN6S123C44v130Ev
  virtual void  v131(); // _ZN6S123C44v131Ev
  virtual void  v132(); // _ZN6S123C44v132Ev
  virtual void  v133(); // _ZN6S123C44v133Ev
  virtual void  v134(); // _ZN6S123C44v134Ev
  virtual void  v135(); // _ZN6S123C44v135Ev
  virtual void  v136(); // _ZN6S123C44v136Ev
  virtual void  v137(); // _ZN6S123C44v137Ev
  virtual void  v138(); // _ZN6S123C44v138Ev
  virtual void  v139(); // _ZN6S123C44v139Ev
  virtual void  v140(); // _ZN6S123C44v140Ev
  virtual void  v141(); // _ZN6S123C44v141Ev
  virtual void  v142(); // _ZN6S123C44v142Ev
  virtual void  v143(); // _ZN6S123C44v143Ev
  virtual void  v144(); // _ZN6S123C44v144Ev
  virtual void  v145(); // _ZN6S123C44v145Ev
  virtual void  v146(); // _ZN6S123C44v146Ev
  virtual void  v147(); // _ZN6S123C44v147Ev
  virtual void  v148(); // _ZN6S123C44v148Ev
  virtual void  v149(); // _ZN6S123C44v149Ev
  ~S123C4(); // tgen
  S123C4(); // tgen
};
//SIG(-1 S123C4) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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 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}} 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}


void  S123C4 ::v124(){vfunc_called(this, "_ZN6S123C44v124Ev");}
void  S123C4 ::v125(){vfunc_called(this, "_ZN6S123C44v125Ev");}
void  S123C4 ::v126(){vfunc_called(this, "_ZN6S123C44v126Ev");}
void  S123C4 ::v127(){vfunc_called(this, "_ZN6S123C44v127Ev");}
void  S123C4 ::v128(){vfunc_called(this, "_ZN6S123C44v128Ev");}
void  S123C4 ::v129(){vfunc_called(this, "_ZN6S123C44v129Ev");}
void  S123C4 ::v130(){vfunc_called(this, "_ZN6S123C44v130Ev");}
void  S123C4 ::v131(){vfunc_called(this, "_ZN6S123C44v131Ev");}
void  S123C4 ::v132(){vfunc_called(this, "_ZN6S123C44v132Ev");}
void  S123C4 ::v133(){vfunc_called(this, "_ZN6S123C44v133Ev");}
void  S123C4 ::v134(){vfunc_called(this, "_ZN6S123C44v134Ev");}
void  S123C4 ::v135(){vfunc_called(this, "_ZN6S123C44v135Ev");}
void  S123C4 ::v136(){vfunc_called(this, "_ZN6S123C44v136Ev");}
void  S123C4 ::v137(){vfunc_called(this, "_ZN6S123C44v137Ev");}
void  S123C4 ::v138(){vfunc_called(this, "_ZN6S123C44v138Ev");}
void  S123C4 ::v139(){vfunc_called(this, "_ZN6S123C44v139Ev");}
void  S123C4 ::v140(){vfunc_called(this, "_ZN6S123C44v140Ev");}
void  S123C4 ::v141(){vfunc_called(this, "_ZN6S123C44v141Ev");}
void  S123C4 ::v142(){vfunc_called(this, "_ZN6S123C44v142Ev");}
void  S123C4 ::v143(){vfunc_called(this, "_ZN6S123C44v143Ev");}
void  S123C4 ::v144(){vfunc_called(this, "_ZN6S123C44v144Ev");}
void  S123C4 ::v145(){vfunc_called(this, "_ZN6S123C44v145Ev");}
void  S123C4 ::v146(){vfunc_called(this, "_ZN6S123C44v146Ev");}
void  S123C4 ::v147(){vfunc_called(this, "_ZN6S123C44v147Ev");}
void  S123C4 ::v148(){vfunc_called(this, "_ZN6S123C44v148Ev");}
void  S123C4 ::v149(){vfunc_called(this, "_ZN6S123C44v149Ev");}
S123C4 ::~S123C4(){ note_dtor("S123C4", this);} // tgen
S123C4 ::S123C4(){ note_ctor("S123C4", this);} // tgen

static void Test_S123C4()
{
  extern Class_Descriptor cd_S123C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S123C4, buf);
    S123C4 *dp, &lv = *(dp=new (buf) S123C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S123C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S123C4)");
    check_base_class_offset(lv, (S1C11_nt*)(S123C6*)(S123C5*), 0, "S123C4");
    check_base_class_offset(lv, (S123C6*)(S123C5*), 0, "S123C4");
    check_base_class_offset(lv, (S123C5*), 0, "S123C4");
    test_class_info(&lv, &cd_S123C4);
    dp->~S123C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS123C4(Test_S123C4, "S123C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S123C4C1Ev();
extern void _ZN6S123C4D1Ev();
Name_Map name_map_S123C4[] = {
  NSPAIR(_ZN6S123C4C1Ev),
  NSPAIR(_ZN6S123C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S123C6;
extern VTBL_ENTRY _ZTI6S123C6[];
extern  VTBL_ENTRY _ZTV6S123C6[];
extern Class_Descriptor cd_S123C5;
extern VTBL_ENTRY _ZTI6S123C5[];
extern  VTBL_ENTRY _ZTV6S123C5[];
static Base_Class bases_S123C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S123C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S123C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S123C4[];
extern void _ZN6S123C4D1Ev();
extern void _ZN6S123C4D0Ev();
extern void _ZN6S123C63v17Ev();
extern void _ZN6S123C63v18Ev();
extern void _ZN6S123C63v19Ev();
extern void _ZN6S123C63v20Ev();
extern void _ZN6S123C63v21Ev();
extern void _ZN6S123C63v22Ev();
extern void _ZN6S123C63v23Ev();
extern void _ZN6S123C63v24Ev();
extern void _ZN6S123C63v25Ev();
extern void _ZN6S123C63v26Ev();
extern void _ZN6S123C63v27Ev();
extern void _ZN6S123C63v28Ev();
extern void _ZN6S123C63v29Ev();
extern void _ZN6S123C63v30Ev();
extern void _ZN6S123C63v31Ev();
extern void _ZN6S123C63v32Ev();
extern void _ZN6S123C63v33Ev();
extern void _ZN6S123C63v34Ev();
extern void _ZN6S123C63v35Ev();
extern void _ZN6S123C63v36Ev();
extern void _ZN6S123C63v37Ev();
extern void _ZN6S123C63v38Ev();
extern void _ZN6S123C63v39Ev();
extern void _ZN6S123C63v40Ev();
extern void _ZN6S123C63v41Ev();
extern void _ZN6S123C63v42Ev();
extern void _ZN6S123C63v43Ev();
extern void _ZN6S123C63v44Ev();
extern void _ZN6S123C63v45Ev();
extern void _ZN6S123C63v46Ev();
extern void _ZN6S123C63v47Ev();
extern void _ZN6S123C63v48Ev();
extern void _ZN6S123C63v49Ev();
extern void _ZN6S123C63v50Ev();
extern void _ZN6S123C63v51Ev();
extern void _ZN6S123C63v52Ev();
extern void _ZN6S123C63v53Ev();
extern void _ZN6S123C63v54Ev();
extern void _ZN6S123C63v55Ev();
extern void _ZN6S123C63v56Ev();
extern void _ZN6S123C63v57Ev();
extern void _ZN6S123C63v58Ev();
extern void _ZN6S123C63v59Ev();
extern void _ZN6S123C63v60Ev();
extern void _ZN6S123C63v61Ev();
extern void _ZN6S123C63v62Ev();
extern void _ZN6S123C63v63Ev();
extern void _ZN6S123C63v64Ev();
extern void _ZN6S123C63v65Ev();
extern void _ZN6S123C63v66Ev();
extern void _ZN6S123C63v67Ev();
extern void _ZN6S123C63v68Ev();
extern void _ZN6S123C63v69Ev();
extern void _ZN6S123C63v70Ev();
extern void _ZN6S123C63v71Ev();
extern void _ZN6S123C63v72Ev();
extern void _ZN6S123C63v73Ev();
extern void _ZN6S123C63v74Ev();
extern void _ZN6S123C63v75Ev();
extern void _ZN6S123C63v76Ev();
extern void _ZN6S123C63v77Ev();
extern void _ZN6S123C63v78Ev();
extern void _ZN6S123C63v79Ev();
extern void _ZN6S123C63v80Ev();
extern void _ZN6S123C63v81Ev();
extern void _ZN6S123C63v82Ev();
extern void _ZN6S123C63v83Ev();
extern void _ZN6S123C63v84Ev();
extern void _ZN6S123C63v85Ev();
extern void _ZN6S123C63v86Ev();
extern void _ZN6S123C63v87Ev();
extern void _ZN6S123C63v88Ev();
extern void _ZN6S123C63v89Ev();
extern void _ZN6S123C63v90Ev();
extern void _ZN6S123C63v91Ev();
extern void _ZN6S123C63v92Ev();
extern void _ZN6S123C63v93Ev();
extern void _ZN6S123C63v94Ev();
extern void _ZN6S123C63v95Ev();
extern void _ZN6S123C63v96Ev();
extern void _ZN6S123C63v97Ev();
extern void _ZN6S123C63v98Ev();
extern void _ZN6S123C63v99Ev();
extern void _ZN6S123C64v100Ev();
extern void _ZN6S123C64v101Ev();
extern void _ZN6S123C64v102Ev();
extern void _ZN6S123C64v103Ev();
extern void _ZN6S123C64v104Ev();
extern void _ZN6S123C64v105Ev();
extern void _ZN6S123C64v106Ev();
extern void _ZN6S123C64v107Ev();
extern void _ZN6S123C64v108Ev();
extern void _ZN6S123C64v109Ev();
extern void _ZN6S123C64v110Ev();
extern void _ZN6S123C64v111Ev();
extern void _ZN6S123C64v112Ev();
extern void _ZN6S123C64v113Ev();
extern void _ZN6S123C64v114Ev();
extern void _ZN6S123C64v115Ev();
extern void _ZN6S123C64v116Ev();
extern void _ZN6S123C64v117Ev();
extern void _ZN6S123C64v118Ev();
extern void _ZN6S123C64v119Ev();
extern void _ZN6S123C64v120Ev();
extern void _ZN6S123C64v121Ev();
extern void _ZN6S123C64v122Ev();
extern void _ZN6S123C64v123Ev();
extern void _ZN6S123C44v124Ev();
extern void _ZN6S123C44v125Ev();
extern void _ZN6S123C44v126Ev();
extern void _ZN6S123C44v127Ev();
extern void _ZN6S123C44v128Ev();
extern void _ZN6S123C44v129Ev();
extern void _ZN6S123C44v130Ev();
extern void _ZN6S123C44v131Ev();
extern void _ZN6S123C44v132Ev();
extern void _ZN6S123C44v133Ev();
extern void _ZN6S123C44v134Ev();
extern void _ZN6S123C44v135Ev();
extern void _ZN6S123C44v136Ev();
extern void _ZN6S123C44v137Ev();
extern void _ZN6S123C44v138Ev();
extern void _ZN6S123C44v139Ev();
extern void _ZN6S123C44v140Ev();
extern void _ZN6S123C44v141Ev();
extern void _ZN6S123C44v142Ev();
extern void _ZN6S123C44v143Ev();
extern void _ZN6S123C44v144Ev();
extern void _ZN6S123C44v145Ev();
extern void _ZN6S123C44v146Ev();
extern void _ZN6S123C44v147Ev();
extern void _ZN6S123C44v148Ev();
extern void _ZN6S123C44v149Ev();
static  VTBL_ENTRY vtc_S123C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S123C4[0]),
  (VTBL_ENTRY)&_ZN6S123C4D1Ev,
  (VTBL_ENTRY)&_ZN6S123C4D0Ev,
  (VTBL_ENTRY)&_ZN6S123C63v17Ev,
  (VTBL_ENTRY)&_ZN6S123C63v18Ev,
  (VTBL_ENTRY)&_ZN6S123C63v19Ev,
  (VTBL_ENTRY)&_ZN6S123C63v20Ev,
  (VTBL_ENTRY)&_ZN6S123C63v21Ev,
  (VTBL_ENTRY)&_ZN6S123C63v22Ev,
  (VTBL_ENTRY)&_ZN6S123C63v23Ev,
  (VTBL_ENTRY)&_ZN6S123C63v24Ev,
  (VTBL_ENTRY)&_ZN6S123C63v25Ev,
  (VTBL_ENTRY)&_ZN6S123C63v26Ev,
  (VTBL_ENTRY)&_ZN6S123C63v27Ev,
  (VTBL_ENTRY)&_ZN6S123C63v28Ev,
  (VTBL_ENTRY)&_ZN6S123C63v29Ev,
  (VTBL_ENTRY)&_ZN6S123C63v30Ev,
  (VTBL_ENTRY)&_ZN6S123C63v31Ev,
  (VTBL_ENTRY)&_ZN6S123C63v32Ev,
  (VTBL_ENTRY)&_ZN6S123C63v33Ev,
  (VTBL_ENTRY)&_ZN6S123C63v34Ev,
  (VTBL_ENTRY)&_ZN6S123C63v35Ev,
  (VTBL_ENTRY)&_ZN6S123C63v36Ev,
  (VTBL_ENTRY)&_ZN6S123C63v37Ev,
  (VTBL_ENTRY)&_ZN6S123C63v38Ev,
  (VTBL_ENTRY)&_ZN6S123C63v39Ev,
  (VTBL_ENTRY)&_ZN6S123C63v40Ev,
  (VTBL_ENTRY)&_ZN6S123C63v41Ev,
  (VTBL_ENTRY)&_ZN6S123C63v42Ev,
  (VTBL_ENTRY)&_ZN6S123C63v43Ev,
  (VTBL_ENTRY)&_ZN6S123C63v44Ev,
  (VTBL_ENTRY)&_ZN6S123C63v45Ev,
  (VTBL_ENTRY)&_ZN6S123C63v46Ev,
  (VTBL_ENTRY)&_ZN6S123C63v47Ev,
  (VTBL_ENTRY)&_ZN6S123C63v48Ev,
  (VTBL_ENTRY)&_ZN6S123C63v49Ev,
  (VTBL_ENTRY)&_ZN6S123C63v50Ev,
  (VTBL_ENTRY)&_ZN6S123C63v51Ev,
  (VTBL_ENTRY)&_ZN6S123C63v52Ev,
  (VTBL_ENTRY)&_ZN6S123C63v53Ev,
  (VTBL_ENTRY)&_ZN6S123C63v54Ev,
  (VTBL_ENTRY)&_ZN6S123C63v55Ev,
  (VTBL_ENTRY)&_ZN6S123C63v56Ev,
  (VTBL_ENTRY)&_ZN6S123C63v57Ev,
  (VTBL_ENTRY)&_ZN6S123C63v58Ev,
  (VTBL_ENTRY)&_ZN6S123C63v59Ev,
  (VTBL_ENTRY)&_ZN6S123C63v60Ev,
  (VTBL_ENTRY)&_ZN6S123C63v61Ev,
  (VTBL_ENTRY)&_ZN6S123C63v62Ev,
  (VTBL_ENTRY)&_ZN6S123C63v63Ev,
  (VTBL_ENTRY)&_ZN6S123C63v64Ev,
  (VTBL_ENTRY)&_ZN6S123C63v65Ev,
  (VTBL_ENTRY)&_ZN6S123C63v66Ev,
  (VTBL_ENTRY)&_ZN6S123C63v67Ev,
  (VTBL_ENTRY)&_ZN6S123C63v68Ev,
  (VTBL_ENTRY)&_ZN6S123C63v69Ev,
  (VTBL_ENTRY)&_ZN6S123C63v70Ev,
  (VTBL_ENTRY)&_ZN6S123C63v71Ev,
  (VTBL_ENTRY)&_ZN6S123C63v72Ev,
  (VTBL_ENTRY)&_ZN6S123C63v73Ev,
  (VTBL_ENTRY)&_ZN6S123C63v74Ev,
  (VTBL_ENTRY)&_ZN6S123C63v75Ev,
  (VTBL_ENTRY)&_ZN6S123C63v76Ev,
  (VTBL_ENTRY)&_ZN6S123C63v77Ev,
  (VTBL_ENTRY)&_ZN6S123C63v78Ev,
  (VTBL_ENTRY)&_ZN6S123C63v79Ev,
  (VTBL_ENTRY)&_ZN6S123C63v80Ev,
  (VTBL_ENTRY)&_ZN6S123C63v81Ev,
  (VTBL_ENTRY)&_ZN6S123C63v82Ev,
  (VTBL_ENTRY)&_ZN6S123C63v83Ev,
  (VTBL_ENTRY)&_ZN6S123C63v84Ev,
  (VTBL_ENTRY)&_ZN6S123C63v85Ev,
  (VTBL_ENTRY)&_ZN6S123C63v86Ev,
  (VTBL_ENTRY)&_ZN6S123C63v87Ev,
  (VTBL_ENTRY)&_ZN6S123C63v88Ev,
  (VTBL_ENTRY)&_ZN6S123C63v89Ev,
  (VTBL_ENTRY)&_ZN6S123C63v90Ev,
  (VTBL_ENTRY)&_ZN6S123C63v91Ev,
  (VTBL_ENTRY)&_ZN6S123C63v92Ev,
  (VTBL_ENTRY)&_ZN6S123C63v93Ev,
  (VTBL_ENTRY)&_ZN6S123C63v94Ev,
  (VTBL_ENTRY)&_ZN6S123C63v95Ev,
  (VTBL_ENTRY)&_ZN6S123C63v96Ev,
  (VTBL_ENTRY)&_ZN6S123C63v97Ev,
  (VTBL_ENTRY)&_ZN6S123C63v98Ev,
  (VTBL_ENTRY)&_ZN6S123C63v99Ev,
  (VTBL_ENTRY)&_ZN6S123C64v100Ev,
  (VTBL_ENTRY)&_ZN6S123C64v101Ev,
  (VTBL_ENTRY)&_ZN6S123C64v102Ev,
  (VTBL_ENTRY)&_ZN6S123C64v103Ev,
  (VTBL_ENTRY)&_ZN6S123C64v104Ev,
  (VTBL_ENTRY)&_ZN6S123C64v105Ev,
  (VTBL_ENTRY)&_ZN6S123C64v106Ev,
  (VTBL_ENTRY)&_ZN6S123C64v107Ev,
  (VTBL_ENTRY)&_ZN6S123C64v108Ev,
  (VTBL_ENTRY)&_ZN6S123C64v109Ev,
  (VTBL_ENTRY)&_ZN6S123C64v110Ev,
  (VTBL_ENTRY)&_ZN6S123C64v111Ev,
  (VTBL_ENTRY)&_ZN6S123C64v112Ev,
  (VTBL_ENTRY)&_ZN6S123C64v113Ev,
  (VTBL_ENTRY)&_ZN6S123C64v114Ev,
  (VTBL_ENTRY)&_ZN6S123C64v115Ev,
  (VTBL_ENTRY)&_ZN6S123C64v116Ev,
  (VTBL_ENTRY)&_ZN6S123C64v117Ev,
  (VTBL_ENTRY)&_ZN6S123C64v118Ev,
  (VTBL_ENTRY)&_ZN6S123C64v119Ev,
  (VTBL_ENTRY)&_ZN6S123C64v120Ev,
  (VTBL_ENTRY)&_ZN6S123C64v121Ev,
  (VTBL_ENTRY)&_ZN6S123C64v122Ev,
  (VTBL_ENTRY)&_ZN6S123C64v123Ev,
  (VTBL_ENTRY)&_ZN6S123C44v124Ev,
  (VTBL_ENTRY)&_ZN6S123C44v125Ev,
  (VTBL_ENTRY)&_ZN6S123C44v126Ev,
  (VTBL_ENTRY)&_ZN6S123C44v127Ev,
  (VTBL_ENTRY)&_ZN6S123C44v128Ev,
  (VTBL_ENTRY)&_ZN6S123C44v129Ev,
  (VTBL_ENTRY)&_ZN6S123C44v130Ev,
  (VTBL_ENTRY)&_ZN6S123C44v131Ev,
  (VTBL_ENTRY)&_ZN6S123C44v132Ev,
  (VTBL_ENTRY)&_ZN6S123C44v133Ev,
  (VTBL_ENTRY)&_ZN6S123C44v134Ev,
  (VTBL_ENTRY)&_ZN6S123C44v135Ev,
  (VTBL_ENTRY)&_ZN6S123C44v136Ev,
  (VTBL_ENTRY)&_ZN6S123C44v137Ev,
  (VTBL_ENTRY)&_ZN6S123C44v138Ev,
  (VTBL_ENTRY)&_ZN6S123C44v139Ev,
  (VTBL_ENTRY)&_ZN6S123C44v140Ev,
  (VTBL_ENTRY)&_ZN6S123C44v141Ev,
  (VTBL_ENTRY)&_ZN6S123C44v142Ev,
  (VTBL_ENTRY)&_ZN6S123C44v143Ev,
  (VTBL_ENTRY)&_ZN6S123C44v144Ev,
  (VTBL_ENTRY)&_ZN6S123C44v145Ev,
  (VTBL_ENTRY)&_ZN6S123C44v146Ev,
  (VTBL_ENTRY)&_ZN6S123C44v147Ev,
  (VTBL_ENTRY)&_ZN6S123C44v148Ev,
  (VTBL_ENTRY)&_ZN6S123C44v149Ev,
};
extern VTBL_ENTRY _ZTI6S123C4[];
extern  VTBL_ENTRY _ZTV6S123C4[];
Class_Descriptor cd_S123C4 = {  "S123C4", // class name
  bases_S123C4, 3,
  &(vtc_S123C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S123C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S123C4),137, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S123C3  : S123C4 {
  virtual void  v150(); // _ZN6S123C34v150Ev
  virtual void  v151(); // _ZN6S123C34v151Ev
  virtual void  v152(); // _ZN6S123C34v152Ev
  virtual void  v153(); // _ZN6S123C34v153Ev
  virtual void  v154(); // _ZN6S123C34v154Ev
  virtual void  v155(); // _ZN6S123C34v155Ev
  virtual void  v156(); // _ZN6S123C34v156Ev
  virtual void  v157(); // _ZN6S123C34v157Ev
  virtual void  v158(); // _ZN6S123C34v158Ev
  virtual void  v159(); // _ZN6S123C34v159Ev
  virtual void  v160(); // _ZN6S123C34v160Ev
  virtual void  v161(); // _ZN6S123C34v161Ev
  virtual void  v162(); // _ZN6S123C34v162Ev
  virtual void  v163(); // _ZN6S123C34v163Ev
  virtual void  v164(); // _ZN6S123C34v164Ev
  virtual void  v165(); // _ZN6S123C34v165Ev
  virtual void  v166(); // _ZN6S123C34v166Ev
  virtual void  v167(); // _ZN6S123C34v167Ev
  ~S123C3(); // tgen
  S123C3(); // tgen
};
//SIG(-1 S123C3) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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 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 v149 v150 v151} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S123C3 ::v150(){vfunc_called(this, "_ZN6S123C34v150Ev");}
void  S123C3 ::v151(){vfunc_called(this, "_ZN6S123C34v151Ev");}
void  S123C3 ::v152(){vfunc_called(this, "_ZN6S123C34v152Ev");}
void  S123C3 ::v153(){vfunc_called(this, "_ZN6S123C34v153Ev");}
void  S123C3 ::v154(){vfunc_called(this, "_ZN6S123C34v154Ev");}
void  S123C3 ::v155(){vfunc_called(this, "_ZN6S123C34v155Ev");}
void  S123C3 ::v156(){vfunc_called(this, "_ZN6S123C34v156Ev");}
void  S123C3 ::v157(){vfunc_called(this, "_ZN6S123C34v157Ev");}
void  S123C3 ::v158(){vfunc_called(this, "_ZN6S123C34v158Ev");}
void  S123C3 ::v159(){vfunc_called(this, "_ZN6S123C34v159Ev");}
void  S123C3 ::v160(){vfunc_called(this, "_ZN6S123C34v160Ev");}
void  S123C3 ::v161(){vfunc_called(this, "_ZN6S123C34v161Ev");}
void  S123C3 ::v162(){vfunc_called(this, "_ZN6S123C34v162Ev");}
void  S123C3 ::v163(){vfunc_called(this, "_ZN6S123C34v163Ev");}
void  S123C3 ::v164(){vfunc_called(this, "_ZN6S123C34v164Ev");}
void  S123C3 ::v165(){vfunc_called(this, "_ZN6S123C34v165Ev");}
void  S123C3 ::v166(){vfunc_called(this, "_ZN6S123C34v166Ev");}
void  S123C3 ::v167(){vfunc_called(this, "_ZN6S123C34v167Ev");}
S123C3 ::~S123C3(){ note_dtor("S123C3", this);} // tgen
S123C3 ::S123C3(){ note_ctor("S123C3", this);} // tgen

static void Test_S123C3()
{
  extern Class_Descriptor cd_S123C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S123C3, buf);
    S123C3 *dp, &lv = *(dp=new (buf) S123C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S123C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S123C3)");
    check_base_class_offset(lv, (S1C11_nt*)(S123C6*)(S123C5*)(S123C4*), 0, "S123C3");
    check_base_class_offset(lv, (S123C6*)(S123C5*)(S123C4*), 0, "S123C3");
    check_base_class_offset(lv, (S123C5*)(S123C4*), 0, "S123C3");
    check_base_class_offset(lv, (S123C4*), 0, "S123C3");
    test_class_info(&lv, &cd_S123C3);
    dp->~S123C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS123C3(Test_S123C3, "S123C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S123C3C1Ev();
extern void _ZN6S123C3D1Ev();
Name_Map name_map_S123C3[] = {
  NSPAIR(_ZN6S123C3C1Ev),
  NSPAIR(_ZN6S123C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S123C6;
extern VTBL_ENTRY _ZTI6S123C6[];
extern  VTBL_ENTRY _ZTV6S123C6[];
extern Class_Descriptor cd_S123C5;
extern VTBL_ENTRY _ZTI6S123C5[];
extern  VTBL_ENTRY _ZTV6S123C5[];
extern Class_Descriptor cd_S123C4;
extern VTBL_ENTRY _ZTI6S123C4[];
extern  VTBL_ENTRY _ZTV6S123C4[];
static Base_Class bases_S123C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S123C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S123C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S123C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S123C3[];
extern void _ZN6S123C3D1Ev();
extern void _ZN6S123C3D0Ev();
extern void _ZN6S123C63v17Ev();
extern void _ZN6S123C63v18Ev();
extern void _ZN6S123C63v19Ev();
extern void _ZN6S123C63v20Ev();
extern void _ZN6S123C63v21Ev();
extern void _ZN6S123C63v22Ev();
extern void _ZN6S123C63v23Ev();
extern void _ZN6S123C63v24Ev();
extern void _ZN6S123C63v25Ev();
extern void _ZN6S123C63v26Ev();
extern void _ZN6S123C63v27Ev();
extern void _ZN6S123C63v28Ev();
extern void _ZN6S123C63v29Ev();
extern void _ZN6S123C63v30Ev();
extern void _ZN6S123C63v31Ev();
extern void _ZN6S123C63v32Ev();
extern void _ZN6S123C63v33Ev();
extern void _ZN6S123C63v34Ev();
extern void _ZN6S123C63v35Ev();
extern void _ZN6S123C63v36Ev();
extern void _ZN6S123C63v37Ev();
extern void _ZN6S123C63v38Ev();
extern void _ZN6S123C63v39Ev();
extern void _ZN6S123C63v40Ev();
extern void _ZN6S123C63v41Ev();
extern void _ZN6S123C63v42Ev();
extern void _ZN6S123C63v43Ev();
extern void _ZN6S123C63v44Ev();
extern void _ZN6S123C63v45Ev();
extern void _ZN6S123C63v46Ev();
extern void _ZN6S123C63v47Ev();
extern void _ZN6S123C63v48Ev();
extern void _ZN6S123C63v49Ev();
extern void _ZN6S123C63v50Ev();
extern void _ZN6S123C63v51Ev();
extern void _ZN6S123C63v52Ev();
extern void _ZN6S123C63v53Ev();
extern void _ZN6S123C63v54Ev();
extern void _ZN6S123C63v55Ev();
extern void _ZN6S123C63v56Ev();
extern void _ZN6S123C63v57Ev();
extern void _ZN6S123C63v58Ev();
extern void _ZN6S123C63v59Ev();
extern void _ZN6S123C63v60Ev();
extern void _ZN6S123C63v61Ev();
extern void _ZN6S123C63v62Ev();
extern void _ZN6S123C63v63Ev();
extern void _ZN6S123C63v64Ev();
extern void _ZN6S123C63v65Ev();
extern void _ZN6S123C63v66Ev();
extern void _ZN6S123C63v67Ev();
extern void _ZN6S123C63v68Ev();
extern void _ZN6S123C63v69Ev();
extern void _ZN6S123C63v70Ev();
extern void _ZN6S123C63v71Ev();
extern void _ZN6S123C63v72Ev();
extern void _ZN6S123C63v73Ev();
extern void _ZN6S123C63v74Ev();
extern void _ZN6S123C63v75Ev();
extern void _ZN6S123C63v76Ev();
extern void _ZN6S123C63v77Ev();
extern void _ZN6S123C63v78Ev();
extern void _ZN6S123C63v79Ev();
extern void _ZN6S123C63v80Ev();
extern void _ZN6S123C63v81Ev();
extern void _ZN6S123C63v82Ev();
extern void _ZN6S123C63v83Ev();
extern void _ZN6S123C63v84Ev();
extern void _ZN6S123C63v85Ev();
extern void _ZN6S123C63v86Ev();
extern void _ZN6S123C63v87Ev();
extern void _ZN6S123C63v88Ev();
extern void _ZN6S123C63v89Ev();
extern void _ZN6S123C63v90Ev();
extern void _ZN6S123C63v91Ev();
extern void _ZN6S123C63v92Ev();
extern void _ZN6S123C63v93Ev();
extern void _ZN6S123C63v94Ev();
extern void _ZN6S123C63v95Ev();
extern void _ZN6S123C63v96Ev();
extern void _ZN6S123C63v97Ev();
extern void _ZN6S123C63v98Ev();
extern void _ZN6S123C63v99Ev();
extern void _ZN6S123C64v100Ev();
extern void _ZN6S123C64v101Ev();
extern void _ZN6S123C64v102Ev();
extern void _ZN6S123C64v103Ev();
extern void _ZN6S123C64v104Ev();
extern void _ZN6S123C64v105Ev();
extern void _ZN6S123C64v106Ev();
extern void _ZN6S123C64v107Ev();
extern void _ZN6S123C64v108Ev();
extern void _ZN6S123C64v109Ev();
extern void _ZN6S123C64v110Ev();
extern void _ZN6S123C64v111Ev();
extern void _ZN6S123C64v112Ev();
extern void _ZN6S123C64v113Ev();
extern void _ZN6S123C64v114Ev();
extern void _ZN6S123C64v115Ev();
extern void _ZN6S123C64v116Ev();
extern void _ZN6S123C64v117Ev();
extern void _ZN6S123C64v118Ev();
extern void _ZN6S123C64v119Ev();
extern void _ZN6S123C64v120Ev();
extern void _ZN6S123C64v121Ev();
extern void _ZN6S123C64v122Ev();
extern void _ZN6S123C64v123Ev();
extern void _ZN6S123C44v124Ev();
extern void _ZN6S123C44v125Ev();
extern void _ZN6S123C44v126Ev();
extern void _ZN6S123C44v127Ev();
extern void _ZN6S123C44v128Ev();
extern void _ZN6S123C44v129Ev();
extern void _ZN6S123C44v130Ev();
extern void _ZN6S123C44v131Ev();
extern void _ZN6S123C44v132Ev();
extern void _ZN6S123C44v133Ev();
extern void _ZN6S123C44v134Ev();
extern void _ZN6S123C44v135Ev();
extern void _ZN6S123C44v136Ev();
extern void _ZN6S123C44v137Ev();
extern void _ZN6S123C44v138Ev();
extern void _ZN6S123C44v139Ev();
extern void _ZN6S123C44v140Ev();
extern void _ZN6S123C44v141Ev();
extern void _ZN6S123C44v142Ev();
extern void _ZN6S123C44v143Ev();
extern void _ZN6S123C44v144Ev();
extern void _ZN6S123C44v145Ev();
extern void _ZN6S123C44v146Ev();
extern void _ZN6S123C44v147Ev();
extern void _ZN6S123C44v148Ev();
extern void _ZN6S123C44v149Ev();
extern void _ZN6S123C34v150Ev();
extern void _ZN6S123C34v151Ev();
extern void _ZN6S123C34v152Ev();
extern void _ZN6S123C34v153Ev();
extern void _ZN6S123C34v154Ev();
extern void _ZN6S123C34v155Ev();
extern void _ZN6S123C34v156Ev();
extern void _ZN6S123C34v157Ev();
extern void _ZN6S123C34v158Ev();
extern void _ZN6S123C34v159Ev();
extern void _ZN6S123C34v160Ev();
extern void _ZN6S123C34v161Ev();
extern void _ZN6S123C34v162Ev();
extern void _ZN6S123C34v163Ev();
extern void _ZN6S123C34v164Ev();
extern void _ZN6S123C34v165Ev();
extern void _ZN6S123C34v166Ev();
extern void _ZN6S123C34v167Ev();
static  VTBL_ENTRY vtc_S123C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S123C3[0]),
  (VTBL_ENTRY)&_ZN6S123C3D1Ev,
  (VTBL_ENTRY)&_ZN6S123C3D0Ev,
  (VTBL_ENTRY)&_ZN6S123C63v17Ev,
  (VTBL_ENTRY)&_ZN6S123C63v18Ev,
  (VTBL_ENTRY)&_ZN6S123C63v19Ev,
  (VTBL_ENTRY)&_ZN6S123C63v20Ev,
  (VTBL_ENTRY)&_ZN6S123C63v21Ev,
  (VTBL_ENTRY)&_ZN6S123C63v22Ev,
  (VTBL_ENTRY)&_ZN6S123C63v23Ev,
  (VTBL_ENTRY)&_ZN6S123C63v24Ev,
  (VTBL_ENTRY)&_ZN6S123C63v25Ev,
  (VTBL_ENTRY)&_ZN6S123C63v26Ev,
  (VTBL_ENTRY)&_ZN6S123C63v27Ev,
  (VTBL_ENTRY)&_ZN6S123C63v28Ev,
  (VTBL_ENTRY)&_ZN6S123C63v29Ev,
  (VTBL_ENTRY)&_ZN6S123C63v30Ev,
  (VTBL_ENTRY)&_ZN6S123C63v31Ev,
  (VTBL_ENTRY)&_ZN6S123C63v32Ev,
  (VTBL_ENTRY)&_ZN6S123C63v33Ev,
  (VTBL_ENTRY)&_ZN6S123C63v34Ev,
  (VTBL_ENTRY)&_ZN6S123C63v35Ev,
  (VTBL_ENTRY)&_ZN6S123C63v36Ev,
  (VTBL_ENTRY)&_ZN6S123C63v37Ev,
  (VTBL_ENTRY)&_ZN6S123C63v38Ev,
  (VTBL_ENTRY)&_ZN6S123C63v39Ev,
  (VTBL_ENTRY)&_ZN6S123C63v40Ev,
  (VTBL_ENTRY)&_ZN6S123C63v41Ev,
  (VTBL_ENTRY)&_ZN6S123C63v42Ev,
  (VTBL_ENTRY)&_ZN6S123C63v43Ev,
  (VTBL_ENTRY)&_ZN6S123C63v44Ev,
  (VTBL_ENTRY)&_ZN6S123C63v45Ev,
  (VTBL_ENTRY)&_ZN6S123C63v46Ev,
  (VTBL_ENTRY)&_ZN6S123C63v47Ev,
  (VTBL_ENTRY)&_ZN6S123C63v48Ev,
  (VTBL_ENTRY)&_ZN6S123C63v49Ev,
  (VTBL_ENTRY)&_ZN6S123C63v50Ev,
  (VTBL_ENTRY)&_ZN6S123C63v51Ev,
  (VTBL_ENTRY)&_ZN6S123C63v52Ev,
  (VTBL_ENTRY)&_ZN6S123C63v53Ev,
  (VTBL_ENTRY)&_ZN6S123C63v54Ev,
  (VTBL_ENTRY)&_ZN6S123C63v55Ev,
  (VTBL_ENTRY)&_ZN6S123C63v56Ev,
  (VTBL_ENTRY)&_ZN6S123C63v57Ev,
  (VTBL_ENTRY)&_ZN6S123C63v58Ev,
  (VTBL_ENTRY)&_ZN6S123C63v59Ev,
  (VTBL_ENTRY)&_ZN6S123C63v60Ev,
  (VTBL_ENTRY)&_ZN6S123C63v61Ev,
  (VTBL_ENTRY)&_ZN6S123C63v62Ev,
  (VTBL_ENTRY)&_ZN6S123C63v63Ev,
  (VTBL_ENTRY)&_ZN6S123C63v64Ev,
  (VTBL_ENTRY)&_ZN6S123C63v65Ev,
  (VTBL_ENTRY)&_ZN6S123C63v66Ev,
  (VTBL_ENTRY)&_ZN6S123C63v67Ev,
  (VTBL_ENTRY)&_ZN6S123C63v68Ev,
  (VTBL_ENTRY)&_ZN6S123C63v69Ev,
  (VTBL_ENTRY)&_ZN6S123C63v70Ev,
  (VTBL_ENTRY)&_ZN6S123C63v71Ev,
  (VTBL_ENTRY)&_ZN6S123C63v72Ev,
  (VTBL_ENTRY)&_ZN6S123C63v73Ev,
  (VTBL_ENTRY)&_ZN6S123C63v74Ev,
  (VTBL_ENTRY)&_ZN6S123C63v75Ev,
  (VTBL_ENTRY)&_ZN6S123C63v76Ev,
  (VTBL_ENTRY)&_ZN6S123C63v77Ev,
  (VTBL_ENTRY)&_ZN6S123C63v78Ev,
  (VTBL_ENTRY)&_ZN6S123C63v79Ev,
  (VTBL_ENTRY)&_ZN6S123C63v80Ev,
  (VTBL_ENTRY)&_ZN6S123C63v81Ev,
  (VTBL_ENTRY)&_ZN6S123C63v82Ev,
  (VTBL_ENTRY)&_ZN6S123C63v83Ev,
  (VTBL_ENTRY)&_ZN6S123C63v84Ev,
  (VTBL_ENTRY)&_ZN6S123C63v85Ev,
  (VTBL_ENTRY)&_ZN6S123C63v86Ev,
  (VTBL_ENTRY)&_ZN6S123C63v87Ev,
  (VTBL_ENTRY)&_ZN6S123C63v88Ev,
  (VTBL_ENTRY)&_ZN6S123C63v89Ev,
  (VTBL_ENTRY)&_ZN6S123C63v90Ev,
  (VTBL_ENTRY)&_ZN6S123C63v91Ev,
  (VTBL_ENTRY)&_ZN6S123C63v92Ev,
  (VTBL_ENTRY)&_ZN6S123C63v93Ev,
  (VTBL_ENTRY)&_ZN6S123C63v94Ev,
  (VTBL_ENTRY)&_ZN6S123C63v95Ev,
  (VTBL_ENTRY)&_ZN6S123C63v96Ev,
  (VTBL_ENTRY)&_ZN6S123C63v97Ev,
  (VTBL_ENTRY)&_ZN6S123C63v98Ev,
  (VTBL_ENTRY)&_ZN6S123C63v99Ev,
  (VTBL_ENTRY)&_ZN6S123C64v100Ev,
  (VTBL_ENTRY)&_ZN6S123C64v101Ev,
  (VTBL_ENTRY)&_ZN6S123C64v102Ev,
  (VTBL_ENTRY)&_ZN6S123C64v103Ev,
  (VTBL_ENTRY)&_ZN6S123C64v104Ev,
  (VTBL_ENTRY)&_ZN6S123C64v105Ev,
  (VTBL_ENTRY)&_ZN6S123C64v106Ev,
  (VTBL_ENTRY)&_ZN6S123C64v107Ev,
  (VTBL_ENTRY)&_ZN6S123C64v108Ev,
  (VTBL_ENTRY)&_ZN6S123C64v109Ev,
  (VTBL_ENTRY)&_ZN6S123C64v110Ev,
  (VTBL_ENTRY)&_ZN6S123C64v111Ev,
  (VTBL_ENTRY)&_ZN6S123C64v112Ev,
  (VTBL_ENTRY)&_ZN6S123C64v113Ev,
  (VTBL_ENTRY)&_ZN6S123C64v114Ev,
  (VTBL_ENTRY)&_ZN6S123C64v115Ev,
  (VTBL_ENTRY)&_ZN6S123C64v116Ev,
  (VTBL_ENTRY)&_ZN6S123C64v117Ev,
  (VTBL_ENTRY)&_ZN6S123C64v118Ev,
  (VTBL_ENTRY)&_ZN6S123C64v119Ev,
  (VTBL_ENTRY)&_ZN6S123C64v120Ev,
  (VTBL_ENTRY)&_ZN6S123C64v121Ev,
  (VTBL_ENTRY)&_ZN6S123C64v122Ev,
  (VTBL_ENTRY)&_ZN6S123C64v123Ev,
  (VTBL_ENTRY)&_ZN6S123C44v124Ev,
  (VTBL_ENTRY)&_ZN6S123C44v125Ev,
  (VTBL_ENTRY)&_ZN6S123C44v126Ev,
  (VTBL_ENTRY)&_ZN6S123C44v127Ev,
  (VTBL_ENTRY)&_ZN6S123C44v128Ev,
  (VTBL_ENTRY)&_ZN6S123C44v129Ev,
  (VTBL_ENTRY)&_ZN6S123C44v130Ev,
  (VTBL_ENTRY)&_ZN6S123C44v131Ev,
  (VTBL_ENTRY)&_ZN6S123C44v132Ev,
  (VTBL_ENTRY)&_ZN6S123C44v133Ev,
  (VTBL_ENTRY)&_ZN6S123C44v134Ev,
  (VTBL_ENTRY)&_ZN6S123C44v135Ev,
  (VTBL_ENTRY)&_ZN6S123C44v136Ev,
  (VTBL_ENTRY)&_ZN6S123C44v137Ev,
  (VTBL_ENTRY)&_ZN6S123C44v138Ev,
  (VTBL_ENTRY)&_ZN6S123C44v139Ev,
  (VTBL_ENTRY)&_ZN6S123C44v140Ev,
  (VTBL_ENTRY)&_ZN6S123C44v141Ev,
  (VTBL_ENTRY)&_ZN6S123C44v142Ev,
  (VTBL_ENTRY)&_ZN6S123C44v143Ev,
  (VTBL_ENTRY)&_ZN6S123C44v144Ev,
  (VTBL_ENTRY)&_ZN6S123C44v145Ev,
  (VTBL_ENTRY)&_ZN6S123C44v146Ev,
  (VTBL_ENTRY)&_ZN6S123C44v147Ev,
  (VTBL_ENTRY)&_ZN6S123C44v148Ev,
  (VTBL_ENTRY)&_ZN6S123C44v149Ev,
  (VTBL_ENTRY)&_ZN6S123C34v150Ev,
  (VTBL_ENTRY)&_ZN6S123C34v151Ev,
  (VTBL_ENTRY)&_ZN6S123C34v152Ev,
  (VTBL_ENTRY)&_ZN6S123C34v153Ev,
  (VTBL_ENTRY)&_ZN6S123C34v154Ev,
  (VTBL_ENTRY)&_ZN6S123C34v155Ev,
  (VTBL_ENTRY)&_ZN6S123C34v156Ev,
  (VTBL_ENTRY)&_ZN6S123C34v157Ev,
  (VTBL_ENTRY)&_ZN6S123C34v158Ev,
  (VTBL_ENTRY)&_ZN6S123C34v159Ev,
  (VTBL_ENTRY)&_ZN6S123C34v160Ev,
  (VTBL_ENTRY)&_ZN6S123C34v161Ev,
  (VTBL_ENTRY)&_ZN6S123C34v162Ev,
  (VTBL_ENTRY)&_ZN6S123C34v163Ev,
  (VTBL_ENTRY)&_ZN6S123C34v164Ev,
  (VTBL_ENTRY)&_ZN6S123C34v165Ev,
  (VTBL_ENTRY)&_ZN6S123C34v166Ev,
  (VTBL_ENTRY)&_ZN6S123C34v167Ev,
};
extern VTBL_ENTRY _ZTI6S123C3[];
extern  VTBL_ENTRY _ZTV6S123C3[];
Class_Descriptor cd_S123C3 = {  "S123C3", // class name
  bases_S123C3, 4,
  &(vtc_S123C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S123C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S123C3),155, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S123C2  : S123C3 {
  virtual void  v168(); // _ZN6S123C24v168Ev
  virtual void  v169(); // _ZN6S123C24v169Ev
  virtual void  v170(); // _ZN6S123C24v170Ev
  virtual void  v171(); // _ZN6S123C24v171Ev
  virtual void  v172(); // _ZN6S123C24v172Ev
  virtual void  v173(); // _ZN6S123C24v173Ev
  virtual void  v174(); // _ZN6S123C24v174Ev
  virtual void  v175(); // _ZN6S123C24v175Ev
  virtual void  v176(); // _ZN6S123C24v176Ev
  virtual void  v177(); // _ZN6S123C24v177Ev
  virtual void  v178(); // _ZN6S123C24v178Ev
  virtual void  v179(); // _ZN6S123C24v179Ev
  virtual void  v180(); // _ZN6S123C24v180Ev
  virtual void  v181(); // _ZN6S123C24v181Ev
  virtual void  v182(); // _ZN6S123C24v182Ev
  virtual void  v183(); // _ZN6S123C24v183Ev
  virtual void  v184(); // _ZN6S123C24v184Ev
  virtual void  v185(); // _ZN6S123C24v185Ev
  virtual void  v186(); // _ZN6S123C24v186Ev
  virtual void  v187(); // _ZN6S123C24v187Ev
  virtual void  v188(); // _ZN6S123C24v188Ev
  virtual void  v189(); // _ZN6S123C24v189Ev
  virtual void  v190(); // _ZN6S123C24v190Ev
  virtual void  v191(); // _ZN6S123C24v191Ev
  virtual void  v192(); // _ZN6S123C24v192Ev
  virtual void  v193(); // _ZN6S123C24v193Ev
  ~S123C2(); // tgen
  S123C2(); // tgen
};
//SIG(-1 S123C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m Fp Fi} 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 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 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} 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}


void  S123C2 ::v168(){vfunc_called(this, "_ZN6S123C24v168Ev");}
void  S123C2 ::v169(){vfunc_called(this, "_ZN6S123C24v169Ev");}
void  S123C2 ::v170(){vfunc_called(this, "_ZN6S123C24v170Ev");}
void  S123C2 ::v171(){vfunc_called(this, "_ZN6S123C24v171Ev");}
void  S123C2 ::v172(){vfunc_called(this, "_ZN6S123C24v172Ev");}
void  S123C2 ::v173(){vfunc_called(this, "_ZN6S123C24v173Ev");}
void  S123C2 ::v174(){vfunc_called(this, "_ZN6S123C24v174Ev");}
void  S123C2 ::v175(){vfunc_called(this, "_ZN6S123C24v175Ev");}
void  S123C2 ::v176(){vfunc_called(this, "_ZN6S123C24v176Ev");}
void  S123C2 ::v177(){vfunc_called(this, "_ZN6S123C24v177Ev");}
void  S123C2 ::v178(){vfunc_called(this, "_ZN6S123C24v178Ev");}
void  S123C2 ::v179(){vfunc_called(this, "_ZN6S123C24v179Ev");}
void  S123C2 ::v180(){vfunc_called(this, "_ZN6S123C24v180Ev");}
void  S123C2 ::v181(){vfunc_called(this, "_ZN6S123C24v181Ev");}
void  S123C2 ::v182(){vfunc_called(this, "_ZN6S123C24v182Ev");}
void  S123C2 ::v183(){vfunc_called(this, "_ZN6S123C24v183Ev");}
void  S123C2 ::v184(){vfunc_called(this, "_ZN6S123C24v184Ev");}
void  S123C2 ::v185(){vfunc_called(this, "_ZN6S123C24v185Ev");}
void  S123C2 ::v186(){vfunc_called(this, "_ZN6S123C24v186Ev");}
void  S123C2 ::v187(){vfunc_called(this, "_ZN6S123C24v187Ev");}
void  S123C2 ::v188(){vfunc_called(this, "_ZN6S123C24v188Ev");}
void  S123C2 ::v189(){vfunc_called(this, "_ZN6S123C24v189Ev");}
void  S123C2 ::v190(){vfunc_called(this, "_ZN6S123C24v190Ev");}
void  S123C2 ::v191(){vfunc_called(this, "_ZN6S123C24v191Ev");}
void  S123C2 ::v192(){vfunc_called(this, "_ZN6S123C24v192Ev");}
void  S123C2 ::v193(){vfunc_called(this, "_ZN6S123C24v193Ev");}
S123C2 ::~S123C2(){ note_dtor("S123C2", this);} // tgen
S123C2 ::S123C2(){ note_ctor("S123C2", this);} // tgen

static void Test_S123C2()
{
  extern Class_Descriptor cd_S123C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S123C2, buf);
    S123C2 *dp, &lv = *(dp=new (buf) S123C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S123C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S123C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S123C6*)(S123C5*)(S123C4*)(S123C3*), 0, "S123C2");
    check_base_class_offset(lv, (S123C6*)(S123C5*)(S123C4*)(S123C3*), 0, "S123C2");
    check_base_class_offset(lv, (S123C5*)(S123C4*)(S123C3*), 0, "S123C2");
    check_base_class_offset(lv, (S123C4*)(S123C3*), 0, "S123C2");
    check_base_class_offset(lv, (S123C3*), 0, "S123C2");
    test_class_info(&lv, &cd_S123C2);
    dp->~S123C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS123C2(Test_S123C2, "S123C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S123C2C1Ev();
extern void _ZN6S123C2D1Ev();
Name_Map name_map_S123C2[] = {
  NSPAIR(_ZN6S123C2C1Ev),
  NSPAIR(_ZN6S123C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S123C6;
extern VTBL_ENTRY _ZTI6S123C6[];
extern  VTBL_ENTRY _ZTV6S123C6[];
extern Class_Descriptor cd_S123C5;
extern VTBL_ENTRY _ZTI6S123C5[];
extern  VTBL_ENTRY _ZTV6S123C5[];
extern Class_Descriptor cd_S123C4;
extern VTBL_ENTRY _ZTI6S123C4[];
extern  VTBL_ENTRY _ZTV6S123C4[];
extern Class_Descriptor cd_S123C3;
extern VTBL_ENTRY _ZTI6S123C3[];
extern  VTBL_ENTRY _ZTV6S123C3[];
static Base_Class bases_S123C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S123C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S123C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S123C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S123C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S123C2[];
extern void _ZN6S123C2D1Ev();
extern void _ZN6S123C2D0Ev();
extern void _ZN6S123C63v17Ev();
extern void _ZN6S123C63v18Ev();
extern void _ZN6S123C63v19Ev();
extern void _ZN6S123C63v20Ev();
extern void _ZN6S123C63v21Ev();
extern void _ZN6S123C63v22Ev();
extern void _ZN6S123C63v23Ev();
extern void _ZN6S123C63v24Ev();
extern void _ZN6S123C63v25Ev();
extern void _ZN6S123C63v26Ev();
extern void _ZN6S123C63v27Ev();
extern void _ZN6S123C63v28Ev();
extern void _ZN6S123C63v29Ev();
extern void _ZN6S123C63v30Ev();
extern void _ZN6S123C63v31Ev();
extern void _ZN6S123C63v32Ev();
extern void _ZN6S123C63v33Ev();
extern void _ZN6S123C63v34Ev();
extern void _ZN6S123C63v35Ev();
extern void _ZN6S123C63v36Ev();
extern void _ZN6S123C63v37Ev();
extern void _ZN6S123C63v38Ev();
extern void _ZN6S123C63v39Ev();
extern void _ZN6S123C63v40Ev();
extern void _ZN6S123C63v41Ev();
extern void _ZN6S123C63v42Ev();
extern void _ZN6S123C63v43Ev();
extern void _ZN6S123C63v44Ev();
extern void _ZN6S123C63v45Ev();
extern void _ZN6S123C63v46Ev();
extern void _ZN6S123C63v47Ev();
extern void _ZN6S123C63v48Ev();
extern void _ZN6S123C63v49Ev();
extern void _ZN6S123C63v50Ev();
extern void _ZN6S123C63v51Ev();
extern void _ZN6S123C63v52Ev();
extern void _ZN6S123C63v53Ev();
extern void _ZN6S123C63v54Ev();
extern void _ZN6S123C63v55Ev();
extern void _ZN6S123C63v56Ev();
extern void _ZN6S123C63v57Ev();
extern void _ZN6S123C63v58Ev();
extern void _ZN6S123C63v59Ev();
extern void _ZN6S123C63v60Ev();
extern void _ZN6S123C63v61Ev();
extern void _ZN6S123C63v62Ev();
extern void _ZN6S123C63v63Ev();
extern void _ZN6S123C63v64Ev();
extern void _ZN6S123C63v65Ev();
extern void _ZN6S123C63v66Ev();
extern void _ZN6S123C63v67Ev();
extern void _ZN6S123C63v68Ev();
extern void _ZN6S123C63v69Ev();
extern void _ZN6S123C63v70Ev();
extern void _ZN6S123C63v71Ev();
extern void _ZN6S123C63v72Ev();
extern void _ZN6S123C63v73Ev();
extern void _ZN6S123C63v74Ev();
extern void _ZN6S123C63v75Ev();
extern void _ZN6S123C63v76Ev();
extern void _ZN6S123C63v77Ev();
extern void _ZN6S123C63v78Ev();
extern void _ZN6S123C63v79Ev();
extern void _ZN6S123C63v80Ev();
extern void _ZN6S123C63v81Ev();
extern void _ZN6S123C63v82Ev();
extern void _ZN6S123C63v83Ev();
extern void _ZN6S123C63v84Ev();
extern void _ZN6S123C63v85Ev();
extern void _ZN6S123C63v86Ev();
extern void _ZN6S123C63v87Ev();
extern void _ZN6S123C63v88Ev();
extern void _ZN6S123C63v89Ev();
extern void _ZN6S123C63v90Ev();
extern void _ZN6S123C63v91Ev();
extern void _ZN6S123C63v92Ev();
extern void _ZN6S123C63v93Ev();
extern void _ZN6S123C63v94Ev();
extern void _ZN6S123C63v95Ev();
extern void _ZN6S123C63v96Ev();
extern void _ZN6S123C63v97Ev();
extern void _ZN6S123C63v98Ev();
extern void _ZN6S123C63v99Ev();
extern void _ZN6S123C64v100Ev();
extern void _ZN6S123C64v101Ev();
extern void _ZN6S123C64v102Ev();
extern void _ZN6S123C64v103Ev();
extern void _ZN6S123C64v104Ev();
extern void _ZN6S123C64v105Ev();
extern void _ZN6S123C64v106Ev();
extern void _ZN6S123C64v107Ev();
extern void _ZN6S123C64v108Ev();
extern void _ZN6S123C64v109Ev();
extern void _ZN6S123C64v110Ev();
extern void _ZN6S123C64v111Ev();
extern void _ZN6S123C64v112Ev();
extern void _ZN6S123C64v113Ev();
extern void _ZN6S123C64v114Ev();
extern void _ZN6S123C64v115Ev();
extern void _ZN6S123C64v116Ev();
extern void _ZN6S123C64v117Ev();
extern void _ZN6S123C64v118Ev();
extern void _ZN6S123C64v119Ev();
extern void _ZN6S123C64v120Ev();
extern void _ZN6S123C64v121Ev();
extern void _ZN6S123C64v122Ev();
extern void _ZN6S123C64v123Ev();
extern void _ZN6S123C44v124Ev();
extern void _ZN6S123C44v125Ev();
extern void _ZN6S123C44v126Ev();
extern void _ZN6S123C44v127Ev();
extern void _ZN6S123C44v128Ev();
extern void _ZN6S123C44v129Ev();
extern void _ZN6S123C44v130Ev();
extern void _ZN6S123C44v131Ev();
extern void _ZN6S123C44v132Ev();
extern void _ZN6S123C44v133Ev();
extern void _ZN6S123C44v134Ev();
extern void _ZN6S123C44v135Ev();
extern void _ZN6S123C44v136Ev();
extern void _ZN6S123C44v137Ev();
extern void _ZN6S123C44v138Ev();
extern void _ZN6S123C44v139Ev();
extern void _ZN6S123C44v140Ev();
extern void _ZN6S123C44v141Ev();
extern void _ZN6S123C44v142Ev();
extern void _ZN6S123C44v143Ev();
extern void _ZN6S123C44v144Ev();
extern void _ZN6S123C44v145Ev();
extern void _ZN6S123C44v146Ev();
extern void _ZN6S123C44v147Ev();
extern void _ZN6S123C44v148Ev();
extern void _ZN6S123C44v149Ev();
extern void _ZN6S123C34v150Ev();
extern void _ZN6S123C34v151Ev();
extern void _ZN6S123C34v152Ev();
extern void _ZN6S123C34v153Ev();
extern void _ZN6S123C34v154Ev();
extern void _ZN6S123C34v155Ev();
extern void _ZN6S123C34v156Ev();
extern void _ZN6S123C34v157Ev();
extern void _ZN6S123C34v158Ev();
extern void _ZN6S123C34v159Ev();
extern void _ZN6S123C34v160Ev();
extern void _ZN6S123C34v161Ev();
extern void _ZN6S123C34v162Ev();
extern void _ZN6S123C34v163Ev();
extern void _ZN6S123C34v164Ev();
extern void _ZN6S123C34v165Ev();
extern void _ZN6S123C34v166Ev();
extern void _ZN6S123C34v167Ev();
extern void _ZN6S123C24v168Ev();
extern void _ZN6S123C24v169Ev();
extern void _ZN6S123C24v170Ev();
extern void _ZN6S123C24v171Ev();
extern void _ZN6S123C24v172Ev();
extern void _ZN6S123C24v173Ev();
extern void _ZN6S123C24v174Ev();
extern void _ZN6S123C24v175Ev();
extern void _ZN6S123C24v176Ev();
extern void _ZN6S123C24v177Ev();
extern void _ZN6S123C24v178Ev();
extern void _ZN6S123C24v179Ev();
extern void _ZN6S123C24v180Ev();
extern void _ZN6S123C24v181Ev();
extern void _ZN6S123C24v182Ev();
extern void _ZN6S123C24v183Ev();
extern void _ZN6S123C24v184Ev();
extern void _ZN6S123C24v185Ev();
extern void _ZN6S123C24v186Ev();
extern void _ZN6S123C24v187Ev();
extern void _ZN6S123C24v188Ev();
extern void _ZN6S123C24v189Ev();
extern void _ZN6S123C24v190Ev();
extern void _ZN6S123C24v191Ev();
extern void _ZN6S123C24v192Ev();
extern void _ZN6S123C24v193Ev();
static  VTBL_ENTRY vtc_S123C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S123C2[0]),
  (VTBL_ENTRY)&_ZN6S123C2D1Ev,
  (VTBL_ENTRY)&_ZN6S123C2D0Ev,
  (VTBL_ENTRY)&_ZN6S123C63v17Ev,
  (VTBL_ENTRY)&_ZN6S123C63v18Ev,
  (VTBL_ENTRY)&_ZN6S123C63v19Ev,
  (VTBL_ENTRY)&_ZN6S123C63v20Ev,
  (VTBL_ENTRY)&_ZN6S123C63v21Ev,
  (VTBL_ENTRY)&_ZN6S123C63v22Ev,
  (VTBL_ENTRY)&_ZN6S123C63v23Ev,
  (VTBL_ENTRY)&_ZN6S123C63v24Ev,
  (VTBL_ENTRY)&_ZN6S123C63v25Ev,
  (VTBL_ENTRY)&_ZN6S123C63v26Ev,
  (VTBL_ENTRY)&_ZN6S123C63v27Ev,
  (VTBL_ENTRY)&_ZN6S123C63v28Ev,
  (VTBL_ENTRY)&_ZN6S123C63v29Ev,
  (VTBL_ENTRY)&_ZN6S123C63v30Ev,
  (VTBL_ENTRY)&_ZN6S123C63v31Ev,
  (VTBL_ENTRY)&_ZN6S123C63v32Ev,
  (VTBL_ENTRY)&_ZN6S123C63v33Ev,
  (VTBL_ENTRY)&_ZN6S123C63v34Ev,
  (VTBL_ENTRY)&_ZN6S123C63v35Ev,
  (VTBL_ENTRY)&_ZN6S123C63v36Ev,
  (VTBL_ENTRY)&_ZN6S123C63v37Ev,
  (VTBL_ENTRY)&_ZN6S123C63v38Ev,
  (VTBL_ENTRY)&_ZN6S123C63v39Ev,
  (VTBL_ENTRY)&_ZN6S123C63v40Ev,
  (VTBL_ENTRY)&_ZN6S123C63v41Ev,
  (VTBL_ENTRY)&_ZN6S123C63v42Ev,
  (VTBL_ENTRY)&_ZN6S123C63v43Ev,
  (VTBL_ENTRY)&_ZN6S123C63v44Ev,
  (VTBL_ENTRY)&_ZN6S123C63v45Ev,
  (VTBL_ENTRY)&_ZN6S123C63v46Ev,
  (VTBL_ENTRY)&_ZN6S123C63v47Ev,
  (VTBL_ENTRY)&_ZN6S123C63v48Ev,
  (VTBL_ENTRY)&_ZN6S123C63v49Ev,
  (VTBL_ENTRY)&_ZN6S123C63v50Ev,
  (VTBL_ENTRY)&_ZN6S123C63v51Ev,
  (VTBL_ENTRY)&_ZN6S123C63v52Ev,
  (VTBL_ENTRY)&_ZN6S123C63v53Ev,
  (VTBL_ENTRY)&_ZN6S123C63v54Ev,
  (VTBL_ENTRY)&_ZN6S123C63v55Ev,
  (VTBL_ENTRY)&_ZN6S123C63v56Ev,
  (VTBL_ENTRY)&_ZN6S123C63v57Ev,
  (VTBL_ENTRY)&_ZN6S123C63v58Ev,
  (VTBL_ENTRY)&_ZN6S123C63v59Ev,
  (VTBL_ENTRY)&_ZN6S123C63v60Ev,
  (VTBL_ENTRY)&_ZN6S123C63v61Ev,
  (VTBL_ENTRY)&_ZN6S123C63v62Ev,
  (VTBL_ENTRY)&_ZN6S123C63v63Ev,
  (VTBL_ENTRY)&_ZN6S123C63v64Ev,
  (VTBL_ENTRY)&_ZN6S123C63v65Ev,
  (VTBL_ENTRY)&_ZN6S123C63v66Ev,
  (VTBL_ENTRY)&_ZN6S123C63v67Ev,
  (VTBL_ENTRY)&_ZN6S123C63v68Ev,
  (VTBL_ENTRY)&_ZN6S123C63v69Ev,
  (VTBL_ENTRY)&_ZN6S123C63v70Ev,
  (VTBL_ENTRY)&_ZN6S123C63v71Ev,
  (VTBL_ENTRY)&_ZN6S123C63v72Ev,
  (VTBL_ENTRY)&_ZN6S123C63v73Ev,
  (VTBL_ENTRY)&_ZN6S123C63v74Ev,
  (VTBL_ENTRY)&_ZN6S123C63v75Ev,
  (VTBL_ENTRY)&_ZN6S123C63v76Ev,
  (VTBL_ENTRY)&_ZN6S123C63v77Ev,
  (VTBL_ENTRY)&_ZN6S123C63v78Ev,
  (VTBL_ENTRY)&_ZN6S123C63v79Ev,
  (VTBL_ENTRY)&_ZN6S123C63v80Ev,
  (VTBL_ENTRY)&_ZN6S123C63v81Ev,
  (VTBL_ENTRY)&_ZN6S123C63v82Ev,
  (VTBL_ENTRY)&_ZN6S123C63v83Ev,
  (VTBL_ENTRY)&_ZN6S123C63v84Ev,
  (VTBL_ENTRY)&_ZN6S123C63v85Ev,
  (VTBL_ENTRY)&_ZN6S123C63v86Ev,
  (VTBL_ENTRY)&_ZN6S123C63v87Ev,
  (VTBL_ENTRY)&_ZN6S123C63v88Ev,
  (VTBL_ENTRY)&_ZN6S123C63v89Ev,
  (VTBL_ENTRY)&_ZN6S123C63v90Ev,
  (VTBL_ENTRY)&_ZN6S123C63v91Ev,
  (VTBL_ENTRY)&_ZN6S123C63v92Ev,
  (VTBL_ENTRY)&_ZN6S123C63v93Ev,
  (VTBL_ENTRY)&_ZN6S123C63v94Ev,
  (VTBL_ENTRY)&_ZN6S123C63v95Ev,
  (VTBL_ENTRY)&_ZN6S123C63v96Ev,
  (VTBL_ENTRY)&_ZN6S123C63v97Ev,
  (VTBL_ENTRY)&_ZN6S123C63v98Ev,
  (VTBL_ENTRY)&_ZN6S123C63v99Ev,
  (VTBL_ENTRY)&_ZN6S123C64v100Ev,
  (VTBL_ENTRY)&_ZN6S123C64v101Ev,
  (VTBL_ENTRY)&_ZN6S123C64v102Ev,
  (VTBL_ENTRY)&_ZN6S123C64v103Ev,
  (VTBL_ENTRY)&_ZN6S123C64v104Ev,
  (VTBL_ENTRY)&_ZN6S123C64v105Ev,
  (VTBL_ENTRY)&_ZN6S123C64v106Ev,
  (VTBL_ENTRY)&_ZN6S123C64v107Ev,
  (VTBL_ENTRY)&_ZN6S123C64v108Ev,
  (VTBL_ENTRY)&_ZN6S123C64v109Ev,
  (VTBL_ENTRY)&_ZN6S123C64v110Ev,
  (VTBL_ENTRY)&_ZN6S123C64v111Ev,
  (VTBL_ENTRY)&_ZN6S123C64v112Ev,
  (VTBL_ENTRY)&_ZN6S123C64v113Ev,
  (VTBL_ENTRY)&_ZN6S123C64v114Ev,
  (VTBL_ENTRY)&_ZN6S123C64v115Ev,
  (VTBL_ENTRY)&_ZN6S123C64v116Ev,
  (VTBL_ENTRY)&_ZN6S123C64v117Ev,
  (VTBL_ENTRY)&_ZN6S123C64v118Ev,
  (VTBL_ENTRY)&_ZN6S123C64v119Ev,
  (VTBL_ENTRY)&_ZN6S123C64v120Ev,
  (VTBL_ENTRY)&_ZN6S123C64v121Ev,
  (VTBL_ENTRY)&_ZN6S123C64v122Ev,
  (VTBL_ENTRY)&_ZN6S123C64v123Ev,
  (VTBL_ENTRY)&_ZN6S123C44v124Ev,
  (VTBL_ENTRY)&_ZN6S123C44v125Ev,
  (VTBL_ENTRY)&_ZN6S123C44v126Ev,
  (VTBL_ENTRY)&_ZN6S123C44v127Ev,
  (VTBL_ENTRY)&_ZN6S123C44v128Ev,
  (VTBL_ENTRY)&_ZN6S123C44v129Ev,
  (VTBL_ENTRY)&_ZN6S123C44v130Ev,
  (VTBL_ENTRY)&_ZN6S123C44v131Ev,
  (VTBL_ENTRY)&_ZN6S123C44v132Ev,
  (VTBL_ENTRY)&_ZN6S123C44v133Ev,
  (VTBL_ENTRY)&_ZN6S123C44v134Ev,
  (VTBL_ENTRY)&_ZN6S123C44v135Ev,
  (VTBL_ENTRY)&_ZN6S123C44v136Ev,
  (VTBL_ENTRY)&_ZN6S123C44v137Ev,
  (VTBL_ENTRY)&_ZN6S123C44v138Ev,
  (VTBL_ENTRY)&_ZN6S123C44v139Ev,
  (VTBL_ENTRY)&_ZN6S123C44v140Ev,
  (VTBL_ENTRY)&_ZN6S123C44v141Ev,
  (VTBL_ENTRY)&_ZN6S123C44v142Ev,
  (VTBL_ENTRY)&_ZN6S123C44v143Ev,
  (VTBL_ENTRY)&_ZN6S123C44v144Ev,
  (VTBL_ENTRY)&_ZN6S123C44v145Ev,
  (VTBL_ENTRY)&_ZN6S123C44v146Ev,
  (VTBL_ENTRY)&_ZN6S123C44v147Ev,
  (VTBL_ENTRY)&_ZN6S123C44v148Ev,
  (VTBL_ENTRY)&_ZN6S123C44v149Ev,
  (VTBL_ENTRY)&_ZN6S123C34v150Ev,
  (VTBL_ENTRY)&_ZN6S123C34v151Ev,
  (VTBL_ENTRY)&_ZN6S123C34v152Ev,
  (VTBL_ENTRY)&_ZN6S123C34v153Ev,
  (VTBL_ENTRY)&_ZN6S123C34v154Ev,
  (VTBL_ENTRY)&_ZN6S123C34v155Ev,
  (VTBL_ENTRY)&_ZN6S123C34v156Ev,
  (VTBL_ENTRY)&_ZN6S123C34v157Ev,
  (VTBL_ENTRY)&_ZN6S123C34v158Ev,
  (VTBL_ENTRY)&_ZN6S123C34v159Ev,
  (VTBL_ENTRY)&_ZN6S123C34v160Ev,
  (VTBL_ENTRY)&_ZN6S123C34v161Ev,
  (VTBL_ENTRY)&_ZN6S123C34v162Ev,
  (VTBL_ENTRY)&_ZN6S123C34v163Ev,
  (VTBL_ENTRY)&_ZN6S123C34v164Ev,
  (VTBL_ENTRY)&_ZN6S123C34v165Ev,
  (VTBL_ENTRY)&_ZN6S123C34v166Ev,
  (VTBL_ENTRY)&_ZN6S123C34v167Ev,
  (VTBL_ENTRY)&_ZN6S123C24v168Ev,
  (VTBL_ENTRY)&_ZN6S123C24v169Ev,
  (VTBL_ENTRY)&_ZN6S123C24v170Ev,
  (VTBL_ENTRY)&_ZN6S123C24v171Ev,
  (VTBL_ENTRY)&_ZN6S123C24v172Ev,
  (VTBL_ENTRY)&_ZN6S123C24v173Ev,
  (VTBL_ENTRY)&_ZN6S123C24v174Ev,
  (VTBL_ENTRY)&_ZN6S123C24v175Ev,
  (VTBL_ENTRY)&_ZN6S123C24v176Ev,
  (VTBL_ENTRY)&_ZN6S123C24v177Ev,
  (VTBL_ENTRY)&_ZN6S123C24v178Ev,
  (VTBL_ENTRY)&_ZN6S123C24v179Ev,
  (VTBL_ENTRY)&_ZN6S123C24v180Ev,
  (VTBL_ENTRY)&_ZN6S123C24v181Ev,
  (VTBL_ENTRY)&_ZN6S123C24v182Ev,
  (VTBL_ENTRY)&_ZN6S123C24v183Ev,
  (VTBL_ENTRY)&_ZN6S123C24v184Ev,
  (VTBL_ENTRY)&_ZN6S123C24v185Ev,
  (VTBL_ENTRY)&_ZN6S123C24v186Ev,
  (VTBL_ENTRY)&_ZN6S123C24v187Ev,
  (VTBL_ENTRY)&_ZN6S123C24v188Ev,
  (VTBL_ENTRY)&_ZN6S123C24v189Ev,
  (VTBL_ENTRY)&_ZN6S123C24v190Ev,
  (VTBL_ENTRY)&_ZN6S123C24v191Ev,
  (VTBL_ENTRY)&_ZN6S123C24v192Ev,
  (VTBL_ENTRY)&_ZN6S123C24v193Ev,
};
extern VTBL_ENTRY _ZTI6S123C2[];
extern  VTBL_ENTRY _ZTV6S123C2[];
Class_Descriptor cd_S123C2 = {  "S123C2", // class name
  bases_S123C2, 5,
  &(vtc_S123C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S123C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S123C2),181, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S123C1  : S123C2 {
  virtual void  v1(); // _ZN6S123C12v1Ev
  virtual void  v2(); // _ZN6S123C12v2Ev
  virtual void  v3(); // _ZN6S123C12v3Ev
  virtual void  v4(); // _ZN6S123C12v4Ev
  virtual void  v5(); // _ZN6S123C12v5Ev
  virtual void  v6(); // _ZN6S123C12v6Ev
  virtual void  v7(); // _ZN6S123C12v7Ev
  virtual void  v8(); // _ZN6S123C12v8Ev
  virtual void  v9(); // _ZN6S123C12v9Ev
  virtual void  v10(); // _ZN6S123C13v10Ev
  virtual void  v11(); // _ZN6S123C13v11Ev
  virtual void  v12(); // _ZN6S123C13v12Ev
  virtual void  v13(); // _ZN6S123C13v13Ev
  virtual void  v14(); // _ZN6S123C13v14Ev
  virtual void  v15(); // _ZN6S123C13v15Ev
  virtual void  v16(); // _ZN6S123C13v16Ev
  ~S123C1(); // tgen
  S123C1(); // tgen
};
//SIG(1 S123C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd m Fp Fi} 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 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 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} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


void  S123C1 ::v1(){vfunc_called(this, "_ZN6S123C12v1Ev");}
void  S123C1 ::v2(){vfunc_called(this, "_ZN6S123C12v2Ev");}
void  S123C1 ::v3(){vfunc_called(this, "_ZN6S123C12v3Ev");}
void  S123C1 ::v4(){vfunc_called(this, "_ZN6S123C12v4Ev");}
void  S123C1 ::v5(){vfunc_called(this, "_ZN6S123C12v5Ev");}
void  S123C1 ::v6(){vfunc_called(this, "_ZN6S123C12v6Ev");}
void  S123C1 ::v7(){vfunc_called(this, "_ZN6S123C12v7Ev");}
void  S123C1 ::v8(){vfunc_called(this, "_ZN6S123C12v8Ev");}
void  S123C1 ::v9(){vfunc_called(this, "_ZN6S123C12v9Ev");}
void  S123C1 ::v10(){vfunc_called(this, "_ZN6S123C13v10Ev");}
void  S123C1 ::v11(){vfunc_called(this, "_ZN6S123C13v11Ev");}
void  S123C1 ::v12(){vfunc_called(this, "_ZN6S123C13v12Ev");}
void  S123C1 ::v13(){vfunc_called(this, "_ZN6S123C13v13Ev");}
void  S123C1 ::v14(){vfunc_called(this, "_ZN6S123C13v14Ev");}
void  S123C1 ::v15(){vfunc_called(this, "_ZN6S123C13v15Ev");}
void  S123C1 ::v16(){vfunc_called(this, "_ZN6S123C13v16Ev");}
S123C1 ::~S123C1(){ note_dtor("S123C1", this);} // tgen
S123C1 ::S123C1(){ note_ctor("S123C1", this);} // tgen

static void Test_S123C1()
{
  extern Class_Descriptor cd_S123C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S123C1, buf);
    S123C1 *dp, &lv = *(dp=new (buf) S123C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S123C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S123C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S123C6*)(S123C5*)(S123C4*)(S123C3*)(S123C2*), 0, "S123C1");
    check_base_class_offset(lv, (S123C6*)(S123C5*)(S123C4*)(S123C3*)(S123C2*), 0, "S123C1");
    check_base_class_offset(lv, (S123C5*)(S123C4*)(S123C3*)(S123C2*), 0, "S123C1");
    check_base_class_offset(lv, (S123C4*)(S123C3*)(S123C2*), 0, "S123C1");
    check_base_class_offset(lv, (S123C3*)(S123C2*), 0, "S123C1");
    check_base_class_offset(lv, (S123C2*), 0, "S123C1");
    test_class_info(&lv, &cd_S123C1);
    dp->~S123C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS123C1(Test_S123C1, "S123C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S123C1C1Ev();
extern void _ZN6S123C1D1Ev();
Name_Map name_map_S123C1[] = {
  NSPAIR(_ZN6S123C1C1Ev),
  NSPAIR(_ZN6S123C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S123C6;
extern VTBL_ENTRY _ZTI6S123C6[];
extern  VTBL_ENTRY _ZTV6S123C6[];
extern Class_Descriptor cd_S123C5;
extern VTBL_ENTRY _ZTI6S123C5[];
extern  VTBL_ENTRY _ZTV6S123C5[];
extern Class_Descriptor cd_S123C4;
extern VTBL_ENTRY _ZTI6S123C4[];
extern  VTBL_ENTRY _ZTV6S123C4[];
extern Class_Descriptor cd_S123C3;
extern VTBL_ENTRY _ZTI6S123C3[];
extern  VTBL_ENTRY _ZTV6S123C3[];
extern Class_Descriptor cd_S123C2;
extern VTBL_ENTRY _ZTI6S123C2[];
extern  VTBL_ENTRY _ZTV6S123C2[];
static Base_Class bases_S123C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S123C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S123C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S123C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S123C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S123C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S123C1[];
extern void _ZN6S123C1D1Ev();
extern void _ZN6S123C1D0Ev();
extern void _ZN6S123C63v17Ev();
extern void _ZN6S123C63v18Ev();
extern void _ZN6S123C63v19Ev();
extern void _ZN6S123C63v20Ev();
extern void _ZN6S123C63v21Ev();
extern void _ZN6S123C63v22Ev();
extern void _ZN6S123C63v23Ev();
extern void _ZN6S123C63v24Ev();
extern void _ZN6S123C63v25Ev();
extern void _ZN6S123C63v26Ev();
extern void _ZN6S123C63v27Ev();
extern void _ZN6S123C63v28Ev();
extern void _ZN6S123C63v29Ev();
extern void _ZN6S123C63v30Ev();
extern void _ZN6S123C63v31Ev();
extern void _ZN6S123C63v32Ev();
extern void _ZN6S123C63v33Ev();
extern void _ZN6S123C63v34Ev();
extern void _ZN6S123C63v35Ev();
extern void _ZN6S123C63v36Ev();
extern void _ZN6S123C63v37Ev();
extern void _ZN6S123C63v38Ev();
extern void _ZN6S123C63v39Ev();
extern void _ZN6S123C63v40Ev();
extern void _ZN6S123C63v41Ev();
extern void _ZN6S123C63v42Ev();
extern void _ZN6S123C63v43Ev();
extern void _ZN6S123C63v44Ev();
extern void _ZN6S123C63v45Ev();
extern void _ZN6S123C63v46Ev();
extern void _ZN6S123C63v47Ev();
extern void _ZN6S123C63v48Ev();
extern void _ZN6S123C63v49Ev();
extern void _ZN6S123C63v50Ev();
extern void _ZN6S123C63v51Ev();
extern void _ZN6S123C63v52Ev();
extern void _ZN6S123C63v53Ev();
extern void _ZN6S123C63v54Ev();
extern void _ZN6S123C63v55Ev();
extern void _ZN6S123C63v56Ev();
extern void _ZN6S123C63v57Ev();
extern void _ZN6S123C63v58Ev();
extern void _ZN6S123C63v59Ev();
extern void _ZN6S123C63v60Ev();
extern void _ZN6S123C63v61Ev();
extern void _ZN6S123C63v62Ev();
extern void _ZN6S123C63v63Ev();
extern void _ZN6S123C63v64Ev();
extern void _ZN6S123C63v65Ev();
extern void _ZN6S123C63v66Ev();
extern void _ZN6S123C63v67Ev();
extern void _ZN6S123C63v68Ev();
extern void _ZN6S123C63v69Ev();
extern void _ZN6S123C63v70Ev();
extern void _ZN6S123C63v71Ev();
extern void _ZN6S123C63v72Ev();
extern void _ZN6S123C63v73Ev();
extern void _ZN6S123C63v74Ev();
extern void _ZN6S123C63v75Ev();
extern void _ZN6S123C63v76Ev();
extern void _ZN6S123C63v77Ev();
extern void _ZN6S123C63v78Ev();
extern void _ZN6S123C63v79Ev();
extern void _ZN6S123C63v80Ev();
extern void _ZN6S123C63v81Ev();
extern void _ZN6S123C63v82Ev();
extern void _ZN6S123C63v83Ev();
extern void _ZN6S123C63v84Ev();
extern void _ZN6S123C63v85Ev();
extern void _ZN6S123C63v86Ev();
extern void _ZN6S123C63v87Ev();
extern void _ZN6S123C63v88Ev();
extern void _ZN6S123C63v89Ev();
extern void _ZN6S123C63v90Ev();
extern void _ZN6S123C63v91Ev();
extern void _ZN6S123C63v92Ev();
extern void _ZN6S123C63v93Ev();
extern void _ZN6S123C63v94Ev();
extern void _ZN6S123C63v95Ev();
extern void _ZN6S123C63v96Ev();
extern void _ZN6S123C63v97Ev();
extern void _ZN6S123C63v98Ev();
extern void _ZN6S123C63v99Ev();
extern void _ZN6S123C64v100Ev();
extern void _ZN6S123C64v101Ev();
extern void _ZN6S123C64v102Ev();
extern void _ZN6S123C64v103Ev();
extern void _ZN6S123C64v104Ev();
extern void _ZN6S123C64v105Ev();
extern void _ZN6S123C64v106Ev();
extern void _ZN6S123C64v107Ev();
extern void _ZN6S123C64v108Ev();
extern void _ZN6S123C64v109Ev();
extern void _ZN6S123C64v110Ev();
extern void _ZN6S123C64v111Ev();
extern void _ZN6S123C64v112Ev();
extern void _ZN6S123C64v113Ev();
extern void _ZN6S123C64v114Ev();
extern void _ZN6S123C64v115Ev();
extern void _ZN6S123C64v116Ev();
extern void _ZN6S123C64v117Ev();
extern void _ZN6S123C64v118Ev();
extern void _ZN6S123C64v119Ev();
extern void _ZN6S123C64v120Ev();
extern void _ZN6S123C64v121Ev();
extern void _ZN6S123C64v122Ev();
extern void _ZN6S123C64v123Ev();
extern void _ZN6S123C44v124Ev();
extern void _ZN6S123C44v125Ev();
extern void _ZN6S123C44v126Ev();
extern void _ZN6S123C44v127Ev();
extern void _ZN6S123C44v128Ev();
extern void _ZN6S123C44v129Ev();
extern void _ZN6S123C44v130Ev();
extern void _ZN6S123C44v131Ev();
extern void _ZN6S123C44v132Ev();
extern void _ZN6S123C44v133Ev();
extern void _ZN6S123C44v134Ev();
extern void _ZN6S123C44v135Ev();
extern void _ZN6S123C44v136Ev();
extern void _ZN6S123C44v137Ev();
extern void _ZN6S123C44v138Ev();
extern void _ZN6S123C44v139Ev();
extern void _ZN6S123C44v140Ev();
extern void _ZN6S123C44v141Ev();
extern void _ZN6S123C44v142Ev();
extern void _ZN6S123C44v143Ev();
extern void _ZN6S123C44v144Ev();
extern void _ZN6S123C44v145Ev();
extern void _ZN6S123C44v146Ev();
extern void _ZN6S123C44v147Ev();
extern void _ZN6S123C44v148Ev();
extern void _ZN6S123C44v149Ev();
extern void _ZN6S123C34v150Ev();
extern void _ZN6S123C34v151Ev();
extern void _ZN6S123C34v152Ev();
extern void _ZN6S123C34v153Ev();
extern void _ZN6S123C34v154Ev();
extern void _ZN6S123C34v155Ev();
extern void _ZN6S123C34v156Ev();
extern void _ZN6S123C34v157Ev();
extern void _ZN6S123C34v158Ev();
extern void _ZN6S123C34v159Ev();
extern void _ZN6S123C34v160Ev();
extern void _ZN6S123C34v161Ev();
extern void _ZN6S123C34v162Ev();
extern void _ZN6S123C34v163Ev();
extern void _ZN6S123C34v164Ev();
extern void _ZN6S123C34v165Ev();
extern void _ZN6S123C34v166Ev();
extern void _ZN6S123C34v167Ev();
extern void _ZN6S123C24v168Ev();
extern void _ZN6S123C24v169Ev();
extern void _ZN6S123C24v170Ev();
extern void _ZN6S123C24v171Ev();
extern void _ZN6S123C24v172Ev();
extern void _ZN6S123C24v173Ev();
extern void _ZN6S123C24v174Ev();
extern void _ZN6S123C24v175Ev();
extern void _ZN6S123C24v176Ev();
extern void _ZN6S123C24v177Ev();
extern void _ZN6S123C24v178Ev();
extern void _ZN6S123C24v179Ev();
extern void _ZN6S123C24v180Ev();
extern void _ZN6S123C24v181Ev();
extern void _ZN6S123C24v182Ev();
extern void _ZN6S123C24v183Ev();
extern void _ZN6S123C24v184Ev();
extern void _ZN6S123C24v185Ev();
extern void _ZN6S123C24v186Ev();
extern void _ZN6S123C24v187Ev();
extern void _ZN6S123C24v188Ev();
extern void _ZN6S123C24v189Ev();
extern void _ZN6S123C24v190Ev();
extern void _ZN6S123C24v191Ev();
extern void _ZN6S123C24v192Ev();
extern void _ZN6S123C24v193Ev();
extern void _ZN6S123C12v1Ev();
extern void _ZN6S123C12v2Ev();
extern void _ZN6S123C12v3Ev();
extern void _ZN6S123C12v4Ev();
extern void _ZN6S123C12v5Ev();
extern void _ZN6S123C12v6Ev();
extern void _ZN6S123C12v7Ev();
extern void _ZN6S123C12v8Ev();
extern void _ZN6S123C12v9Ev();
extern void _ZN6S123C13v10Ev();
extern void _ZN6S123C13v11Ev();
extern void _ZN6S123C13v12Ev();
extern void _ZN6S123C13v13Ev();
extern void _ZN6S123C13v14Ev();
extern void _ZN6S123C13v15Ev();
extern void _ZN6S123C13v16Ev();
static  VTBL_ENTRY vtc_S123C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S123C1[0]),
  (VTBL_ENTRY)&_ZN6S123C1D1Ev,
  (VTBL_ENTRY)&_ZN6S123C1D0Ev,
  (VTBL_ENTRY)&_ZN6S123C63v17Ev,
  (VTBL_ENTRY)&_ZN6S123C63v18Ev,
  (VTBL_ENTRY)&_ZN6S123C63v19Ev,
  (VTBL_ENTRY)&_ZN6S123C63v20Ev,
  (VTBL_ENTRY)&_ZN6S123C63v21Ev,
  (VTBL_ENTRY)&_ZN6S123C63v22Ev,
  (VTBL_ENTRY)&_ZN6S123C63v23Ev,
  (VTBL_ENTRY)&_ZN6S123C63v24Ev,
  (VTBL_ENTRY)&_ZN6S123C63v25Ev,
  (VTBL_ENTRY)&_ZN6S123C63v26Ev,
  (VTBL_ENTRY)&_ZN6S123C63v27Ev,
  (VTBL_ENTRY)&_ZN6S123C63v28Ev,
  (VTBL_ENTRY)&_ZN6S123C63v29Ev,
  (VTBL_ENTRY)&_ZN6S123C63v30Ev,
  (VTBL_ENTRY)&_ZN6S123C63v31Ev,
  (VTBL_ENTRY)&_ZN6S123C63v32Ev,
  (VTBL_ENTRY)&_ZN6S123C63v33Ev,
  (VTBL_ENTRY)&_ZN6S123C63v34Ev,
  (VTBL_ENTRY)&_ZN6S123C63v35Ev,
  (VTBL_ENTRY)&_ZN6S123C63v36Ev,
  (VTBL_ENTRY)&_ZN6S123C63v37Ev,
  (VTBL_ENTRY)&_ZN6S123C63v38Ev,
  (VTBL_ENTRY)&_ZN6S123C63v39Ev,
  (VTBL_ENTRY)&_ZN6S123C63v40Ev,
  (VTBL_ENTRY)&_ZN6S123C63v41Ev,
  (VTBL_ENTRY)&_ZN6S123C63v42Ev,
  (VTBL_ENTRY)&_ZN6S123C63v43Ev,
  (VTBL_ENTRY)&_ZN6S123C63v44Ev,
  (VTBL_ENTRY)&_ZN6S123C63v45Ev,
  (VTBL_ENTRY)&_ZN6S123C63v46Ev,
  (VTBL_ENTRY)&_ZN6S123C63v47Ev,
  (VTBL_ENTRY)&_ZN6S123C63v48Ev,
  (VTBL_ENTRY)&_ZN6S123C63v49Ev,
  (VTBL_ENTRY)&_ZN6S123C63v50Ev,
  (VTBL_ENTRY)&_ZN6S123C63v51Ev,
  (VTBL_ENTRY)&_ZN6S123C63v52Ev,
  (VTBL_ENTRY)&_ZN6S123C63v53Ev,
  (VTBL_ENTRY)&_ZN6S123C63v54Ev,
  (VTBL_ENTRY)&_ZN6S123C63v55Ev,
  (VTBL_ENTRY)&_ZN6S123C63v56Ev,
  (VTBL_ENTRY)&_ZN6S123C63v57Ev,
  (VTBL_ENTRY)&_ZN6S123C63v58Ev,
  (VTBL_ENTRY)&_ZN6S123C63v59Ev,
  (VTBL_ENTRY)&_ZN6S123C63v60Ev,
  (VTBL_ENTRY)&_ZN6S123C63v61Ev,
  (VTBL_ENTRY)&_ZN6S123C63v62Ev,
  (VTBL_ENTRY)&_ZN6S123C63v63Ev,
  (VTBL_ENTRY)&_ZN6S123C63v64Ev,
  (VTBL_ENTRY)&_ZN6S123C63v65Ev,
  (VTBL_ENTRY)&_ZN6S123C63v66Ev,
  (VTBL_ENTRY)&_ZN6S123C63v67Ev,
  (VTBL_ENTRY)&_ZN6S123C63v68Ev,
  (VTBL_ENTRY)&_ZN6S123C63v69Ev,
  (VTBL_ENTRY)&_ZN6S123C63v70Ev,
  (VTBL_ENTRY)&_ZN6S123C63v71Ev,
  (VTBL_ENTRY)&_ZN6S123C63v72Ev,
  (VTBL_ENTRY)&_ZN6S123C63v73Ev,
  (VTBL_ENTRY)&_ZN6S123C63v74Ev,
  (VTBL_ENTRY)&_ZN6S123C63v75Ev,
  (VTBL_ENTRY)&_ZN6S123C63v76Ev,
  (VTBL_ENTRY)&_ZN6S123C63v77Ev,
  (VTBL_ENTRY)&_ZN6S123C63v78Ev,
  (VTBL_ENTRY)&_ZN6S123C63v79Ev,
  (VTBL_ENTRY)&_ZN6S123C63v80Ev,
  (VTBL_ENTRY)&_ZN6S123C63v81Ev,
  (VTBL_ENTRY)&_ZN6S123C63v82Ev,
  (VTBL_ENTRY)&_ZN6S123C63v83Ev,
  (VTBL_ENTRY)&_ZN6S123C63v84Ev,
  (VTBL_ENTRY)&_ZN6S123C63v85Ev,
  (VTBL_ENTRY)&_ZN6S123C63v86Ev,
  (VTBL_ENTRY)&_ZN6S123C63v87Ev,
  (VTBL_ENTRY)&_ZN6S123C63v88Ev,
  (VTBL_ENTRY)&_ZN6S123C63v89Ev,
  (VTBL_ENTRY)&_ZN6S123C63v90Ev,
  (VTBL_ENTRY)&_ZN6S123C63v91Ev,
  (VTBL_ENTRY)&_ZN6S123C63v92Ev,
  (VTBL_ENTRY)&_ZN6S123C63v93Ev,
  (VTBL_ENTRY)&_ZN6S123C63v94Ev,
  (VTBL_ENTRY)&_ZN6S123C63v95Ev,
  (VTBL_ENTRY)&_ZN6S123C63v96Ev,
  (VTBL_ENTRY)&_ZN6S123C63v97Ev,
  (VTBL_ENTRY)&_ZN6S123C63v98Ev,
  (VTBL_ENTRY)&_ZN6S123C63v99Ev,
  (VTBL_ENTRY)&_ZN6S123C64v100Ev,
  (VTBL_ENTRY)&_ZN6S123C64v101Ev,
  (VTBL_ENTRY)&_ZN6S123C64v102Ev,
  (VTBL_ENTRY)&_ZN6S123C64v103Ev,
  (VTBL_ENTRY)&_ZN6S123C64v104Ev,
  (VTBL_ENTRY)&_ZN6S123C64v105Ev,
  (VTBL_ENTRY)&_ZN6S123C64v106Ev,
  (VTBL_ENTRY)&_ZN6S123C64v107Ev,
  (VTBL_ENTRY)&_ZN6S123C64v108Ev,
  (VTBL_ENTRY)&_ZN6S123C64v109Ev,
  (VTBL_ENTRY)&_ZN6S123C64v110Ev,
  (VTBL_ENTRY)&_ZN6S123C64v111Ev,
  (VTBL_ENTRY)&_ZN6S123C64v112Ev,
  (VTBL_ENTRY)&_ZN6S123C64v113Ev,
  (VTBL_ENTRY)&_ZN6S123C64v114Ev,
  (VTBL_ENTRY)&_ZN6S123C64v115Ev,
  (VTBL_ENTRY)&_ZN6S123C64v116Ev,
  (VTBL_ENTRY)&_ZN6S123C64v117Ev,
  (VTBL_ENTRY)&_ZN6S123C64v118Ev,
  (VTBL_ENTRY)&_ZN6S123C64v119Ev,
  (VTBL_ENTRY)&_ZN6S123C64v120Ev,
  (VTBL_ENTRY)&_ZN6S123C64v121Ev,
  (VTBL_ENTRY)&_ZN6S123C64v122Ev,
  (VTBL_ENTRY)&_ZN6S123C64v123Ev,
  (VTBL_ENTRY)&_ZN6S123C44v124Ev,
  (VTBL_ENTRY)&_ZN6S123C44v125Ev,
  (VTBL_ENTRY)&_ZN6S123C44v126Ev,
  (VTBL_ENTRY)&_ZN6S123C44v127Ev,
  (VTBL_ENTRY)&_ZN6S123C44v128Ev,
  (VTBL_ENTRY)&_ZN6S123C44v129Ev,
  (VTBL_ENTRY)&_ZN6S123C44v130Ev,
  (VTBL_ENTRY)&_ZN6S123C44v131Ev,
  (VTBL_ENTRY)&_ZN6S123C44v132Ev,
  (VTBL_ENTRY)&_ZN6S123C44v133Ev,
  (VTBL_ENTRY)&_ZN6S123C44v134Ev,
  (VTBL_ENTRY)&_ZN6S123C44v135Ev,
  (VTBL_ENTRY)&_ZN6S123C44v136Ev,
  (VTBL_ENTRY)&_ZN6S123C44v137Ev,
  (VTBL_ENTRY)&_ZN6S123C44v138Ev,
  (VTBL_ENTRY)&_ZN6S123C44v139Ev,
  (VTBL_ENTRY)&_ZN6S123C44v140Ev,
  (VTBL_ENTRY)&_ZN6S123C44v141Ev,
  (VTBL_ENTRY)&_ZN6S123C44v142Ev,
  (VTBL_ENTRY)&_ZN6S123C44v143Ev,
  (VTBL_ENTRY)&_ZN6S123C44v144Ev,
  (VTBL_ENTRY)&_ZN6S123C44v145Ev,
  (VTBL_ENTRY)&_ZN6S123C44v146Ev,
  (VTBL_ENTRY)&_ZN6S123C44v147Ev,
  (VTBL_ENTRY)&_ZN6S123C44v148Ev,
  (VTBL_ENTRY)&_ZN6S123C44v149Ev,
  (VTBL_ENTRY)&_ZN6S123C34v150Ev,
  (VTBL_ENTRY)&_ZN6S123C34v151Ev,
  (VTBL_ENTRY)&_ZN6S123C34v152Ev,
  (VTBL_ENTRY)&_ZN6S123C34v153Ev,
  (VTBL_ENTRY)&_ZN6S123C34v154Ev,
  (VTBL_ENTRY)&_ZN6S123C34v155Ev,
  (VTBL_ENTRY)&_ZN6S123C34v156Ev,
  (VTBL_ENTRY)&_ZN6S123C34v157Ev,
  (VTBL_ENTRY)&_ZN6S123C34v158Ev,
  (VTBL_ENTRY)&_ZN6S123C34v159Ev,
  (VTBL_ENTRY)&_ZN6S123C34v160Ev,
  (VTBL_ENTRY)&_ZN6S123C34v161Ev,
  (VTBL_ENTRY)&_ZN6S123C34v162Ev,
  (VTBL_ENTRY)&_ZN6S123C34v163Ev,
  (VTBL_ENTRY)&_ZN6S123C34v164Ev,
  (VTBL_ENTRY)&_ZN6S123C34v165Ev,
  (VTBL_ENTRY)&_ZN6S123C34v166Ev,
  (VTBL_ENTRY)&_ZN6S123C34v167Ev,
  (VTBL_ENTRY)&_ZN6S123C24v168Ev,
  (VTBL_ENTRY)&_ZN6S123C24v169Ev,
  (VTBL_ENTRY)&_ZN6S123C24v170Ev,
  (VTBL_ENTRY)&_ZN6S123C24v171Ev,
  (VTBL_ENTRY)&_ZN6S123C24v172Ev,
  (VTBL_ENTRY)&_ZN6S123C24v173Ev,
  (VTBL_ENTRY)&_ZN6S123C24v174Ev,
  (VTBL_ENTRY)&_ZN6S123C24v175Ev,
  (VTBL_ENTRY)&_ZN6S123C24v176Ev,
  (VTBL_ENTRY)&_ZN6S123C24v177Ev,
  (VTBL_ENTRY)&_ZN6S123C24v178Ev,
  (VTBL_ENTRY)&_ZN6S123C24v179Ev,
  (VTBL_ENTRY)&_ZN6S123C24v180Ev,
  (VTBL_ENTRY)&_ZN6S123C24v181Ev,
  (VTBL_ENTRY)&_ZN6S123C24v182Ev,
  (VTBL_ENTRY)&_ZN6S123C24v183Ev,
  (VTBL_ENTRY)&_ZN6S123C24v184Ev,
  (VTBL_ENTRY)&_ZN6S123C24v185Ev,
  (VTBL_ENTRY)&_ZN6S123C24v186Ev,
  (VTBL_ENTRY)&_ZN6S123C24v187Ev,
  (VTBL_ENTRY)&_ZN6S123C24v188Ev,
  (VTBL_ENTRY)&_ZN6S123C24v189Ev,
  (VTBL_ENTRY)&_ZN6S123C24v190Ev,
  (VTBL_ENTRY)&_ZN6S123C24v191Ev,
  (VTBL_ENTRY)&_ZN6S123C24v192Ev,
  (VTBL_ENTRY)&_ZN6S123C24v193Ev,
  (VTBL_ENTRY)&_ZN6S123C12v1Ev,
  (VTBL_ENTRY)&_ZN6S123C12v2Ev,
  (VTBL_ENTRY)&_ZN6S123C12v3Ev,
  (VTBL_ENTRY)&_ZN6S123C12v4Ev,
  (VTBL_ENTRY)&_ZN6S123C12v5Ev,
  (VTBL_ENTRY)&_ZN6S123C12v6Ev,
  (VTBL_ENTRY)&_ZN6S123C12v7Ev,
  (VTBL_ENTRY)&_ZN6S123C12v8Ev,
  (VTBL_ENTRY)&_ZN6S123C12v9Ev,
  (VTBL_ENTRY)&_ZN6S123C13v10Ev,
  (VTBL_ENTRY)&_ZN6S123C13v11Ev,
  (VTBL_ENTRY)&_ZN6S123C13v12Ev,
  (VTBL_ENTRY)&_ZN6S123C13v13Ev,
  (VTBL_ENTRY)&_ZN6S123C13v14Ev,
  (VTBL_ENTRY)&_ZN6S123C13v15Ev,
  (VTBL_ENTRY)&_ZN6S123C13v16Ev,
};
extern VTBL_ENTRY _ZTI6S123C1[];
extern  VTBL_ENTRY _ZTV6S123C1[];
Class_Descriptor cd_S123C1 = {  "S123C1", // class name
  bases_S123C1, 6,
  &(vtc_S123C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S123C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S123C1),197, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18C8  : S1C11_nt {
  virtual void  v4(); // _ZN5S18C82v4Ev
  virtual void  v5(); // _ZN5S18C82v5Ev
  virtual void  v6(); // _ZN5S18C82v6Ev
  virtual void  v7(); // _ZN5S18C82v7Ev
  virtual void  v8(); // _ZN5S18C82v8Ev
  virtual void  v9(); // _ZN5S18C82v9Ev
  virtual void  v10(); // _ZN5S18C83v10Ev
  virtual void  v11(); // _ZN5S18C83v11Ev
  virtual void  v12(); // _ZN5S18C83v12Ev
  virtual void  v13(); // _ZN5S18C83v13Ev
  virtual void  v14(); // _ZN5S18C83v14Ev
  virtual void  v15(); // _ZN5S18C83v15Ev
  virtual void  v16(); // _ZN5S18C83v16Ev
  virtual void  v17(); // _ZN5S18C83v17Ev
  virtual void  v18(); // _ZN5S18C83v18Ev
  virtual void  v19(); // _ZN5S18C83v19Ev
  virtual void  v20(); // _ZN5S18C83v20Ev
  virtual void  v21(); // _ZN5S18C83v21Ev
  virtual void  v22(); // _ZN5S18C83v22Ev
  virtual void  v23(); // _ZN5S18C83v23Ev
  virtual void  v24(); // _ZN5S18C83v24Ev
  virtual void  v25(); // _ZN5S18C83v25Ev
  virtual void  v26(); // _ZN5S18C83v26Ev
  virtual void  v27(); // _ZN5S18C83v27Ev
  virtual void  v28(); // _ZN5S18C83v28Ev
  virtual void  v29(); // _ZN5S18C83v29Ev
  virtual void  v30(); // _ZN5S18C83v30Ev
  virtual void  v31(); // _ZN5S18C83v31Ev
  virtual void  v32(); // _ZN5S18C83v32Ev
  virtual void  v33(); // _ZN5S18C83v33Ev
  virtual void  v34(); // _ZN5S18C83v34Ev
  virtual void  v35(); // _ZN5S18C83v35Ev
  virtual void  v36(); // _ZN5S18C83v36Ev
  virtual void  v37(); // _ZN5S18C83v37Ev
  virtual void  v38(); // _ZN5S18C83v38Ev
  virtual void  v39(); // _ZN5S18C83v39Ev
  virtual void  v40(); // _ZN5S18C83v40Ev
  virtual void  v41(); // _ZN5S18C83v41Ev
  virtual void  v42(); // _ZN5S18C83v42Ev
  virtual void  v43(); // _ZN5S18C83v43Ev
  virtual void  v44(); // _ZN5S18C83v44Ev
  virtual void  v45(); // _ZN5S18C83v45Ev
  virtual void  v46(); // _ZN5S18C83v46Ev
  virtual void  v47(); // _ZN5S18C83v47Ev
  virtual void  v48(); // _ZN5S18C83v48Ev
  virtual void  v49(); // _ZN5S18C83v49Ev
  virtual void  v50(); // _ZN5S18C83v50Ev
  virtual void  v51(); // _ZN5S18C83v51Ev
  virtual void  v52(); // _ZN5S18C83v52Ev
  virtual void  v53(); // _ZN5S18C83v53Ev
  virtual void  v54(); // _ZN5S18C83v54Ev
  virtual void  v55(); // _ZN5S18C83v55Ev
  virtual void  v56(); // _ZN5S18C83v56Ev
  virtual void  v57(); // _ZN5S18C83v57Ev
  virtual void  v58(); // _ZN5S18C83v58Ev
  virtual void  v59(); // _ZN5S18C83v59Ev
  virtual void  v60(); // _ZN5S18C83v60Ev
  virtual void  v61(); // _ZN5S18C83v61Ev
  virtual void  v62(); // _ZN5S18C83v62Ev
  virtual void  v63(); // _ZN5S18C83v63Ev
  virtual void  v64(); // _ZN5S18C83v64Ev
  virtual void  v65(); // _ZN5S18C83v65Ev
  virtual void  v66(); // _ZN5S18C83v66Ev
  virtual void  v67(); // _ZN5S18C83v67Ev
  virtual void  v68(); // _ZN5S18C83v68Ev
  virtual void  v69(); // _ZN5S18C83v69Ev
  virtual void  v70(); // _ZN5S18C83v70Ev
  virtual void  v71(); // _ZN5S18C83v71Ev
  virtual void  v72(); // _ZN5S18C83v72Ev
  virtual void  v73(); // _ZN5S18C83v73Ev
  virtual void  v74(); // _ZN5S18C83v74Ev
  virtual void  v75(); // _ZN5S18C83v75Ev
  virtual void  v76(); // _ZN5S18C83v76Ev
  virtual void  v77(); // _ZN5S18C83v77Ev
  virtual void  v78(); // _ZN5S18C83v78Ev
  virtual void  v79(); // _ZN5S18C83v79Ev
  virtual void  v80(); // _ZN5S18C83v80Ev
  virtual void  v81(); // _ZN5S18C83v81Ev
  virtual void  v82(); // _ZN5S18C83v82Ev
  virtual void  v83(); // _ZN5S18C83v83Ev
  virtual void  v84(); // _ZN5S18C83v84Ev
  virtual void  v85(); // _ZN5S18C83v85Ev
  virtual void  v86(); // _ZN5S18C83v86Ev
  virtual void  v87(); // _ZN5S18C83v87Ev
  virtual void  v88(); // _ZN5S18C83v88Ev
  virtual void  v89(); // _ZN5S18C83v89Ev
  virtual void  v90(); // _ZN5S18C83v90Ev
  virtual void  v91(); // _ZN5S18C83v91Ev
  virtual void  v92(); // _ZN5S18C83v92Ev
  virtual void  v93(); // _ZN5S18C83v93Ev
  virtual void  v94(); // _ZN5S18C83v94Ev
  virtual void  v95(); // _ZN5S18C83v95Ev
  virtual void  v96(); // _ZN5S18C83v96Ev
  virtual void  v97(); // _ZN5S18C83v97Ev
  virtual void  v98(); // _ZN5S18C83v98Ev
  virtual void  v99(); // _ZN5S18C83v99Ev
  virtual void  v100(); // _ZN5S18C84v100Ev
  virtual void  v101(); // _ZN5S18C84v101Ev
  virtual void  v102(); // _ZN5S18C84v102Ev
  virtual void  v103(); // _ZN5S18C84v103Ev
  virtual void  v104(); // _ZN5S18C84v104Ev
  virtual void  v105(); // _ZN5S18C84v105Ev
  virtual void  v106(); // _ZN5S18C84v106Ev
  virtual void  v107(); // _ZN5S18C84v107Ev
  virtual void  v108(); // _ZN5S18C84v108Ev
  virtual void  v109(); // _ZN5S18C84v109Ev
  virtual void  v110(); // _ZN5S18C84v110Ev
  ~S18C8(); // tgen
  S18C8(); // tgen
};
//SIG(-1 S18C8) C1{ BC2{ vd m Fp Fi} 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 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}


void  S18C8 ::v4(){vfunc_called(this, "_ZN5S18C82v4Ev");}
void  S18C8 ::v5(){vfunc_called(this, "_ZN5S18C82v5Ev");}
void  S18C8 ::v6(){vfunc_called(this, "_ZN5S18C82v6Ev");}
void  S18C8 ::v7(){vfunc_called(this, "_ZN5S18C82v7Ev");}
void  S18C8 ::v8(){vfunc_called(this, "_ZN5S18C82v8Ev");}
void  S18C8 ::v9(){vfunc_called(this, "_ZN5S18C82v9Ev");}
void  S18C8 ::v10(){vfunc_called(this, "_ZN5S18C83v10Ev");}
void  S18C8 ::v11(){vfunc_called(this, "_ZN5S18C83v11Ev");}
void  S18C8 ::v12(){vfunc_called(this, "_ZN5S18C83v12Ev");}
void  S18C8 ::v13(){vfunc_called(this, "_ZN5S18C83v13Ev");}
void  S18C8 ::v14(){vfunc_called(this, "_ZN5S18C83v14Ev");}
void  S18C8 ::v15(){vfunc_called(this, "_ZN5S18C83v15Ev");}
void  S18C8 ::v16(){vfunc_called(this, "_ZN5S18C83v16Ev");}
void  S18C8 ::v17(){vfunc_called(this, "_ZN5S18C83v17Ev");}
void  S18C8 ::v18(){vfunc_called(this, "_ZN5S18C83v18Ev");}
void  S18C8 ::v19(){vfunc_called(this, "_ZN5S18C83v19Ev");}
void  S18C8 ::v20(){vfunc_called(this, "_ZN5S18C83v20Ev");}
void  S18C8 ::v21(){vfunc_called(this, "_ZN5S18C83v21Ev");}
void  S18C8 ::v22(){vfunc_called(this, "_ZN5S18C83v22Ev");}
void  S18C8 ::v23(){vfunc_called(this, "_ZN5S18C83v23Ev");}
void  S18C8 ::v24(){vfunc_called(this, "_ZN5S18C83v24Ev");}
void  S18C8 ::v25(){vfunc_called(this, "_ZN5S18C83v25Ev");}
void  S18C8 ::v26(){vfunc_called(this, "_ZN5S18C83v26Ev");}
void  S18C8 ::v27(){vfunc_called(this, "_ZN5S18C83v27Ev");}
void  S18C8 ::v28(){vfunc_called(this, "_ZN5S18C83v28Ev");}
void  S18C8 ::v29(){vfunc_called(this, "_ZN5S18C83v29Ev");}
void  S18C8 ::v30(){vfunc_called(this, "_ZN5S18C83v30Ev");}
void  S18C8 ::v31(){vfunc_called(this, "_ZN5S18C83v31Ev");}
void  S18C8 ::v32(){vfunc_called(this, "_ZN5S18C83v32Ev");}
void  S18C8 ::v33(){vfunc_called(this, "_ZN5S18C83v33Ev");}
void  S18C8 ::v34(){vfunc_called(this, "_ZN5S18C83v34Ev");}
void  S18C8 ::v35(){vfunc_called(this, "_ZN5S18C83v35Ev");}
void  S18C8 ::v36(){vfunc_called(this, "_ZN5S18C83v36Ev");}
void  S18C8 ::v37(){vfunc_called(this, "_ZN5S18C83v37Ev");}
void  S18C8 ::v38(){vfunc_called(this, "_ZN5S18C83v38Ev");}
void  S18C8 ::v39(){vfunc_called(this, "_ZN5S18C83v39Ev");}
void  S18C8 ::v40(){vfunc_called(this, "_ZN5S18C83v40Ev");}
void  S18C8 ::v41(){vfunc_called(this, "_ZN5S18C83v41Ev");}
void  S18C8 ::v42(){vfunc_called(this, "_ZN5S18C83v42Ev");}
void  S18C8 ::v43(){vfunc_called(this, "_ZN5S18C83v43Ev");}
void  S18C8 ::v44(){vfunc_called(this, "_ZN5S18C83v44Ev");}
void  S18C8 ::v45(){vfunc_called(this, "_ZN5S18C83v45Ev");}
void  S18C8 ::v46(){vfunc_called(this, "_ZN5S18C83v46Ev");}
void  S18C8 ::v47(){vfunc_called(this, "_ZN5S18C83v47Ev");}
void  S18C8 ::v48(){vfunc_called(this, "_ZN5S18C83v48Ev");}
void  S18C8 ::v49(){vfunc_called(this, "_ZN5S18C83v49Ev");}
void  S18C8 ::v50(){vfunc_called(this, "_ZN5S18C83v50Ev");}
void  S18C8 ::v51(){vfunc_called(this, "_ZN5S18C83v51Ev");}
void  S18C8 ::v52(){vfunc_called(this, "_ZN5S18C83v52Ev");}
void  S18C8 ::v53(){vfunc_called(this, "_ZN5S18C83v53Ev");}
void  S18C8 ::v54(){vfunc_called(this, "_ZN5S18C83v54Ev");}
void  S18C8 ::v55(){vfunc_called(this, "_ZN5S18C83v55Ev");}
void  S18C8 ::v56(){vfunc_called(this, "_ZN5S18C83v56Ev");}
void  S18C8 ::v57(){vfunc_called(this, "_ZN5S18C83v57Ev");}
void  S18C8 ::v58(){vfunc_called(this, "_ZN5S18C83v58Ev");}
void  S18C8 ::v59(){vfunc_called(this, "_ZN5S18C83v59Ev");}
void  S18C8 ::v60(){vfunc_called(this, "_ZN5S18C83v60Ev");}
void  S18C8 ::v61(){vfunc_called(this, "_ZN5S18C83v61Ev");}
void  S18C8 ::v62(){vfunc_called(this, "_ZN5S18C83v62Ev");}
void  S18C8 ::v63(){vfunc_called(this, "_ZN5S18C83v63Ev");}
void  S18C8 ::v64(){vfunc_called(this, "_ZN5S18C83v64Ev");}
void  S18C8 ::v65(){vfunc_called(this, "_ZN5S18C83v65Ev");}
void  S18C8 ::v66(){vfunc_called(this, "_ZN5S18C83v66Ev");}
void  S18C8 ::v67(){vfunc_called(this, "_ZN5S18C83v67Ev");}
void  S18C8 ::v68(){vfunc_called(this, "_ZN5S18C83v68Ev");}
void  S18C8 ::v69(){vfunc_called(this, "_ZN5S18C83v69Ev");}
void  S18C8 ::v70(){vfunc_called(this, "_ZN5S18C83v70Ev");}
void  S18C8 ::v71(){vfunc_called(this, "_ZN5S18C83v71Ev");}
void  S18C8 ::v72(){vfunc_called(this, "_ZN5S18C83v72Ev");}
void  S18C8 ::v73(){vfunc_called(this, "_ZN5S18C83v73Ev");}
void  S18C8 ::v74(){vfunc_called(this, "_ZN5S18C83v74Ev");}
void  S18C8 ::v75(){vfunc_called(this, "_ZN5S18C83v75Ev");}
void  S18C8 ::v76(){vfunc_called(this, "_ZN5S18C83v76Ev");}
void  S18C8 ::v77(){vfunc_called(this, "_ZN5S18C83v77Ev");}
void  S18C8 ::v78(){vfunc_called(this, "_ZN5S18C83v78Ev");}
void  S18C8 ::v79(){vfunc_called(this, "_ZN5S18C83v79Ev");}
void  S18C8 ::v80(){vfunc_called(this, "_ZN5S18C83v80Ev");}
void  S18C8 ::v81(){vfunc_called(this, "_ZN5S18C83v81Ev");}
void  S18C8 ::v82(){vfunc_called(this, "_ZN5S18C83v82Ev");}
void  S18C8 ::v83(){vfunc_called(this, "_ZN5S18C83v83Ev");}
void  S18C8 ::v84(){vfunc_called(this, "_ZN5S18C83v84Ev");}
void  S18C8 ::v85(){vfunc_called(this, "_ZN5S18C83v85Ev");}
void  S18C8 ::v86(){vfunc_called(this, "_ZN5S18C83v86Ev");}
void  S18C8 ::v87(){vfunc_called(this, "_ZN5S18C83v87Ev");}
void  S18C8 ::v88(){vfunc_called(this, "_ZN5S18C83v88Ev");}
void  S18C8 ::v89(){vfunc_called(this, "_ZN5S18C83v89Ev");}
void  S18C8 ::v90(){vfunc_called(this, "_ZN5S18C83v90Ev");}
void  S18C8 ::v91(){vfunc_called(this, "_ZN5S18C83v91Ev");}
void  S18C8 ::v92(){vfunc_called(this, "_ZN5S18C83v92Ev");}
void  S18C8 ::v93(){vfunc_called(this, "_ZN5S18C83v93Ev");}
void  S18C8 ::v94(){vfunc_called(this, "_ZN5S18C83v94Ev");}
void  S18C8 ::v95(){vfunc_called(this, "_ZN5S18C83v95Ev");}
void  S18C8 ::v96(){vfunc_called(this, "_ZN5S18C83v96Ev");}
void  S18C8 ::v97(){vfunc_called(this, "_ZN5S18C83v97Ev");}
void  S18C8 ::v98(){vfunc_called(this, "_ZN5S18C83v98Ev");}
void  S18C8 ::v99(){vfunc_called(this, "_ZN5S18C83v99Ev");}
void  S18C8 ::v100(){vfunc_called(this, "_ZN5S18C84v100Ev");}
void  S18C8 ::v101(){vfunc_called(this, "_ZN5S18C84v101Ev");}
void  S18C8 ::v102(){vfunc_called(this, "_ZN5S18C84v102Ev");}
void  S18C8 ::v103(){vfunc_called(this, "_ZN5S18C84v103Ev");}
void  S18C8 ::v104(){vfunc_called(this, "_ZN5S18C84v104Ev");}
void  S18C8 ::v105(){vfunc_called(this, "_ZN5S18C84v105Ev");}
void  S18C8 ::v106(){vfunc_called(this, "_ZN5S18C84v106Ev");}
void  S18C8 ::v107(){vfunc_called(this, "_ZN5S18C84v107Ev");}
void  S18C8 ::v108(){vfunc_called(this, "_ZN5S18C84v108Ev");}
void  S18C8 ::v109(){vfunc_called(this, "_ZN5S18C84v109Ev");}
void  S18C8 ::v110(){vfunc_called(this, "_ZN5S18C84v110Ev");}
S18C8 ::~S18C8(){ note_dtor("S18C8", this);} // tgen
S18C8 ::S18C8(){ note_ctor("S18C8", this);} // tgen

static void Test_S18C8()
{
  extern Class_Descriptor cd_S18C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18C8, buf);
    S18C8 *dp, &lv = *(dp=new (buf) S18C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18C8)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S18C8");
    test_class_info(&lv, &cd_S18C8);
    dp->~S18C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18C8(Test_S18C8, "S18C8", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S18C8C1Ev();
extern void _ZN5S18C8D1Ev();
Name_Map name_map_S18C8[] = {
  NSPAIR(_ZN5S18C8C1Ev),
  NSPAIR(_ZN5S18C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S18C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI5S18C8[];
extern void _ZN5S18C8D1Ev();
extern void _ZN5S18C8D0Ev();
extern void _ZN5S18C82v4Ev();
extern void _ZN5S18C82v5Ev();
extern void _ZN5S18C82v6Ev();
extern void _ZN5S18C82v7Ev();
extern void _ZN5S18C82v8Ev();
extern void _ZN5S18C82v9Ev();
extern void _ZN5S18C83v10Ev();
extern void _ZN5S18C83v11Ev();
extern void _ZN5S18C83v12Ev();
extern void _ZN5S18C83v13Ev();
extern void _ZN5S18C83v14Ev();
extern void _ZN5S18C83v15Ev();
extern void _ZN5S18C83v16Ev();
extern void _ZN5S18C83v17Ev();
extern void _ZN5S18C83v18Ev();
extern void _ZN5S18C83v19Ev();
extern void _ZN5S18C83v20Ev();
extern void _ZN5S18C83v21Ev();
extern void _ZN5S18C83v22Ev();
extern void _ZN5S18C83v23Ev();
extern void _ZN5S18C83v24Ev();
extern void _ZN5S18C83v25Ev();
extern void _ZN5S18C83v26Ev();
extern void _ZN5S18C83v27Ev();
extern void _ZN5S18C83v28Ev();
extern void _ZN5S18C83v29Ev();
extern void _ZN5S18C83v30Ev();
extern void _ZN5S18C83v31Ev();
extern void _ZN5S18C83v32Ev();
extern void _ZN5S18C83v33Ev();
extern void _ZN5S18C83v34Ev();
extern void _ZN5S18C83v35Ev();
extern void _ZN5S18C83v36Ev();
extern void _ZN5S18C83v37Ev();
extern void _ZN5S18C83v38Ev();
extern void _ZN5S18C83v39Ev();
extern void _ZN5S18C83v40Ev();
extern void _ZN5S18C83v41Ev();
extern void _ZN5S18C83v42Ev();
extern void _ZN5S18C83v43Ev();
extern void _ZN5S18C83v44Ev();
extern void _ZN5S18C83v45Ev();
extern void _ZN5S18C83v46Ev();
extern void _ZN5S18C83v47Ev();
extern void _ZN5S18C83v48Ev();
extern void _ZN5S18C83v49Ev();
extern void _ZN5S18C83v50Ev();
extern void _ZN5S18C83v51Ev();
extern void _ZN5S18C83v52Ev();
extern void _ZN5S18C83v53Ev();
extern void _ZN5S18C83v54Ev();
extern void _ZN5S18C83v55Ev();
extern void _ZN5S18C83v56Ev();
extern void _ZN5S18C83v57Ev();
extern void _ZN5S18C83v58Ev();
extern void _ZN5S18C83v59Ev();
extern void _ZN5S18C83v60Ev();
extern void _ZN5S18C83v61Ev();
extern void _ZN5S18C83v62Ev();
extern void _ZN5S18C83v63Ev();
extern void _ZN5S18C83v64Ev();
extern void _ZN5S18C83v65Ev();
extern void _ZN5S18C83v66Ev();
extern void _ZN5S18C83v67Ev();
extern void _ZN5S18C83v68Ev();
extern void _ZN5S18C83v69Ev();
extern void _ZN5S18C83v70Ev();
extern void _ZN5S18C83v71Ev();
extern void _ZN5S18C83v72Ev();
extern void _ZN5S18C83v73Ev();
extern void _ZN5S18C83v74Ev();
extern void _ZN5S18C83v75Ev();
extern void _ZN5S18C83v76Ev();
extern void _ZN5S18C83v77Ev();
extern void _ZN5S18C83v78Ev();
extern void _ZN5S18C83v79Ev();
extern void _ZN5S18C83v80Ev();
extern void _ZN5S18C83v81Ev();
extern void _ZN5S18C83v82Ev();
extern void _ZN5S18C83v83Ev();
extern void _ZN5S18C83v84Ev();
extern void _ZN5S18C83v85Ev();
extern void _ZN5S18C83v86Ev();
extern void _ZN5S18C83v87Ev();
extern void _ZN5S18C83v88Ev();
extern void _ZN5S18C83v89Ev();
extern void _ZN5S18C83v90Ev();
extern void _ZN5S18C83v91Ev();
extern void _ZN5S18C83v92Ev();
extern void _ZN5S18C83v93Ev();
extern void _ZN5S18C83v94Ev();
extern void _ZN5S18C83v95Ev();
extern void _ZN5S18C83v96Ev();
extern void _ZN5S18C83v97Ev();
extern void _ZN5S18C83v98Ev();
extern void _ZN5S18C83v99Ev();
extern void _ZN5S18C84v100Ev();
extern void _ZN5S18C84v101Ev();
extern void _ZN5S18C84v102Ev();
extern void _ZN5S18C84v103Ev();
extern void _ZN5S18C84v104Ev();
extern void _ZN5S18C84v105Ev();
extern void _ZN5S18C84v106Ev();
extern void _ZN5S18C84v107Ev();
extern void _ZN5S18C84v108Ev();
extern void _ZN5S18C84v109Ev();
extern void _ZN5S18C84v110Ev();
static  VTBL_ENTRY vtc_S18C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S18C8[0]),
  (VTBL_ENTRY)&_ZN5S18C8D1Ev,
  (VTBL_ENTRY)&_ZN5S18C8D0Ev,
  (VTBL_ENTRY)&_ZN5S18C82v4Ev,
  (VTBL_ENTRY)&_ZN5S18C82v5Ev,
  (VTBL_ENTRY)&_ZN5S18C82v6Ev,
  (VTBL_ENTRY)&_ZN5S18C82v7Ev,
  (VTBL_ENTRY)&_ZN5S18C82v8Ev,
  (VTBL_ENTRY)&_ZN5S18C82v9Ev,
  (VTBL_ENTRY)&_ZN5S18C83v10Ev,
  (VTBL_ENTRY)&_ZN5S18C83v11Ev,
  (VTBL_ENTRY)&_ZN5S18C83v12Ev,
  (VTBL_ENTRY)&_ZN5S18C83v13Ev,
  (VTBL_ENTRY)&_ZN5S18C83v14Ev,
  (VTBL_ENTRY)&_ZN5S18C83v15Ev,
  (VTBL_ENTRY)&_ZN5S18C83v16Ev,
  (VTBL_ENTRY)&_ZN5S18C83v17Ev,
  (VTBL_ENTRY)&_ZN5S18C83v18Ev,
  (VTBL_ENTRY)&_ZN5S18C83v19Ev,
  (VTBL_ENTRY)&_ZN5S18C83v20Ev,
  (VTBL_ENTRY)&_ZN5S18C83v21Ev,
  (VTBL_ENTRY)&_ZN5S18C83v22Ev,
  (VTBL_ENTRY)&_ZN5S18C83v23Ev,
  (VTBL_ENTRY)&_ZN5S18C83v24Ev,
  (VTBL_ENTRY)&_ZN5S18C83v25Ev,
  (VTBL_ENTRY)&_ZN5S18C83v26Ev,
  (VTBL_ENTRY)&_ZN5S18C83v27Ev,
  (VTBL_ENTRY)&_ZN5S18C83v28Ev,
  (VTBL_ENTRY)&_ZN5S18C83v29Ev,
  (VTBL_ENTRY)&_ZN5S18C83v30Ev,
  (VTBL_ENTRY)&_ZN5S18C83v31Ev,
  (VTBL_ENTRY)&_ZN5S18C83v32Ev,
  (VTBL_ENTRY)&_ZN5S18C83v33Ev,
  (VTBL_ENTRY)&_ZN5S18C83v34Ev,
  (VTBL_ENTRY)&_ZN5S18C83v35Ev,
  (VTBL_ENTRY)&_ZN5S18C83v36Ev,
  (VTBL_ENTRY)&_ZN5S18C83v37Ev,
  (VTBL_ENTRY)&_ZN5S18C83v38Ev,
  (VTBL_ENTRY)&_ZN5S18C83v39Ev,
  (VTBL_ENTRY)&_ZN5S18C83v40Ev,
  (VTBL_ENTRY)&_ZN5S18C83v41Ev,
  (VTBL_ENTRY)&_ZN5S18C83v42Ev,
  (VTBL_ENTRY)&_ZN5S18C83v43Ev,
  (VTBL_ENTRY)&_ZN5S18C83v44Ev,
  (VTBL_ENTRY)&_ZN5S18C83v45Ev,
  (VTBL_ENTRY)&_ZN5S18C83v46Ev,
  (VTBL_ENTRY)&_ZN5S18C83v47Ev,
  (VTBL_ENTRY)&_ZN5S18C83v48Ev,
  (VTBL_ENTRY)&_ZN5S18C83v49Ev,
  (VTBL_ENTRY)&_ZN5S18C83v50Ev,
  (VTBL_ENTRY)&_ZN5S18C83v51Ev,
  (VTBL_ENTRY)&_ZN5S18C83v52Ev,
  (VTBL_ENTRY)&_ZN5S18C83v53Ev,
  (VTBL_ENTRY)&_ZN5S18C83v54Ev,
  (VTBL_ENTRY)&_ZN5S18C83v55Ev,
  (VTBL_ENTRY)&_ZN5S18C83v56Ev,
  (VTBL_ENTRY)&_ZN5S18C83v57Ev,
  (VTBL_ENTRY)&_ZN5S18C83v58Ev,
  (VTBL_ENTRY)&_ZN5S18C83v59Ev,
  (VTBL_ENTRY)&_ZN5S18C83v60Ev,
  (VTBL_ENTRY)&_ZN5S18C83v61Ev,
  (VTBL_ENTRY)&_ZN5S18C83v62Ev,
  (VTBL_ENTRY)&_ZN5S18C83v63Ev,
  (VTBL_ENTRY)&_ZN5S18C83v64Ev,
  (VTBL_ENTRY)&_ZN5S18C83v65Ev,
  (VTBL_ENTRY)&_ZN5S18C83v66Ev,
  (VTBL_ENTRY)&_ZN5S18C83v67Ev,
  (VTBL_ENTRY)&_ZN5S18C83v68Ev,
  (VTBL_ENTRY)&_ZN5S18C83v69Ev,
  (VTBL_ENTRY)&_ZN5S18C83v70Ev,
  (VTBL_ENTRY)&_ZN5S18C83v71Ev,
  (VTBL_ENTRY)&_ZN5S18C83v72Ev,
  (VTBL_ENTRY)&_ZN5S18C83v73Ev,
  (VTBL_ENTRY)&_ZN5S18C83v74Ev,
  (VTBL_ENTRY)&_ZN5S18C83v75Ev,
  (VTBL_ENTRY)&_ZN5S18C83v76Ev,
  (VTBL_ENTRY)&_ZN5S18C83v77Ev,
  (VTBL_ENTRY)&_ZN5S18C83v78Ev,
  (VTBL_ENTRY)&_ZN5S18C83v79Ev,
  (VTBL_ENTRY)&_ZN5S18C83v80Ev,
  (VTBL_ENTRY)&_ZN5S18C83v81Ev,
  (VTBL_ENTRY)&_ZN5S18C83v82Ev,
  (VTBL_ENTRY)&_ZN5S18C83v83Ev,
  (VTBL_ENTRY)&_ZN5S18C83v84Ev,
  (VTBL_ENTRY)&_ZN5S18C83v85Ev,
  (VTBL_ENTRY)&_ZN5S18C83v86Ev,
  (VTBL_ENTRY)&_ZN5S18C83v87Ev,
  (VTBL_ENTRY)&_ZN5S18C83v88Ev,
  (VTBL_ENTRY)&_ZN5S18C83v89Ev,
  (VTBL_ENTRY)&_ZN5S18C83v90Ev,
  (VTBL_ENTRY)&_ZN5S18C83v91Ev,
  (VTBL_ENTRY)&_ZN5S18C83v92Ev,
  (VTBL_ENTRY)&_ZN5S18C83v93Ev,
  (VTBL_ENTRY)&_ZN5S18C83v94Ev,
  (VTBL_ENTRY)&_ZN5S18C83v95Ev,
  (VTBL_ENTRY)&_ZN5S18C83v96Ev,
  (VTBL_ENTRY)&_ZN5S18C83v97Ev,
  (VTBL_ENTRY)&_ZN5S18C83v98Ev,
  (VTBL_ENTRY)&_ZN5S18C83v99Ev,
  (VTBL_ENTRY)&_ZN5S18C84v100Ev,
  (VTBL_ENTRY)&_ZN5S18C84v101Ev,
  (VTBL_ENTRY)&_ZN5S18C84v102Ev,
  (VTBL_ENTRY)&_ZN5S18C84v103Ev,
  (VTBL_ENTRY)&_ZN5S18C84v104Ev,
  (VTBL_ENTRY)&_ZN5S18C84v105Ev,
  (VTBL_ENTRY)&_ZN5S18C84v106Ev,
  (VTBL_ENTRY)&_ZN5S18C84v107Ev,
  (VTBL_ENTRY)&_ZN5S18C84v108Ev,
  (VTBL_ENTRY)&_ZN5S18C84v109Ev,
  (VTBL_ENTRY)&_ZN5S18C84v110Ev,
};
extern VTBL_ENTRY _ZTI5S18C8[];
extern  VTBL_ENTRY _ZTV5S18C8[];
Class_Descriptor cd_S18C8 = {  "S18C8", // class name
  bases_S18C8, 1,
  &(vtc_S18C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S18C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S18C8),111, //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  S18C7  : S18C8 {
  ~S18C7(); // tgen
  S18C7(); // tgen
};
//SIG(-1 S18C7) C1{ BC2{ BC3{ vd m Fp Fi} 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 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}}


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

static void Test_S18C7()
{
  extern Class_Descriptor cd_S18C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18C7, buf);
    S18C7 *dp, &lv = *(dp=new (buf) S18C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18C7)");
    check_base_class_offset(lv, (S1C11_nt*)(S18C8*), 0, "S18C7");
    check_base_class_offset(lv, (S18C8*), 0, "S18C7");
    test_class_info(&lv, &cd_S18C7);
    dp->~S18C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18C7(Test_S18C7, "S18C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S18C7C1Ev();
extern void _ZN5S18C7D1Ev();
Name_Map name_map_S18C7[] = {
  NSPAIR(_ZN5S18C7C1Ev),
  NSPAIR(_ZN5S18C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S18C8;
extern VTBL_ENTRY _ZTI5S18C8[];
extern  VTBL_ENTRY _ZTV5S18C8[];
static Base_Class bases_S18C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S18C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S18C7[];
extern void _ZN5S18C7D1Ev();
extern void _ZN5S18C7D0Ev();
extern void _ZN5S18C82v4Ev();
extern void _ZN5S18C82v5Ev();
extern void _ZN5S18C82v6Ev();
extern void _ZN5S18C82v7Ev();
extern void _ZN5S18C82v8Ev();
extern void _ZN5S18C82v9Ev();
extern void _ZN5S18C83v10Ev();
extern void _ZN5S18C83v11Ev();
extern void _ZN5S18C83v12Ev();
extern void _ZN5S18C83v13Ev();
extern void _ZN5S18C83v14Ev();
extern void _ZN5S18C83v15Ev();
extern void _ZN5S18C83v16Ev();
extern void _ZN5S18C83v17Ev();
extern void _ZN5S18C83v18Ev();
extern void _ZN5S18C83v19Ev();
extern void _ZN5S18C83v20Ev();
extern void _ZN5S18C83v21Ev();
extern void _ZN5S18C83v22Ev();
extern void _ZN5S18C83v23Ev();
extern void _ZN5S18C83v24Ev();
extern void _ZN5S18C83v25Ev();
extern void _ZN5S18C83v26Ev();
extern void _ZN5S18C83v27Ev();
extern void _ZN5S18C83v28Ev();
extern void _ZN5S18C83v29Ev();
extern void _ZN5S18C83v30Ev();
extern void _ZN5S18C83v31Ev();
extern void _ZN5S18C83v32Ev();
extern void _ZN5S18C83v33Ev();
extern void _ZN5S18C83v34Ev();
extern void _ZN5S18C83v35Ev();
extern void _ZN5S18C83v36Ev();
extern void _ZN5S18C83v37Ev();
extern void _ZN5S18C83v38Ev();
extern void _ZN5S18C83v39Ev();
extern void _ZN5S18C83v40Ev();
extern void _ZN5S18C83v41Ev();
extern void _ZN5S18C83v42Ev();
extern void _ZN5S18C83v43Ev();
extern void _ZN5S18C83v44Ev();
extern void _ZN5S18C83v45Ev();
extern void _ZN5S18C83v46Ev();
extern void _ZN5S18C83v47Ev();
extern void _ZN5S18C83v48Ev();
extern void _ZN5S18C83v49Ev();
extern void _ZN5S18C83v50Ev();
extern void _ZN5S18C83v51Ev();
extern void _ZN5S18C83v52Ev();
extern void _ZN5S18C83v53Ev();
extern void _ZN5S18C83v54Ev();
extern void _ZN5S18C83v55Ev();
extern void _ZN5S18C83v56Ev();
extern void _ZN5S18C83v57Ev();
extern void _ZN5S18C83v58Ev();
extern void _ZN5S18C83v59Ev();
extern void _ZN5S18C83v60Ev();
extern void _ZN5S18C83v61Ev();
extern void _ZN5S18C83v62Ev();
extern void _ZN5S18C83v63Ev();
extern void _ZN5S18C83v64Ev();
extern void _ZN5S18C83v65Ev();
extern void _ZN5S18C83v66Ev();
extern void _ZN5S18C83v67Ev();
extern void _ZN5S18C83v68Ev();
extern void _ZN5S18C83v69Ev();
extern void _ZN5S18C83v70Ev();
extern void _ZN5S18C83v71Ev();
extern void _ZN5S18C83v72Ev();
extern void _ZN5S18C83v73Ev();
extern void _ZN5S18C83v74Ev();
extern void _ZN5S18C83v75Ev();
extern void _ZN5S18C83v76Ev();
extern void _ZN5S18C83v77Ev();
extern void _ZN5S18C83v78Ev();
extern void _ZN5S18C83v79Ev();
extern void _ZN5S18C83v80Ev();
extern void _ZN5S18C83v81Ev();
extern void _ZN5S18C83v82Ev();
extern void _ZN5S18C83v83Ev();
extern void _ZN5S18C83v84Ev();
extern void _ZN5S18C83v85Ev();
extern void _ZN5S18C83v86Ev();
extern void _ZN5S18C83v87Ev();
extern void _ZN5S18C83v88Ev();
extern void _ZN5S18C83v89Ev();
extern void _ZN5S18C83v90Ev();
extern void _ZN5S18C83v91Ev();
extern void _ZN5S18C83v92Ev();
extern void _ZN5S18C83v93Ev();
extern void _ZN5S18C83v94Ev();
extern void _ZN5S18C83v95Ev();
extern void _ZN5S18C83v96Ev();
extern void _ZN5S18C83v97Ev();
extern void _ZN5S18C83v98Ev();
extern void _ZN5S18C83v99Ev();
extern void _ZN5S18C84v100Ev();
extern void _ZN5S18C84v101Ev();
extern void _ZN5S18C84v102Ev();
extern void _ZN5S18C84v103Ev();
extern void _ZN5S18C84v104Ev();
extern void _ZN5S18C84v105Ev();
extern void _ZN5S18C84v106Ev();
extern void _ZN5S18C84v107Ev();
extern void _ZN5S18C84v108Ev();
extern void _ZN5S18C84v109Ev();
extern void _ZN5S18C84v110Ev();
static  VTBL_ENTRY vtc_S18C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S18C7[0]),
  (VTBL_ENTRY)&_ZN5S18C7D1Ev,
  (VTBL_ENTRY)&_ZN5S18C7D0Ev,
  (VTBL_ENTRY)&_ZN5S18C82v4Ev,
  (VTBL_ENTRY)&_ZN5S18C82v5Ev,
  (VTBL_ENTRY)&_ZN5S18C82v6Ev,
  (VTBL_ENTRY)&_ZN5S18C82v7Ev,
  (VTBL_ENTRY)&_ZN5S18C82v8Ev,
  (VTBL_ENTRY)&_ZN5S18C82v9Ev,
  (VTBL_ENTRY)&_ZN5S18C83v10Ev,
  (VTBL_ENTRY)&_ZN5S18C83v11Ev,
  (VTBL_ENTRY)&_ZN5S18C83v12Ev,
  (VTBL_ENTRY)&_ZN5S18C83v13Ev,
  (VTBL_ENTRY)&_ZN5S18C83v14Ev,
  (VTBL_ENTRY)&_ZN5S18C83v15Ev,
  (VTBL_ENTRY)&_ZN5S18C83v16Ev,
  (VTBL_ENTRY)&_ZN5S18C83v17Ev,
  (VTBL_ENTRY)&_ZN5S18C83v18Ev,
  (VTBL_ENTRY)&_ZN5S18C83v19Ev,
  (VTBL_ENTRY)&_ZN5S18C83v20Ev,
  (VTBL_ENTRY)&_ZN5S18C83v21Ev,
  (VTBL_ENTRY)&_ZN5S18C83v22Ev,
  (VTBL_ENTRY)&_ZN5S18C83v23Ev,
  (VTBL_ENTRY)&_ZN5S18C83v24Ev,
  (VTBL_ENTRY)&_ZN5S18C83v25Ev,
  (VTBL_ENTRY)&_ZN5S18C83v26Ev,
  (VTBL_ENTRY)&_ZN5S18C83v27Ev,
  (VTBL_ENTRY)&_ZN5S18C83v28Ev,
  (VTBL_ENTRY)&_ZN5S18C83v29Ev,
  (VTBL_ENTRY)&_ZN5S18C83v30Ev,
  (VTBL_ENTRY)&_ZN5S18C83v31Ev,
  (VTBL_ENTRY)&_ZN5S18C83v32Ev,
  (VTBL_ENTRY)&_ZN5S18C83v33Ev,
  (VTBL_ENTRY)&_ZN5S18C83v34Ev,
  (VTBL_ENTRY)&_ZN5S18C83v35Ev,
  (VTBL_ENTRY)&_ZN5S18C83v36Ev,
  (VTBL_ENTRY)&_ZN5S18C83v37Ev,
  (VTBL_ENTRY)&_ZN5S18C83v38Ev,
  (VTBL_ENTRY)&_ZN5S18C83v39Ev,
  (VTBL_ENTRY)&_ZN5S18C83v40Ev,
  (VTBL_ENTRY)&_ZN5S18C83v41Ev,
  (VTBL_ENTRY)&_ZN5S18C83v42Ev,
  (VTBL_ENTRY)&_ZN5S18C83v43Ev,
  (VTBL_ENTRY)&_ZN5S18C83v44Ev,
  (VTBL_ENTRY)&_ZN5S18C83v45Ev,
  (VTBL_ENTRY)&_ZN5S18C83v46Ev,
  (VTBL_ENTRY)&_ZN5S18C83v47Ev,
  (VTBL_ENTRY)&_ZN5S18C83v48Ev,
  (VTBL_ENTRY)&_ZN5S18C83v49Ev,
  (VTBL_ENTRY)&_ZN5S18C83v50Ev,
  (VTBL_ENTRY)&_ZN5S18C83v51Ev,
  (VTBL_ENTRY)&_ZN5S18C83v52Ev,
  (VTBL_ENTRY)&_ZN5S18C83v53Ev,
  (VTBL_ENTRY)&_ZN5S18C83v54Ev,
  (VTBL_ENTRY)&_ZN5S18C83v55Ev,
  (VTBL_ENTRY)&_ZN5S18C83v56Ev,
  (VTBL_ENTRY)&_ZN5S18C83v57Ev,
  (VTBL_ENTRY)&_ZN5S18C83v58Ev,
  (VTBL_ENTRY)&_ZN5S18C83v59Ev,
  (VTBL_ENTRY)&_ZN5S18C83v60Ev,
  (VTBL_ENTRY)&_ZN5S18C83v61Ev,
  (VTBL_ENTRY)&_ZN5S18C83v62Ev,
  (VTBL_ENTRY)&_ZN5S18C83v63Ev,
  (VTBL_ENTRY)&_ZN5S18C83v64Ev,
  (VTBL_ENTRY)&_ZN5S18C83v65Ev,
  (VTBL_ENTRY)&_ZN5S18C83v66Ev,
  (VTBL_ENTRY)&_ZN5S18C83v67Ev,
  (VTBL_ENTRY)&_ZN5S18C83v68Ev,
  (VTBL_ENTRY)&_ZN5S18C83v69Ev,
  (VTBL_ENTRY)&_ZN5S18C83v70Ev,
  (VTBL_ENTRY)&_ZN5S18C83v71Ev,
  (VTBL_ENTRY)&_ZN5S18C83v72Ev,
  (VTBL_ENTRY)&_ZN5S18C83v73Ev,
  (VTBL_ENTRY)&_ZN5S18C83v74Ev,
  (VTBL_ENTRY)&_ZN5S18C83v75Ev,
  (VTBL_ENTRY)&_ZN5S18C83v76Ev,
  (VTBL_ENTRY)&_ZN5S18C83v77Ev,
  (VTBL_ENTRY)&_ZN5S18C83v78Ev,
  (VTBL_ENTRY)&_ZN5S18C83v79Ev,
  (VTBL_ENTRY)&_ZN5S18C83v80Ev,
  (VTBL_ENTRY)&_ZN5S18C83v81Ev,
  (VTBL_ENTRY)&_ZN5S18C83v82Ev,
  (VTBL_ENTRY)&_ZN5S18C83v83Ev,
  (VTBL_ENTRY)&_ZN5S18C83v84Ev,
  (VTBL_ENTRY)&_ZN5S18C83v85Ev,
  (VTBL_ENTRY)&_ZN5S18C83v86Ev,
  (VTBL_ENTRY)&_ZN5S18C83v87Ev,
  (VTBL_ENTRY)&_ZN5S18C83v88Ev,
  (VTBL_ENTRY)&_ZN5S18C83v89Ev,
  (VTBL_ENTRY)&_ZN5S18C83v90Ev,
  (VTBL_ENTRY)&_ZN5S18C83v91Ev,
  (VTBL_ENTRY)&_ZN5S18C83v92Ev,
  (VTBL_ENTRY)&_ZN5S18C83v93Ev,
  (VTBL_ENTRY)&_ZN5S18C83v94Ev,
  (VTBL_ENTRY)&_ZN5S18C83v95Ev,
  (VTBL_ENTRY)&_ZN5S18C83v96Ev,
  (VTBL_ENTRY)&_ZN5S18C83v97Ev,
  (VTBL_ENTRY)&_ZN5S18C83v98Ev,
  (VTBL_ENTRY)&_ZN5S18C83v99Ev,
  (VTBL_ENTRY)&_ZN5S18C84v100Ev,
  (VTBL_ENTRY)&_ZN5S18C84v101Ev,
  (VTBL_ENTRY)&_ZN5S18C84v102Ev,
  (VTBL_ENTRY)&_ZN5S18C84v103Ev,
  (VTBL_ENTRY)&_ZN5S18C84v104Ev,
  (VTBL_ENTRY)&_ZN5S18C84v105Ev,
  (VTBL_ENTRY)&_ZN5S18C84v106Ev,
  (VTBL_ENTRY)&_ZN5S18C84v107Ev,
  (VTBL_ENTRY)&_ZN5S18C84v108Ev,
  (VTBL_ENTRY)&_ZN5S18C84v109Ev,
  (VTBL_ENTRY)&_ZN5S18C84v110Ev,
};
extern VTBL_ENTRY _ZTI5S18C7[];
extern  VTBL_ENTRY _ZTV5S18C7[];
Class_Descriptor cd_S18C7 = {  "S18C7", // class name
  bases_S18C7, 2,
  &(vtc_S18C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S18C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S18C7),111, //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  S18C6  : S18C7 {
  virtual void  v111(); // _ZN5S18C64v111Ev
  virtual void  v112(); // _ZN5S18C64v112Ev
  virtual void  v113(); // _ZN5S18C64v113Ev
  virtual void  v114(); // _ZN5S18C64v114Ev
  virtual void  v115(); // _ZN5S18C64v115Ev
  virtual void  v116(); // _ZN5S18C64v116Ev
  virtual void  v117(); // _ZN5S18C64v117Ev
  virtual void  v118(); // _ZN5S18C64v118Ev
  virtual void  v119(); // _ZN5S18C64v119Ev
  virtual void  v120(); // _ZN5S18C64v120Ev
  virtual void  v121(); // _ZN5S18C64v121Ev
  virtual void  v122(); // _ZN5S18C64v122Ev
  virtual void  v123(); // _ZN5S18C64v123Ev
  virtual void  v124(); // _ZN5S18C64v124Ev
  virtual void  v125(); // _ZN5S18C64v125Ev
  virtual void  v126(); // _ZN5S18C64v126Ev
  virtual void  v127(); // _ZN5S18C64v127Ev
  virtual void  v128(); // _ZN5S18C64v128Ev
  virtual void  v129(); // _ZN5S18C64v129Ev
  virtual void  v130(); // _ZN5S18C64v130Ev
  virtual void  v131(); // _ZN5S18C64v131Ev
  virtual void  v132(); // _ZN5S18C64v132Ev
  virtual void  v133(); // _ZN5S18C64v133Ev
  virtual void  v134(); // _ZN5S18C64v134Ev
  virtual void  v135(); // _ZN5S18C64v135Ev
  virtual void  v136(); // _ZN5S18C64v136Ev
  ~S18C6(); // tgen
  S18C6(); // tgen
};
//SIG(-1 S18C6) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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 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}} 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}


void  S18C6 ::v111(){vfunc_called(this, "_ZN5S18C64v111Ev");}
void  S18C6 ::v112(){vfunc_called(this, "_ZN5S18C64v112Ev");}
void  S18C6 ::v113(){vfunc_called(this, "_ZN5S18C64v113Ev");}
void  S18C6 ::v114(){vfunc_called(this, "_ZN5S18C64v114Ev");}
void  S18C6 ::v115(){vfunc_called(this, "_ZN5S18C64v115Ev");}
void  S18C6 ::v116(){vfunc_called(this, "_ZN5S18C64v116Ev");}
void  S18C6 ::v117(){vfunc_called(this, "_ZN5S18C64v117Ev");}
void  S18C6 ::v118(){vfunc_called(this, "_ZN5S18C64v118Ev");}
void  S18C6 ::v119(){vfunc_called(this, "_ZN5S18C64v119Ev");}
void  S18C6 ::v120(){vfunc_called(this, "_ZN5S18C64v120Ev");}
void  S18C6 ::v121(){vfunc_called(this, "_ZN5S18C64v121Ev");}
void  S18C6 ::v122(){vfunc_called(this, "_ZN5S18C64v122Ev");}
void  S18C6 ::v123(){vfunc_called(this, "_ZN5S18C64v123Ev");}
void  S18C6 ::v124(){vfunc_called(this, "_ZN5S18C64v124Ev");}
void  S18C6 ::v125(){vfunc_called(this, "_ZN5S18C64v125Ev");}
void  S18C6 ::v126(){vfunc_called(this, "_ZN5S18C64v126Ev");}
void  S18C6 ::v127(){vfunc_called(this, "_ZN5S18C64v127Ev");}
void  S18C6 ::v128(){vfunc_called(this, "_ZN5S18C64v128Ev");}
void  S18C6 ::v129(){vfunc_called(this, "_ZN5S18C64v129Ev");}
void  S18C6 ::v130(){vfunc_called(this, "_ZN5S18C64v130Ev");}
void  S18C6 ::v131(){vfunc_called(this, "_ZN5S18C64v131Ev");}
void  S18C6 ::v132(){vfunc_called(this, "_ZN5S18C64v132Ev");}
void  S18C6 ::v133(){vfunc_called(this, "_ZN5S18C64v133Ev");}
void  S18C6 ::v134(){vfunc_called(this, "_ZN5S18C64v134Ev");}
void  S18C6 ::v135(){vfunc_called(this, "_ZN5S18C64v135Ev");}
void  S18C6 ::v136(){vfunc_called(this, "_ZN5S18C64v136Ev");}
S18C6 ::~S18C6(){ note_dtor("S18C6", this);} // tgen
S18C6 ::S18C6(){ note_ctor("S18C6", this);} // tgen

static void Test_S18C6()
{
  extern Class_Descriptor cd_S18C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18C6, buf);
    S18C6 *dp, &lv = *(dp=new (buf) S18C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18C6)");
    check_base_class_offset(lv, (S1C11_nt*)(S18C8*)(S18C7*), 0, "S18C6");
    check_base_class_offset(lv, (S18C8*)(S18C7*), 0, "S18C6");
    check_base_class_offset(lv, (S18C7*), 0, "S18C6");
    test_class_info(&lv, &cd_S18C6);
    dp->~S18C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18C6(Test_S18C6, "S18C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S18C6C1Ev();
extern void _ZN5S18C6D1Ev();
Name_Map name_map_S18C6[] = {
  NSPAIR(_ZN5S18C6C1Ev),
  NSPAIR(_ZN5S18C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S18C8;
extern VTBL_ENTRY _ZTI5S18C8[];
extern  VTBL_ENTRY _ZTV5S18C8[];
extern Class_Descriptor cd_S18C7;
extern VTBL_ENTRY _ZTI5S18C7[];
extern  VTBL_ENTRY _ZTV5S18C7[];
static Base_Class bases_S18C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S18C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S18C6[];
extern void _ZN5S18C6D1Ev();
extern void _ZN5S18C6D0Ev();
extern void _ZN5S18C82v4Ev();
extern void _ZN5S18C82v5Ev();
extern void _ZN5S18C82v6Ev();
extern void _ZN5S18C82v7Ev();
extern void _ZN5S18C82v8Ev();
extern void _ZN5S18C82v9Ev();
extern void _ZN5S18C83v10Ev();
extern void _ZN5S18C83v11Ev();
extern void _ZN5S18C83v12Ev();
extern void _ZN5S18C83v13Ev();
extern void _ZN5S18C83v14Ev();
extern void _ZN5S18C83v15Ev();
extern void _ZN5S18C83v16Ev();
extern void _ZN5S18C83v17Ev();
extern void _ZN5S18C83v18Ev();
extern void _ZN5S18C83v19Ev();
extern void _ZN5S18C83v20Ev();
extern void _ZN5S18C83v21Ev();
extern void _ZN5S18C83v22Ev();
extern void _ZN5S18C83v23Ev();
extern void _ZN5S18C83v24Ev();
extern void _ZN5S18C83v25Ev();
extern void _ZN5S18C83v26Ev();
extern void _ZN5S18C83v27Ev();
extern void _ZN5S18C83v28Ev();
extern void _ZN5S18C83v29Ev();
extern void _ZN5S18C83v30Ev();
extern void _ZN5S18C83v31Ev();
extern void _ZN5S18C83v32Ev();
extern void _ZN5S18C83v33Ev();
extern void _ZN5S18C83v34Ev();
extern void _ZN5S18C83v35Ev();
extern void _ZN5S18C83v36Ev();
extern void _ZN5S18C83v37Ev();
extern void _ZN5S18C83v38Ev();
extern void _ZN5S18C83v39Ev();
extern void _ZN5S18C83v40Ev();
extern void _ZN5S18C83v41Ev();
extern void _ZN5S18C83v42Ev();
extern void _ZN5S18C83v43Ev();
extern void _ZN5S18C83v44Ev();
extern void _ZN5S18C83v45Ev();
extern void _ZN5S18C83v46Ev();
extern void _ZN5S18C83v47Ev();
extern void _ZN5S18C83v48Ev();
extern void _ZN5S18C83v49Ev();
extern void _ZN5S18C83v50Ev();
extern void _ZN5S18C83v51Ev();
extern void _ZN5S18C83v52Ev();
extern void _ZN5S18C83v53Ev();
extern void _ZN5S18C83v54Ev();
extern void _ZN5S18C83v55Ev();
extern void _ZN5S18C83v56Ev();
extern void _ZN5S18C83v57Ev();
extern void _ZN5S18C83v58Ev();
extern void _ZN5S18C83v59Ev();
extern void _ZN5S18C83v60Ev();
extern void _ZN5S18C83v61Ev();
extern void _ZN5S18C83v62Ev();
extern void _ZN5S18C83v63Ev();
extern void _ZN5S18C83v64Ev();
extern void _ZN5S18C83v65Ev();
extern void _ZN5S18C83v66Ev();
extern void _ZN5S18C83v67Ev();
extern void _ZN5S18C83v68Ev();
extern void _ZN5S18C83v69Ev();
extern void _ZN5S18C83v70Ev();
extern void _ZN5S18C83v71Ev();
extern void _ZN5S18C83v72Ev();
extern void _ZN5S18C83v73Ev();
extern void _ZN5S18C83v74Ev();
extern void _ZN5S18C83v75Ev();
extern void _ZN5S18C83v76Ev();
extern void _ZN5S18C83v77Ev();
extern void _ZN5S18C83v78Ev();
extern void _ZN5S18C83v79Ev();
extern void _ZN5S18C83v80Ev();
extern void _ZN5S18C83v81Ev();
extern void _ZN5S18C83v82Ev();
extern void _ZN5S18C83v83Ev();
extern void _ZN5S18C83v84Ev();
extern void _ZN5S18C83v85Ev();
extern void _ZN5S18C83v86Ev();
extern void _ZN5S18C83v87Ev();
extern void _ZN5S18C83v88Ev();
extern void _ZN5S18C83v89Ev();
extern void _ZN5S18C83v90Ev();
extern void _ZN5S18C83v91Ev();
extern void _ZN5S18C83v92Ev();
extern void _ZN5S18C83v93Ev();
extern void _ZN5S18C83v94Ev();
extern void _ZN5S18C83v95Ev();
extern void _ZN5S18C83v96Ev();
extern void _ZN5S18C83v97Ev();
extern void _ZN5S18C83v98Ev();
extern void _ZN5S18C83v99Ev();
extern void _ZN5S18C84v100Ev();
extern void _ZN5S18C84v101Ev();
extern void _ZN5S18C84v102Ev();
extern void _ZN5S18C84v103Ev();
extern void _ZN5S18C84v104Ev();
extern void _ZN5S18C84v105Ev();
extern void _ZN5S18C84v106Ev();
extern void _ZN5S18C84v107Ev();
extern void _ZN5S18C84v108Ev();
extern void _ZN5S18C84v109Ev();
extern void _ZN5S18C84v110Ev();
extern void _ZN5S18C64v111Ev();
extern void _ZN5S18C64v112Ev();
extern void _ZN5S18C64v113Ev();
extern void _ZN5S18C64v114Ev();
extern void _ZN5S18C64v115Ev();
extern void _ZN5S18C64v116Ev();
extern void _ZN5S18C64v117Ev();
extern void _ZN5S18C64v118Ev();
extern void _ZN5S18C64v119Ev();
extern void _ZN5S18C64v120Ev();
extern void _ZN5S18C64v121Ev();
extern void _ZN5S18C64v122Ev();
extern void _ZN5S18C64v123Ev();
extern void _ZN5S18C64v124Ev();
extern void _ZN5S18C64v125Ev();
extern void _ZN5S18C64v126Ev();
extern void _ZN5S18C64v127Ev();
extern void _ZN5S18C64v128Ev();
extern void _ZN5S18C64v129Ev();
extern void _ZN5S18C64v130Ev();
extern void _ZN5S18C64v131Ev();
extern void _ZN5S18C64v132Ev();
extern void _ZN5S18C64v133Ev();
extern void _ZN5S18C64v134Ev();
extern void _ZN5S18C64v135Ev();
extern void _ZN5S18C64v136Ev();
static  VTBL_ENTRY vtc_S18C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S18C6[0]),
  (VTBL_ENTRY)&_ZN5S18C6D1Ev,
  (VTBL_ENTRY)&_ZN5S18C6D0Ev,
  (VTBL_ENTRY)&_ZN5S18C82v4Ev,
  (VTBL_ENTRY)&_ZN5S18C82v5Ev,
  (VTBL_ENTRY)&_ZN5S18C82v6Ev,
  (VTBL_ENTRY)&_ZN5S18C82v7Ev,
  (VTBL_ENTRY)&_ZN5S18C82v8Ev,
  (VTBL_ENTRY)&_ZN5S18C82v9Ev,
  (VTBL_ENTRY)&_ZN5S18C83v10Ev,
  (VTBL_ENTRY)&_ZN5S18C83v11Ev,
  (VTBL_ENTRY)&_ZN5S18C83v12Ev,
  (VTBL_ENTRY)&_ZN5S18C83v13Ev,
  (VTBL_ENTRY)&_ZN5S18C83v14Ev,
  (VTBL_ENTRY)&_ZN5S18C83v15Ev,
  (VTBL_ENTRY)&_ZN5S18C83v16Ev,
  (VTBL_ENTRY)&_ZN5S18C83v17Ev,
  (VTBL_ENTRY)&_ZN5S18C83v18Ev,
  (VTBL_ENTRY)&_ZN5S18C83v19Ev,
  (VTBL_ENTRY)&_ZN5S18C83v20Ev,
  (VTBL_ENTRY)&_ZN5S18C83v21Ev,
  (VTBL_ENTRY)&_ZN5S18C83v22Ev,
  (VTBL_ENTRY)&_ZN5S18C83v23Ev,
  (VTBL_ENTRY)&_ZN5S18C83v24Ev,
  (VTBL_ENTRY)&_ZN5S18C83v25Ev,
  (VTBL_ENTRY)&_ZN5S18C83v26Ev,
  (VTBL_ENTRY)&_ZN5S18C83v27Ev,
  (VTBL_ENTRY)&_ZN5S18C83v28Ev,
  (VTBL_ENTRY)&_ZN5S18C83v29Ev,
  (VTBL_ENTRY)&_ZN5S18C83v30Ev,
  (VTBL_ENTRY)&_ZN5S18C83v31Ev,
  (VTBL_ENTRY)&_ZN5S18C83v32Ev,
  (VTBL_ENTRY)&_ZN5S18C83v33Ev,
  (VTBL_ENTRY)&_ZN5S18C83v34Ev,
  (VTBL_ENTRY)&_ZN5S18C83v35Ev,
  (VTBL_ENTRY)&_ZN5S18C83v36Ev,
  (VTBL_ENTRY)&_ZN5S18C83v37Ev,
  (VTBL_ENTRY)&_ZN5S18C83v38Ev,
  (VTBL_ENTRY)&_ZN5S18C83v39Ev,
  (VTBL_ENTRY)&_ZN5S18C83v40Ev,
  (VTBL_ENTRY)&_ZN5S18C83v41Ev,
  (VTBL_ENTRY)&_ZN5S18C83v42Ev,
  (VTBL_ENTRY)&_ZN5S18C83v43Ev,
  (VTBL_ENTRY)&_ZN5S18C83v44Ev,
  (VTBL_ENTRY)&_ZN5S18C83v45Ev,
  (VTBL_ENTRY)&_ZN5S18C83v46Ev,
  (VTBL_ENTRY)&_ZN5S18C83v47Ev,
  (VTBL_ENTRY)&_ZN5S18C83v48Ev,
  (VTBL_ENTRY)&_ZN5S18C83v49Ev,
  (VTBL_ENTRY)&_ZN5S18C83v50Ev,
  (VTBL_ENTRY)&_ZN5S18C83v51Ev,
  (VTBL_ENTRY)&_ZN5S18C83v52Ev,
  (VTBL_ENTRY)&_ZN5S18C83v53Ev,
  (VTBL_ENTRY)&_ZN5S18C83v54Ev,
  (VTBL_ENTRY)&_ZN5S18C83v55Ev,
  (VTBL_ENTRY)&_ZN5S18C83v56Ev,
  (VTBL_ENTRY)&_ZN5S18C83v57Ev,
  (VTBL_ENTRY)&_ZN5S18C83v58Ev,
  (VTBL_ENTRY)&_ZN5S18C83v59Ev,
  (VTBL_ENTRY)&_ZN5S18C83v60Ev,
  (VTBL_ENTRY)&_ZN5S18C83v61Ev,
  (VTBL_ENTRY)&_ZN5S18C83v62Ev,
  (VTBL_ENTRY)&_ZN5S18C83v63Ev,
  (VTBL_ENTRY)&_ZN5S18C83v64Ev,
  (VTBL_ENTRY)&_ZN5S18C83v65Ev,
  (VTBL_ENTRY)&_ZN5S18C83v66Ev,
  (VTBL_ENTRY)&_ZN5S18C83v67Ev,
  (VTBL_ENTRY)&_ZN5S18C83v68Ev,
  (VTBL_ENTRY)&_ZN5S18C83v69Ev,
  (VTBL_ENTRY)&_ZN5S18C83v70Ev,
  (VTBL_ENTRY)&_ZN5S18C83v71Ev,
  (VTBL_ENTRY)&_ZN5S18C83v72Ev,
  (VTBL_ENTRY)&_ZN5S18C83v73Ev,
  (VTBL_ENTRY)&_ZN5S18C83v74Ev,
  (VTBL_ENTRY)&_ZN5S18C83v75Ev,
  (VTBL_ENTRY)&_ZN5S18C83v76Ev,
  (VTBL_ENTRY)&_ZN5S18C83v77Ev,
  (VTBL_ENTRY)&_ZN5S18C83v78Ev,
  (VTBL_ENTRY)&_ZN5S18C83v79Ev,
  (VTBL_ENTRY)&_ZN5S18C83v80Ev,
  (VTBL_ENTRY)&_ZN5S18C83v81Ev,
  (VTBL_ENTRY)&_ZN5S18C83v82Ev,
  (VTBL_ENTRY)&_ZN5S18C83v83Ev,
  (VTBL_ENTRY)&_ZN5S18C83v84Ev,
  (VTBL_ENTRY)&_ZN5S18C83v85Ev,
  (VTBL_ENTRY)&_ZN5S18C83v86Ev,
  (VTBL_ENTRY)&_ZN5S18C83v87Ev,
  (VTBL_ENTRY)&_ZN5S18C83v88Ev,
  (VTBL_ENTRY)&_ZN5S18C83v89Ev,
  (VTBL_ENTRY)&_ZN5S18C83v90Ev,
  (VTBL_ENTRY)&_ZN5S18C83v91Ev,
  (VTBL_ENTRY)&_ZN5S18C83v92Ev,
  (VTBL_ENTRY)&_ZN5S18C83v93Ev,
  (VTBL_ENTRY)&_ZN5S18C83v94Ev,
  (VTBL_ENTRY)&_ZN5S18C83v95Ev,
  (VTBL_ENTRY)&_ZN5S18C83v96Ev,
  (VTBL_ENTRY)&_ZN5S18C83v97Ev,
  (VTBL_ENTRY)&_ZN5S18C83v98Ev,
  (VTBL_ENTRY)&_ZN5S18C83v99Ev,
  (VTBL_ENTRY)&_ZN5S18C84v100Ev,
  (VTBL_ENTRY)&_ZN5S18C84v101Ev,
  (VTBL_ENTRY)&_ZN5S18C84v102Ev,
  (VTBL_ENTRY)&_ZN5S18C84v103Ev,
  (VTBL_ENTRY)&_ZN5S18C84v104Ev,
  (VTBL_ENTRY)&_ZN5S18C84v105Ev,
  (VTBL_ENTRY)&_ZN5S18C84v106Ev,
  (VTBL_ENTRY)&_ZN5S18C84v107Ev,
  (VTBL_ENTRY)&_ZN5S18C84v108Ev,
  (VTBL_ENTRY)&_ZN5S18C84v109Ev,
  (VTBL_ENTRY)&_ZN5S18C84v110Ev,
  (VTBL_ENTRY)&_ZN5S18C64v111Ev,
  (VTBL_ENTRY)&_ZN5S18C64v112Ev,
  (VTBL_ENTRY)&_ZN5S18C64v113Ev,
  (VTBL_ENTRY)&_ZN5S18C64v114Ev,
  (VTBL_ENTRY)&_ZN5S18C64v115Ev,
  (VTBL_ENTRY)&_ZN5S18C64v116Ev,
  (VTBL_ENTRY)&_ZN5S18C64v117Ev,
  (VTBL_ENTRY)&_ZN5S18C64v118Ev,
  (VTBL_ENTRY)&_ZN5S18C64v119Ev,
  (VTBL_ENTRY)&_ZN5S18C64v120Ev,
  (VTBL_ENTRY)&_ZN5S18C64v121Ev,
  (VTBL_ENTRY)&_ZN5S18C64v122Ev,
  (VTBL_ENTRY)&_ZN5S18C64v123Ev,
  (VTBL_ENTRY)&_ZN5S18C64v124Ev,
  (VTBL_ENTRY)&_ZN5S18C64v125Ev,
  (VTBL_ENTRY)&_ZN5S18C64v126Ev,
  (VTBL_ENTRY)&_ZN5S18C64v127Ev,
  (VTBL_ENTRY)&_ZN5S18C64v128Ev,
  (VTBL_ENTRY)&_ZN5S18C64v129Ev,
  (VTBL_ENTRY)&_ZN5S18C64v130Ev,
  (VTBL_ENTRY)&_ZN5S18C64v131Ev,
  (VTBL_ENTRY)&_ZN5S18C64v132Ev,
  (VTBL_ENTRY)&_ZN5S18C64v133Ev,
  (VTBL_ENTRY)&_ZN5S18C64v134Ev,
  (VTBL_ENTRY)&_ZN5S18C64v135Ev,
  (VTBL_ENTRY)&_ZN5S18C64v136Ev,
};
extern VTBL_ENTRY _ZTI5S18C6[];
extern  VTBL_ENTRY _ZTV5S18C6[];
Class_Descriptor cd_S18C6 = {  "S18C6", // class name
  bases_S18C6, 3,
  &(vtc_S18C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S18C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S18C6),137, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18C5  : S18C6 {
  virtual void  v137(); // _ZN5S18C54v137Ev
  virtual void  v138(); // _ZN5S18C54v138Ev
  virtual void  v139(); // _ZN5S18C54v139Ev
  virtual void  v140(); // _ZN5S18C54v140Ev
  virtual void  v141(); // _ZN5S18C54v141Ev
  virtual void  v142(); // _ZN5S18C54v142Ev
  virtual void  v143(); // _ZN5S18C54v143Ev
  virtual void  v144(); // _ZN5S18C54v144Ev
  virtual void  v145(); // _ZN5S18C54v145Ev
  virtual void  v146(); // _ZN5S18C54v146Ev
  virtual void  v147(); // _ZN5S18C54v147Ev
  virtual void  v148(); // _ZN5S18C54v148Ev
  virtual void  v149(); // _ZN5S18C54v149Ev
  virtual void  v150(); // _ZN5S18C54v150Ev
  virtual void  v151(); // _ZN5S18C54v151Ev
  virtual void  v152(); // _ZN5S18C54v152Ev
  virtual void  v153(); // _ZN5S18C54v153Ev
  virtual void  v154(); // _ZN5S18C54v154Ev
  ~S18C5(); // tgen
  S18C5(); // tgen
};
//SIG(-1 S18C5) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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 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 v149 v150 v151} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S18C5 ::v137(){vfunc_called(this, "_ZN5S18C54v137Ev");}
void  S18C5 ::v138(){vfunc_called(this, "_ZN5S18C54v138Ev");}
void  S18C5 ::v139(){vfunc_called(this, "_ZN5S18C54v139Ev");}
void  S18C5 ::v140(){vfunc_called(this, "_ZN5S18C54v140Ev");}
void  S18C5 ::v141(){vfunc_called(this, "_ZN5S18C54v141Ev");}
void  S18C5 ::v142(){vfunc_called(this, "_ZN5S18C54v142Ev");}
void  S18C5 ::v143(){vfunc_called(this, "_ZN5S18C54v143Ev");}
void  S18C5 ::v144(){vfunc_called(this, "_ZN5S18C54v144Ev");}
void  S18C5 ::v145(){vfunc_called(this, "_ZN5S18C54v145Ev");}
void  S18C5 ::v146(){vfunc_called(this, "_ZN5S18C54v146Ev");}
void  S18C5 ::v147(){vfunc_called(this, "_ZN5S18C54v147Ev");}
void  S18C5 ::v148(){vfunc_called(this, "_ZN5S18C54v148Ev");}
void  S18C5 ::v149(){vfunc_called(this, "_ZN5S18C54v149Ev");}
void  S18C5 ::v150(){vfunc_called(this, "_ZN5S18C54v150Ev");}
void  S18C5 ::v151(){vfunc_called(this, "_ZN5S18C54v151Ev");}
void  S18C5 ::v152(){vfunc_called(this, "_ZN5S18C54v152Ev");}
void  S18C5 ::v153(){vfunc_called(this, "_ZN5S18C54v153Ev");}
void  S18C5 ::v154(){vfunc_called(this, "_ZN5S18C54v154Ev");}
S18C5 ::~S18C5(){ note_dtor("S18C5", this);} // tgen
S18C5 ::S18C5(){ note_ctor("S18C5", this);} // tgen

static void Test_S18C5()
{
  extern Class_Descriptor cd_S18C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18C5, buf);
    S18C5 *dp, &lv = *(dp=new (buf) S18C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18C5)");
    check_base_class_offset(lv, (S1C11_nt*)(S18C8*)(S18C7*)(S18C6*), 0, "S18C5");
    check_base_class_offset(lv, (S18C8*)(S18C7*)(S18C6*), 0, "S18C5");
    check_base_class_offset(lv, (S18C7*)(S18C6*), 0, "S18C5");
    check_base_class_offset(lv, (S18C6*), 0, "S18C5");
    test_class_info(&lv, &cd_S18C5);
    dp->~S18C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18C5(Test_S18C5, "S18C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S18C5C1Ev();
extern void _ZN5S18C5D1Ev();
Name_Map name_map_S18C5[] = {
  NSPAIR(_ZN5S18C5C1Ev),
  NSPAIR(_ZN5S18C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S18C8;
extern VTBL_ENTRY _ZTI5S18C8[];
extern  VTBL_ENTRY _ZTV5S18C8[];
extern Class_Descriptor cd_S18C7;
extern VTBL_ENTRY _ZTI5S18C7[];
extern  VTBL_ENTRY _ZTV5S18C7[];
extern Class_Descriptor cd_S18C6;
extern VTBL_ENTRY _ZTI5S18C6[];
extern  VTBL_ENTRY _ZTV5S18C6[];
static Base_Class bases_S18C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S18C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S18C5[];
extern void _ZN5S18C5D1Ev();
extern void _ZN5S18C5D0Ev();
extern void _ZN5S18C82v4Ev();
extern void _ZN5S18C82v5Ev();
extern void _ZN5S18C82v6Ev();
extern void _ZN5S18C82v7Ev();
extern void _ZN5S18C82v8Ev();
extern void _ZN5S18C82v9Ev();
extern void _ZN5S18C83v10Ev();
extern void _ZN5S18C83v11Ev();
extern void _ZN5S18C83v12Ev();
extern void _ZN5S18C83v13Ev();
extern void _ZN5S18C83v14Ev();
extern void _ZN5S18C83v15Ev();
extern void _ZN5S18C83v16Ev();
extern void _ZN5S18C83v17Ev();
extern void _ZN5S18C83v18Ev();
extern void _ZN5S18C83v19Ev();
extern void _ZN5S18C83v20Ev();
extern void _ZN5S18C83v21Ev();
extern void _ZN5S18C83v22Ev();
extern void _ZN5S18C83v23Ev();
extern void _ZN5S18C83v24Ev();
extern void _ZN5S18C83v25Ev();
extern void _ZN5S18C83v26Ev();
extern void _ZN5S18C83v27Ev();
extern void _ZN5S18C83v28Ev();
extern void _ZN5S18C83v29Ev();
extern void _ZN5S18C83v30Ev();
extern void _ZN5S18C83v31Ev();
extern void _ZN5S18C83v32Ev();
extern void _ZN5S18C83v33Ev();
extern void _ZN5S18C83v34Ev();
extern void _ZN5S18C83v35Ev();
extern void _ZN5S18C83v36Ev();
extern void _ZN5S18C83v37Ev();
extern void _ZN5S18C83v38Ev();
extern void _ZN5S18C83v39Ev();
extern void _ZN5S18C83v40Ev();
extern void _ZN5S18C83v41Ev();
extern void _ZN5S18C83v42Ev();
extern void _ZN5S18C83v43Ev();
extern void _ZN5S18C83v44Ev();
extern void _ZN5S18C83v45Ev();
extern void _ZN5S18C83v46Ev();
extern void _ZN5S18C83v47Ev();
extern void _ZN5S18C83v48Ev();
extern void _ZN5S18C83v49Ev();
extern void _ZN5S18C83v50Ev();
extern void _ZN5S18C83v51Ev();
extern void _ZN5S18C83v52Ev();
extern void _ZN5S18C83v53Ev();
extern void _ZN5S18C83v54Ev();
extern void _ZN5S18C83v55Ev();
extern void _ZN5S18C83v56Ev();
extern void _ZN5S18C83v57Ev();
extern void _ZN5S18C83v58Ev();
extern void _ZN5S18C83v59Ev();
extern void _ZN5S18C83v60Ev();
extern void _ZN5S18C83v61Ev();
extern void _ZN5S18C83v62Ev();
extern void _ZN5S18C83v63Ev();
extern void _ZN5S18C83v64Ev();
extern void _ZN5S18C83v65Ev();
extern void _ZN5S18C83v66Ev();
extern void _ZN5S18C83v67Ev();
extern void _ZN5S18C83v68Ev();
extern void _ZN5S18C83v69Ev();
extern void _ZN5S18C83v70Ev();
extern void _ZN5S18C83v71Ev();
extern void _ZN5S18C83v72Ev();
extern void _ZN5S18C83v73Ev();
extern void _ZN5S18C83v74Ev();
extern void _ZN5S18C83v75Ev();
extern void _ZN5S18C83v76Ev();
extern void _ZN5S18C83v77Ev();
extern void _ZN5S18C83v78Ev();
extern void _ZN5S18C83v79Ev();
extern void _ZN5S18C83v80Ev();
extern void _ZN5S18C83v81Ev();
extern void _ZN5S18C83v82Ev();
extern void _ZN5S18C83v83Ev();
extern void _ZN5S18C83v84Ev();
extern void _ZN5S18C83v85Ev();
extern void _ZN5S18C83v86Ev();
extern void _ZN5S18C83v87Ev();
extern void _ZN5S18C83v88Ev();
extern void _ZN5S18C83v89Ev();
extern void _ZN5S18C83v90Ev();
extern void _ZN5S18C83v91Ev();
extern void _ZN5S18C83v92Ev();
extern void _ZN5S18C83v93Ev();
extern void _ZN5S18C83v94Ev();
extern void _ZN5S18C83v95Ev();
extern void _ZN5S18C83v96Ev();
extern void _ZN5S18C83v97Ev();
extern void _ZN5S18C83v98Ev();
extern void _ZN5S18C83v99Ev();
extern void _ZN5S18C84v100Ev();
extern void _ZN5S18C84v101Ev();
extern void _ZN5S18C84v102Ev();
extern void _ZN5S18C84v103Ev();
extern void _ZN5S18C84v104Ev();
extern void _ZN5S18C84v105Ev();
extern void _ZN5S18C84v106Ev();
extern void _ZN5S18C84v107Ev();
extern void _ZN5S18C84v108Ev();
extern void _ZN5S18C84v109Ev();
extern void _ZN5S18C84v110Ev();
extern void _ZN5S18C64v111Ev();
extern void _ZN5S18C64v112Ev();
extern void _ZN5S18C64v113Ev();
extern void _ZN5S18C64v114Ev();
extern void _ZN5S18C64v115Ev();
extern void _ZN5S18C64v116Ev();
extern void _ZN5S18C64v117Ev();
extern void _ZN5S18C64v118Ev();
extern void _ZN5S18C64v119Ev();
extern void _ZN5S18C64v120Ev();
extern void _ZN5S18C64v121Ev();
extern void _ZN5S18C64v122Ev();
extern void _ZN5S18C64v123Ev();
extern void _ZN5S18C64v124Ev();
extern void _ZN5S18C64v125Ev();
extern void _ZN5S18C64v126Ev();
extern void _ZN5S18C64v127Ev();
extern void _ZN5S18C64v128Ev();
extern void _ZN5S18C64v129Ev();
extern void _ZN5S18C64v130Ev();
extern void _ZN5S18C64v131Ev();
extern void _ZN5S18C64v132Ev();
extern void _ZN5S18C64v133Ev();
extern void _ZN5S18C64v134Ev();
extern void _ZN5S18C64v135Ev();
extern void _ZN5S18C64v136Ev();
extern void _ZN5S18C54v137Ev();
extern void _ZN5S18C54v138Ev();
extern void _ZN5S18C54v139Ev();
extern void _ZN5S18C54v140Ev();
extern void _ZN5S18C54v141Ev();
extern void _ZN5S18C54v142Ev();
extern void _ZN5S18C54v143Ev();
extern void _ZN5S18C54v144Ev();
extern void _ZN5S18C54v145Ev();
extern void _ZN5S18C54v146Ev();
extern void _ZN5S18C54v147Ev();
extern void _ZN5S18C54v148Ev();
extern void _ZN5S18C54v149Ev();
extern void _ZN5S18C54v150Ev();
extern void _ZN5S18C54v151Ev();
extern void _ZN5S18C54v152Ev();
extern void _ZN5S18C54v153Ev();
extern void _ZN5S18C54v154Ev();
static  VTBL_ENTRY vtc_S18C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S18C5[0]),
  (VTBL_ENTRY)&_ZN5S18C5D1Ev,
  (VTBL_ENTRY)&_ZN5S18C5D0Ev,
  (VTBL_ENTRY)&_ZN5S18C82v4Ev,
  (VTBL_ENTRY)&_ZN5S18C82v5Ev,
  (VTBL_ENTRY)&_ZN5S18C82v6Ev,
  (VTBL_ENTRY)&_ZN5S18C82v7Ev,
  (VTBL_ENTRY)&_ZN5S18C82v8Ev,
  (VTBL_ENTRY)&_ZN5S18C82v9Ev,
  (VTBL_ENTRY)&_ZN5S18C83v10Ev,
  (VTBL_ENTRY)&_ZN5S18C83v11Ev,
  (VTBL_ENTRY)&_ZN5S18C83v12Ev,
  (VTBL_ENTRY)&_ZN5S18C83v13Ev,
  (VTBL_ENTRY)&_ZN5S18C83v14Ev,
  (VTBL_ENTRY)&_ZN5S18C83v15Ev,
  (VTBL_ENTRY)&_ZN5S18C83v16Ev,
  (VTBL_ENTRY)&_ZN5S18C83v17Ev,
  (VTBL_ENTRY)&_ZN5S18C83v18Ev,
  (VTBL_ENTRY)&_ZN5S18C83v19Ev,
  (VTBL_ENTRY)&_ZN5S18C83v20Ev,
  (VTBL_ENTRY)&_ZN5S18C83v21Ev,
  (VTBL_ENTRY)&_ZN5S18C83v22Ev,
  (VTBL_ENTRY)&_ZN5S18C83v23Ev,
  (VTBL_ENTRY)&_ZN5S18C83v24Ev,
  (VTBL_ENTRY)&_ZN5S18C83v25Ev,
  (VTBL_ENTRY)&_ZN5S18C83v26Ev,
  (VTBL_ENTRY)&_ZN5S18C83v27Ev,
  (VTBL_ENTRY)&_ZN5S18C83v28Ev,
  (VTBL_ENTRY)&_ZN5S18C83v29Ev,
  (VTBL_ENTRY)&_ZN5S18C83v30Ev,
  (VTBL_ENTRY)&_ZN5S18C83v31Ev,
  (VTBL_ENTRY)&_ZN5S18C83v32Ev,
  (VTBL_ENTRY)&_ZN5S18C83v33Ev,
  (VTBL_ENTRY)&_ZN5S18C83v34Ev,
  (VTBL_ENTRY)&_ZN5S18C83v35Ev,
  (VTBL_ENTRY)&_ZN5S18C83v36Ev,
  (VTBL_ENTRY)&_ZN5S18C83v37Ev,
  (VTBL_ENTRY)&_ZN5S18C83v38Ev,
  (VTBL_ENTRY)&_ZN5S18C83v39Ev,
  (VTBL_ENTRY)&_ZN5S18C83v40Ev,
  (VTBL_ENTRY)&_ZN5S18C83v41Ev,
  (VTBL_ENTRY)&_ZN5S18C83v42Ev,
  (VTBL_ENTRY)&_ZN5S18C83v43Ev,
  (VTBL_ENTRY)&_ZN5S18C83v44Ev,
  (VTBL_ENTRY)&_ZN5S18C83v45Ev,
  (VTBL_ENTRY)&_ZN5S18C83v46Ev,
  (VTBL_ENTRY)&_ZN5S18C83v47Ev,
  (VTBL_ENTRY)&_ZN5S18C83v48Ev,
  (VTBL_ENTRY)&_ZN5S18C83v49Ev,
  (VTBL_ENTRY)&_ZN5S18C83v50Ev,
  (VTBL_ENTRY)&_ZN5S18C83v51Ev,
  (VTBL_ENTRY)&_ZN5S18C83v52Ev,
  (VTBL_ENTRY)&_ZN5S18C83v53Ev,
  (VTBL_ENTRY)&_ZN5S18C83v54Ev,
  (VTBL_ENTRY)&_ZN5S18C83v55Ev,
  (VTBL_ENTRY)&_ZN5S18C83v56Ev,
  (VTBL_ENTRY)&_ZN5S18C83v57Ev,
  (VTBL_ENTRY)&_ZN5S18C83v58Ev,
  (VTBL_ENTRY)&_ZN5S18C83v59Ev,
  (VTBL_ENTRY)&_ZN5S18C83v60Ev,
  (VTBL_ENTRY)&_ZN5S18C83v61Ev,
  (VTBL_ENTRY)&_ZN5S18C83v62Ev,
  (VTBL_ENTRY)&_ZN5S18C83v63Ev,
  (VTBL_ENTRY)&_ZN5S18C83v64Ev,
  (VTBL_ENTRY)&_ZN5S18C83v65Ev,
  (VTBL_ENTRY)&_ZN5S18C83v66Ev,
  (VTBL_ENTRY)&_ZN5S18C83v67Ev,
  (VTBL_ENTRY)&_ZN5S18C83v68Ev,
  (VTBL_ENTRY)&_ZN5S18C83v69Ev,
  (VTBL_ENTRY)&_ZN5S18C83v70Ev,
  (VTBL_ENTRY)&_ZN5S18C83v71Ev,
  (VTBL_ENTRY)&_ZN5S18C83v72Ev,
  (VTBL_ENTRY)&_ZN5S18C83v73Ev,
  (VTBL_ENTRY)&_ZN5S18C83v74Ev,
  (VTBL_ENTRY)&_ZN5S18C83v75Ev,
  (VTBL_ENTRY)&_ZN5S18C83v76Ev,
  (VTBL_ENTRY)&_ZN5S18C83v77Ev,
  (VTBL_ENTRY)&_ZN5S18C83v78Ev,
  (VTBL_ENTRY)&_ZN5S18C83v79Ev,
  (VTBL_ENTRY)&_ZN5S18C83v80Ev,
  (VTBL_ENTRY)&_ZN5S18C83v81Ev,
  (VTBL_ENTRY)&_ZN5S18C83v82Ev,
  (VTBL_ENTRY)&_ZN5S18C83v83Ev,
  (VTBL_ENTRY)&_ZN5S18C83v84Ev,
  (VTBL_ENTRY)&_ZN5S18C83v85Ev,
  (VTBL_ENTRY)&_ZN5S18C83v86Ev,
  (VTBL_ENTRY)&_ZN5S18C83v87Ev,
  (VTBL_ENTRY)&_ZN5S18C83v88Ev,
  (VTBL_ENTRY)&_ZN5S18C83v89Ev,
  (VTBL_ENTRY)&_ZN5S18C83v90Ev,
  (VTBL_ENTRY)&_ZN5S18C83v91Ev,
  (VTBL_ENTRY)&_ZN5S18C83v92Ev,
  (VTBL_ENTRY)&_ZN5S18C83v93Ev,
  (VTBL_ENTRY)&_ZN5S18C83v94Ev,
  (VTBL_ENTRY)&_ZN5S18C83v95Ev,
  (VTBL_ENTRY)&_ZN5S18C83v96Ev,
  (VTBL_ENTRY)&_ZN5S18C83v97Ev,
  (VTBL_ENTRY)&_ZN5S18C83v98Ev,
  (VTBL_ENTRY)&_ZN5S18C83v99Ev,
  (VTBL_ENTRY)&_ZN5S18C84v100Ev,
  (VTBL_ENTRY)&_ZN5S18C84v101Ev,
  (VTBL_ENTRY)&_ZN5S18C84v102Ev,
  (VTBL_ENTRY)&_ZN5S18C84v103Ev,
  (VTBL_ENTRY)&_ZN5S18C84v104Ev,
  (VTBL_ENTRY)&_ZN5S18C84v105Ev,
  (VTBL_ENTRY)&_ZN5S18C84v106Ev,
  (VTBL_ENTRY)&_ZN5S18C84v107Ev,
  (VTBL_ENTRY)&_ZN5S18C84v108Ev,
  (VTBL_ENTRY)&_ZN5S18C84v109Ev,
  (VTBL_ENTRY)&_ZN5S18C84v110Ev,
  (VTBL_ENTRY)&_ZN5S18C64v111Ev,
  (VTBL_ENTRY)&_ZN5S18C64v112Ev,
  (VTBL_ENTRY)&_ZN5S18C64v113Ev,
  (VTBL_ENTRY)&_ZN5S18C64v114Ev,
  (VTBL_ENTRY)&_ZN5S18C64v115Ev,
  (VTBL_ENTRY)&_ZN5S18C64v116Ev,
  (VTBL_ENTRY)&_ZN5S18C64v117Ev,
  (VTBL_ENTRY)&_ZN5S18C64v118Ev,
  (VTBL_ENTRY)&_ZN5S18C64v119Ev,
  (VTBL_ENTRY)&_ZN5S18C64v120Ev,
  (VTBL_ENTRY)&_ZN5S18C64v121Ev,
  (VTBL_ENTRY)&_ZN5S18C64v122Ev,
  (VTBL_ENTRY)&_ZN5S18C64v123Ev,
  (VTBL_ENTRY)&_ZN5S18C64v124Ev,
  (VTBL_ENTRY)&_ZN5S18C64v125Ev,
  (VTBL_ENTRY)&_ZN5S18C64v126Ev,
  (VTBL_ENTRY)&_ZN5S18C64v127Ev,
  (VTBL_ENTRY)&_ZN5S18C64v128Ev,
  (VTBL_ENTRY)&_ZN5S18C64v129Ev,
  (VTBL_ENTRY)&_ZN5S18C64v130Ev,
  (VTBL_ENTRY)&_ZN5S18C64v131Ev,
  (VTBL_ENTRY)&_ZN5S18C64v132Ev,
  (VTBL_ENTRY)&_ZN5S18C64v133Ev,
  (VTBL_ENTRY)&_ZN5S18C64v134Ev,
  (VTBL_ENTRY)&_ZN5S18C64v135Ev,
  (VTBL_ENTRY)&_ZN5S18C64v136Ev,
  (VTBL_ENTRY)&_ZN5S18C54v137Ev,
  (VTBL_ENTRY)&_ZN5S18C54v138Ev,
  (VTBL_ENTRY)&_ZN5S18C54v139Ev,
  (VTBL_ENTRY)&_ZN5S18C54v140Ev,
  (VTBL_ENTRY)&_ZN5S18C54v141Ev,
  (VTBL_ENTRY)&_ZN5S18C54v142Ev,
  (VTBL_ENTRY)&_ZN5S18C54v143Ev,
  (VTBL_ENTRY)&_ZN5S18C54v144Ev,
  (VTBL_ENTRY)&_ZN5S18C54v145Ev,
  (VTBL_ENTRY)&_ZN5S18C54v146Ev,
  (VTBL_ENTRY)&_ZN5S18C54v147Ev,
  (VTBL_ENTRY)&_ZN5S18C54v148Ev,
  (VTBL_ENTRY)&_ZN5S18C54v149Ev,
  (VTBL_ENTRY)&_ZN5S18C54v150Ev,
  (VTBL_ENTRY)&_ZN5S18C54v151Ev,
  (VTBL_ENTRY)&_ZN5S18C54v152Ev,
  (VTBL_ENTRY)&_ZN5S18C54v153Ev,
  (VTBL_ENTRY)&_ZN5S18C54v154Ev,
};
extern VTBL_ENTRY _ZTI5S18C5[];
extern  VTBL_ENTRY _ZTV5S18C5[];
Class_Descriptor cd_S18C5 = {  "S18C5", // class name
  bases_S18C5, 4,
  &(vtc_S18C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S18C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S18C5),155, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18C4  : S18C5 {
  virtual void  v155(); // _ZN5S18C44v155Ev
  virtual void  v156(); // _ZN5S18C44v156Ev
  virtual void  v157(); // _ZN5S18C44v157Ev
  virtual void  v158(); // _ZN5S18C44v158Ev
  virtual void  v159(); // _ZN5S18C44v159Ev
  virtual void  v160(); // _ZN5S18C44v160Ev
  virtual void  v161(); // _ZN5S18C44v161Ev
  virtual void  v162(); // _ZN5S18C44v162Ev
  virtual void  v163(); // _ZN5S18C44v163Ev
  virtual void  v164(); // _ZN5S18C44v164Ev
  virtual void  v165(); // _ZN5S18C44v165Ev
  virtual void  v166(); // _ZN5S18C44v166Ev
  virtual void  v167(); // _ZN5S18C44v167Ev
  virtual void  v168(); // _ZN5S18C44v168Ev
  virtual void  v169(); // _ZN5S18C44v169Ev
  virtual void  v170(); // _ZN5S18C44v170Ev
  virtual void  v171(); // _ZN5S18C44v171Ev
  virtual void  v172(); // _ZN5S18C44v172Ev
  virtual void  v173(); // _ZN5S18C44v173Ev
  virtual void  v174(); // _ZN5S18C44v174Ev
  virtual void  v175(); // _ZN5S18C44v175Ev
  virtual void  v176(); // _ZN5S18C44v176Ev
  virtual void  v177(); // _ZN5S18C44v177Ev
  virtual void  v178(); // _ZN5S18C44v178Ev
  virtual void  v179(); // _ZN5S18C44v179Ev
  virtual void  v180(); // _ZN5S18C44v180Ev
  ~S18C4(); // tgen
  S18C4(); // tgen
};
//SIG(-1 S18C4) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m Fp Fi} 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 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 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} 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}


void  S18C4 ::v155(){vfunc_called(this, "_ZN5S18C44v155Ev");}
void  S18C4 ::v156(){vfunc_called(this, "_ZN5S18C44v156Ev");}
void  S18C4 ::v157(){vfunc_called(this, "_ZN5S18C44v157Ev");}
void  S18C4 ::v158(){vfunc_called(this, "_ZN5S18C44v158Ev");}
void  S18C4 ::v159(){vfunc_called(this, "_ZN5S18C44v159Ev");}
void  S18C4 ::v160(){vfunc_called(this, "_ZN5S18C44v160Ev");}
void  S18C4 ::v161(){vfunc_called(this, "_ZN5S18C44v161Ev");}
void  S18C4 ::v162(){vfunc_called(this, "_ZN5S18C44v162Ev");}
void  S18C4 ::v163(){vfunc_called(this, "_ZN5S18C44v163Ev");}
void  S18C4 ::v164(){vfunc_called(this, "_ZN5S18C44v164Ev");}
void  S18C4 ::v165(){vfunc_called(this, "_ZN5S18C44v165Ev");}
void  S18C4 ::v166(){vfunc_called(this, "_ZN5S18C44v166Ev");}
void  S18C4 ::v167(){vfunc_called(this, "_ZN5S18C44v167Ev");}
void  S18C4 ::v168(){vfunc_called(this, "_ZN5S18C44v168Ev");}
void  S18C4 ::v169(){vfunc_called(this, "_ZN5S18C44v169Ev");}
void  S18C4 ::v170(){vfunc_called(this, "_ZN5S18C44v170Ev");}
void  S18C4 ::v171(){vfunc_called(this, "_ZN5S18C44v171Ev");}
void  S18C4 ::v172(){vfunc_called(this, "_ZN5S18C44v172Ev");}
void  S18C4 ::v173(){vfunc_called(this, "_ZN5S18C44v173Ev");}
void  S18C4 ::v174(){vfunc_called(this, "_ZN5S18C44v174Ev");}
void  S18C4 ::v175(){vfunc_called(this, "_ZN5S18C44v175Ev");}
void  S18C4 ::v176(){vfunc_called(this, "_ZN5S18C44v176Ev");}
void  S18C4 ::v177(){vfunc_called(this, "_ZN5S18C44v177Ev");}
void  S18C4 ::v178(){vfunc_called(this, "_ZN5S18C44v178Ev");}
void  S18C4 ::v179(){vfunc_called(this, "_ZN5S18C44v179Ev");}
void  S18C4 ::v180(){vfunc_called(this, "_ZN5S18C44v180Ev");}
S18C4 ::~S18C4(){ note_dtor("S18C4", this);} // tgen
S18C4 ::S18C4(){ note_ctor("S18C4", this);} // tgen

static void Test_S18C4()
{
  extern Class_Descriptor cd_S18C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18C4, buf);
    S18C4 *dp, &lv = *(dp=new (buf) S18C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18C4)");
    check_base_class_offset(lv, (S1C11_nt*)(S18C8*)(S18C7*)(S18C6*)(S18C5*), 0, "S18C4");
    check_base_class_offset(lv, (S18C8*)(S18C7*)(S18C6*)(S18C5*), 0, "S18C4");
    check_base_class_offset(lv, (S18C7*)(S18C6*)(S18C5*), 0, "S18C4");
    check_base_class_offset(lv, (S18C6*)(S18C5*), 0, "S18C4");
    check_base_class_offset(lv, (S18C5*), 0, "S18C4");
    test_class_info(&lv, &cd_S18C4);
    dp->~S18C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18C4(Test_S18C4, "S18C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S18C4C1Ev();
extern void _ZN5S18C4D1Ev();
Name_Map name_map_S18C4[] = {
  NSPAIR(_ZN5S18C4C1Ev),
  NSPAIR(_ZN5S18C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S18C8;
extern VTBL_ENTRY _ZTI5S18C8[];
extern  VTBL_ENTRY _ZTV5S18C8[];
extern Class_Descriptor cd_S18C7;
extern VTBL_ENTRY _ZTI5S18C7[];
extern  VTBL_ENTRY _ZTV5S18C7[];
extern Class_Descriptor cd_S18C6;
extern VTBL_ENTRY _ZTI5S18C6[];
extern  VTBL_ENTRY _ZTV5S18C6[];
extern Class_Descriptor cd_S18C5;
extern VTBL_ENTRY _ZTI5S18C5[];
extern  VTBL_ENTRY _ZTV5S18C5[];
static Base_Class bases_S18C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S18C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S18C4[];
extern void _ZN5S18C4D1Ev();
extern void _ZN5S18C4D0Ev();
extern void _ZN5S18C82v4Ev();
extern void _ZN5S18C82v5Ev();
extern void _ZN5S18C82v6Ev();
extern void _ZN5S18C82v7Ev();
extern void _ZN5S18C82v8Ev();
extern void _ZN5S18C82v9Ev();
extern void _ZN5S18C83v10Ev();
extern void _ZN5S18C83v11Ev();
extern void _ZN5S18C83v12Ev();
extern void _ZN5S18C83v13Ev();
extern void _ZN5S18C83v14Ev();
extern void _ZN5S18C83v15Ev();
extern void _ZN5S18C83v16Ev();
extern void _ZN5S18C83v17Ev();
extern void _ZN5S18C83v18Ev();
extern void _ZN5S18C83v19Ev();
extern void _ZN5S18C83v20Ev();
extern void _ZN5S18C83v21Ev();
extern void _ZN5S18C83v22Ev();
extern void _ZN5S18C83v23Ev();
extern void _ZN5S18C83v24Ev();
extern void _ZN5S18C83v25Ev();
extern void _ZN5S18C83v26Ev();
extern void _ZN5S18C83v27Ev();
extern void _ZN5S18C83v28Ev();
extern void _ZN5S18C83v29Ev();
extern void _ZN5S18C83v30Ev();
extern void _ZN5S18C83v31Ev();
extern void _ZN5S18C83v32Ev();
extern void _ZN5S18C83v33Ev();
extern void _ZN5S18C83v34Ev();
extern void _ZN5S18C83v35Ev();
extern void _ZN5S18C83v36Ev();
extern void _ZN5S18C83v37Ev();
extern void _ZN5S18C83v38Ev();
extern void _ZN5S18C83v39Ev();
extern void _ZN5S18C83v40Ev();
extern void _ZN5S18C83v41Ev();
extern void _ZN5S18C83v42Ev();
extern void _ZN5S18C83v43Ev();
extern void _ZN5S18C83v44Ev();
extern void _ZN5S18C83v45Ev();
extern void _ZN5S18C83v46Ev();
extern void _ZN5S18C83v47Ev();
extern void _ZN5S18C83v48Ev();
extern void _ZN5S18C83v49Ev();
extern void _ZN5S18C83v50Ev();
extern void _ZN5S18C83v51Ev();
extern void _ZN5S18C83v52Ev();
extern void _ZN5S18C83v53Ev();
extern void _ZN5S18C83v54Ev();
extern void _ZN5S18C83v55Ev();
extern void _ZN5S18C83v56Ev();
extern void _ZN5S18C83v57Ev();
extern void _ZN5S18C83v58Ev();
extern void _ZN5S18C83v59Ev();
extern void _ZN5S18C83v60Ev();
extern void _ZN5S18C83v61Ev();
extern void _ZN5S18C83v62Ev();
extern void _ZN5S18C83v63Ev();
extern void _ZN5S18C83v64Ev();
extern void _ZN5S18C83v65Ev();
extern void _ZN5S18C83v66Ev();
extern void _ZN5S18C83v67Ev();
extern void _ZN5S18C83v68Ev();
extern void _ZN5S18C83v69Ev();
extern void _ZN5S18C83v70Ev();
extern void _ZN5S18C83v71Ev();
extern void _ZN5S18C83v72Ev();
extern void _ZN5S18C83v73Ev();
extern void _ZN5S18C83v74Ev();
extern void _ZN5S18C83v75Ev();
extern void _ZN5S18C83v76Ev();
extern void _ZN5S18C83v77Ev();
extern void _ZN5S18C83v78Ev();
extern void _ZN5S18C83v79Ev();
extern void _ZN5S18C83v80Ev();
extern void _ZN5S18C83v81Ev();
extern void _ZN5S18C83v82Ev();
extern void _ZN5S18C83v83Ev();
extern void _ZN5S18C83v84Ev();
extern void _ZN5S18C83v85Ev();
extern void _ZN5S18C83v86Ev();
extern void _ZN5S18C83v87Ev();
extern void _ZN5S18C83v88Ev();
extern void _ZN5S18C83v89Ev();
extern void _ZN5S18C83v90Ev();
extern void _ZN5S18C83v91Ev();
extern void _ZN5S18C83v92Ev();
extern void _ZN5S18C83v93Ev();
extern void _ZN5S18C83v94Ev();
extern void _ZN5S18C83v95Ev();
extern void _ZN5S18C83v96Ev();
extern void _ZN5S18C83v97Ev();
extern void _ZN5S18C83v98Ev();
extern void _ZN5S18C83v99Ev();
extern void _ZN5S18C84v100Ev();
extern void _ZN5S18C84v101Ev();
extern void _ZN5S18C84v102Ev();
extern void _ZN5S18C84v103Ev();
extern void _ZN5S18C84v104Ev();
extern void _ZN5S18C84v105Ev();
extern void _ZN5S18C84v106Ev();
extern void _ZN5S18C84v107Ev();
extern void _ZN5S18C84v108Ev();
extern void _ZN5S18C84v109Ev();
extern void _ZN5S18C84v110Ev();
extern void _ZN5S18C64v111Ev();
extern void _ZN5S18C64v112Ev();
extern void _ZN5S18C64v113Ev();
extern void _ZN5S18C64v114Ev();
extern void _ZN5S18C64v115Ev();
extern void _ZN5S18C64v116Ev();
extern void _ZN5S18C64v117Ev();
extern void _ZN5S18C64v118Ev();
extern void _ZN5S18C64v119Ev();
extern void _ZN5S18C64v120Ev();
extern void _ZN5S18C64v121Ev();
extern void _ZN5S18C64v122Ev();
extern void _ZN5S18C64v123Ev();
extern void _ZN5S18C64v124Ev();
extern void _ZN5S18C64v125Ev();
extern void _ZN5S18C64v126Ev();
extern void _ZN5S18C64v127Ev();
extern void _ZN5S18C64v128Ev();
extern void _ZN5S18C64v129Ev();
extern void _ZN5S18C64v130Ev();
extern void _ZN5S18C64v131Ev();
extern void _ZN5S18C64v132Ev();
extern void _ZN5S18C64v133Ev();
extern void _ZN5S18C64v134Ev();
extern void _ZN5S18C64v135Ev();
extern void _ZN5S18C64v136Ev();
extern void _ZN5S18C54v137Ev();
extern void _ZN5S18C54v138Ev();
extern void _ZN5S18C54v139Ev();
extern void _ZN5S18C54v140Ev();
extern void _ZN5S18C54v141Ev();
extern void _ZN5S18C54v142Ev();
extern void _ZN5S18C54v143Ev();
extern void _ZN5S18C54v144Ev();
extern void _ZN5S18C54v145Ev();
extern void _ZN5S18C54v146Ev();
extern void _ZN5S18C54v147Ev();
extern void _ZN5S18C54v148Ev();
extern void _ZN5S18C54v149Ev();
extern void _ZN5S18C54v150Ev();
extern void _ZN5S18C54v151Ev();
extern void _ZN5S18C54v152Ev();
extern void _ZN5S18C54v153Ev();
extern void _ZN5S18C54v154Ev();
extern void _ZN5S18C44v155Ev();
extern void _ZN5S18C44v156Ev();
extern void _ZN5S18C44v157Ev();
extern void _ZN5S18C44v158Ev();
extern void _ZN5S18C44v159Ev();
extern void _ZN5S18C44v160Ev();
extern void _ZN5S18C44v161Ev();
extern void _ZN5S18C44v162Ev();
extern void _ZN5S18C44v163Ev();
extern void _ZN5S18C44v164Ev();
extern void _ZN5S18C44v165Ev();
extern void _ZN5S18C44v166Ev();
extern void _ZN5S18C44v167Ev();
extern void _ZN5S18C44v168Ev();
extern void _ZN5S18C44v169Ev();
extern void _ZN5S18C44v170Ev();
extern void _ZN5S18C44v171Ev();
extern void _ZN5S18C44v172Ev();
extern void _ZN5S18C44v173Ev();
extern void _ZN5S18C44v174Ev();
extern void _ZN5S18C44v175Ev();
extern void _ZN5S18C44v176Ev();
extern void _ZN5S18C44v177Ev();
extern void _ZN5S18C44v178Ev();
extern void _ZN5S18C44v179Ev();
extern void _ZN5S18C44v180Ev();
static  VTBL_ENTRY vtc_S18C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S18C4[0]),
  (VTBL_ENTRY)&_ZN5S18C4D1Ev,
  (VTBL_ENTRY)&_ZN5S18C4D0Ev,
  (VTBL_ENTRY)&_ZN5S18C82v4Ev,
  (VTBL_ENTRY)&_ZN5S18C82v5Ev,
  (VTBL_ENTRY)&_ZN5S18C82v6Ev,
  (VTBL_ENTRY)&_ZN5S18C82v7Ev,
  (VTBL_ENTRY)&_ZN5S18C82v8Ev,
  (VTBL_ENTRY)&_ZN5S18C82v9Ev,
  (VTBL_ENTRY)&_ZN5S18C83v10Ev,
  (VTBL_ENTRY)&_ZN5S18C83v11Ev,
  (VTBL_ENTRY)&_ZN5S18C83v12Ev,
  (VTBL_ENTRY)&_ZN5S18C83v13Ev,
  (VTBL_ENTRY)&_ZN5S18C83v14Ev,
  (VTBL_ENTRY)&_ZN5S18C83v15Ev,
  (VTBL_ENTRY)&_ZN5S18C83v16Ev,
  (VTBL_ENTRY)&_ZN5S18C83v17Ev,
  (VTBL_ENTRY)&_ZN5S18C83v18Ev,
  (VTBL_ENTRY)&_ZN5S18C83v19Ev,
  (VTBL_ENTRY)&_ZN5S18C83v20Ev,
  (VTBL_ENTRY)&_ZN5S18C83v21Ev,
  (VTBL_ENTRY)&_ZN5S18C83v22Ev,
  (VTBL_ENTRY)&_ZN5S18C83v23Ev,
  (VTBL_ENTRY)&_ZN5S18C83v24Ev,
  (VTBL_ENTRY)&_ZN5S18C83v25Ev,
  (VTBL_ENTRY)&_ZN5S18C83v26Ev,
  (VTBL_ENTRY)&_ZN5S18C83v27Ev,
  (VTBL_ENTRY)&_ZN5S18C83v28Ev,
  (VTBL_ENTRY)&_ZN5S18C83v29Ev,
  (VTBL_ENTRY)&_ZN5S18C83v30Ev,
  (VTBL_ENTRY)&_ZN5S18C83v31Ev,
  (VTBL_ENTRY)&_ZN5S18C83v32Ev,
  (VTBL_ENTRY)&_ZN5S18C83v33Ev,
  (VTBL_ENTRY)&_ZN5S18C83v34Ev,
  (VTBL_ENTRY)&_ZN5S18C83v35Ev,
  (VTBL_ENTRY)&_ZN5S18C83v36Ev,
  (VTBL_ENTRY)&_ZN5S18C83v37Ev,
  (VTBL_ENTRY)&_ZN5S18C83v38Ev,
  (VTBL_ENTRY)&_ZN5S18C83v39Ev,
  (VTBL_ENTRY)&_ZN5S18C83v40Ev,
  (VTBL_ENTRY)&_ZN5S18C83v41Ev,
  (VTBL_ENTRY)&_ZN5S18C83v42Ev,
  (VTBL_ENTRY)&_ZN5S18C83v43Ev,
  (VTBL_ENTRY)&_ZN5S18C83v44Ev,
  (VTBL_ENTRY)&_ZN5S18C83v45Ev,
  (VTBL_ENTRY)&_ZN5S18C83v46Ev,
  (VTBL_ENTRY)&_ZN5S18C83v47Ev,
  (VTBL_ENTRY)&_ZN5S18C83v48Ev,
  (VTBL_ENTRY)&_ZN5S18C83v49Ev,
  (VTBL_ENTRY)&_ZN5S18C83v50Ev,
  (VTBL_ENTRY)&_ZN5S18C83v51Ev,
  (VTBL_ENTRY)&_ZN5S18C83v52Ev,
  (VTBL_ENTRY)&_ZN5S18C83v53Ev,
  (VTBL_ENTRY)&_ZN5S18C83v54Ev,
  (VTBL_ENTRY)&_ZN5S18C83v55Ev,
  (VTBL_ENTRY)&_ZN5S18C83v56Ev,
  (VTBL_ENTRY)&_ZN5S18C83v57Ev,
  (VTBL_ENTRY)&_ZN5S18C83v58Ev,
  (VTBL_ENTRY)&_ZN5S18C83v59Ev,
  (VTBL_ENTRY)&_ZN5S18C83v60Ev,
  (VTBL_ENTRY)&_ZN5S18C83v61Ev,
  (VTBL_ENTRY)&_ZN5S18C83v62Ev,
  (VTBL_ENTRY)&_ZN5S18C83v63Ev,
  (VTBL_ENTRY)&_ZN5S18C83v64Ev,
  (VTBL_ENTRY)&_ZN5S18C83v65Ev,
  (VTBL_ENTRY)&_ZN5S18C83v66Ev,
  (VTBL_ENTRY)&_ZN5S18C83v67Ev,
  (VTBL_ENTRY)&_ZN5S18C83v68Ev,
  (VTBL_ENTRY)&_ZN5S18C83v69Ev,
  (VTBL_ENTRY)&_ZN5S18C83v70Ev,
  (VTBL_ENTRY)&_ZN5S18C83v71Ev,
  (VTBL_ENTRY)&_ZN5S18C83v72Ev,
  (VTBL_ENTRY)&_ZN5S18C83v73Ev,
  (VTBL_ENTRY)&_ZN5S18C83v74Ev,
  (VTBL_ENTRY)&_ZN5S18C83v75Ev,
  (VTBL_ENTRY)&_ZN5S18C83v76Ev,
  (VTBL_ENTRY)&_ZN5S18C83v77Ev,
  (VTBL_ENTRY)&_ZN5S18C83v78Ev,
  (VTBL_ENTRY)&_ZN5S18C83v79Ev,
  (VTBL_ENTRY)&_ZN5S18C83v80Ev,
  (VTBL_ENTRY)&_ZN5S18C83v81Ev,
  (VTBL_ENTRY)&_ZN5S18C83v82Ev,
  (VTBL_ENTRY)&_ZN5S18C83v83Ev,
  (VTBL_ENTRY)&_ZN5S18C83v84Ev,
  (VTBL_ENTRY)&_ZN5S18C83v85Ev,
  (VTBL_ENTRY)&_ZN5S18C83v86Ev,
  (VTBL_ENTRY)&_ZN5S18C83v87Ev,
  (VTBL_ENTRY)&_ZN5S18C83v88Ev,
  (VTBL_ENTRY)&_ZN5S18C83v89Ev,
  (VTBL_ENTRY)&_ZN5S18C83v90Ev,
  (VTBL_ENTRY)&_ZN5S18C83v91Ev,
  (VTBL_ENTRY)&_ZN5S18C83v92Ev,
  (VTBL_ENTRY)&_ZN5S18C83v93Ev,
  (VTBL_ENTRY)&_ZN5S18C83v94Ev,
  (VTBL_ENTRY)&_ZN5S18C83v95Ev,
  (VTBL_ENTRY)&_ZN5S18C83v96Ev,
  (VTBL_ENTRY)&_ZN5S18C83v97Ev,
  (VTBL_ENTRY)&_ZN5S18C83v98Ev,
  (VTBL_ENTRY)&_ZN5S18C83v99Ev,
  (VTBL_ENTRY)&_ZN5S18C84v100Ev,
  (VTBL_ENTRY)&_ZN5S18C84v101Ev,
  (VTBL_ENTRY)&_ZN5S18C84v102Ev,
  (VTBL_ENTRY)&_ZN5S18C84v103Ev,
  (VTBL_ENTRY)&_ZN5S18C84v104Ev,
  (VTBL_ENTRY)&_ZN5S18C84v105Ev,
  (VTBL_ENTRY)&_ZN5S18C84v106Ev,
  (VTBL_ENTRY)&_ZN5S18C84v107Ev,
  (VTBL_ENTRY)&_ZN5S18C84v108Ev,
  (VTBL_ENTRY)&_ZN5S18C84v109Ev,
  (VTBL_ENTRY)&_ZN5S18C84v110Ev,
  (VTBL_ENTRY)&_ZN5S18C64v111Ev,
  (VTBL_ENTRY)&_ZN5S18C64v112Ev,
  (VTBL_ENTRY)&_ZN5S18C64v113Ev,
  (VTBL_ENTRY)&_ZN5S18C64v114Ev,
  (VTBL_ENTRY)&_ZN5S18C64v115Ev,
  (VTBL_ENTRY)&_ZN5S18C64v116Ev,
  (VTBL_ENTRY)&_ZN5S18C64v117Ev,
  (VTBL_ENTRY)&_ZN5S18C64v118Ev,
  (VTBL_ENTRY)&_ZN5S18C64v119Ev,
  (VTBL_ENTRY)&_ZN5S18C64v120Ev,
  (VTBL_ENTRY)&_ZN5S18C64v121Ev,
  (VTBL_ENTRY)&_ZN5S18C64v122Ev,
  (VTBL_ENTRY)&_ZN5S18C64v123Ev,
  (VTBL_ENTRY)&_ZN5S18C64v124Ev,
  (VTBL_ENTRY)&_ZN5S18C64v125Ev,
  (VTBL_ENTRY)&_ZN5S18C64v126Ev,
  (VTBL_ENTRY)&_ZN5S18C64v127Ev,
  (VTBL_ENTRY)&_ZN5S18C64v128Ev,
  (VTBL_ENTRY)&_ZN5S18C64v129Ev,
  (VTBL_ENTRY)&_ZN5S18C64v130Ev,
  (VTBL_ENTRY)&_ZN5S18C64v131Ev,
  (VTBL_ENTRY)&_ZN5S18C64v132Ev,
  (VTBL_ENTRY)&_ZN5S18C64v133Ev,
  (VTBL_ENTRY)&_ZN5S18C64v134Ev,
  (VTBL_ENTRY)&_ZN5S18C64v135Ev,
  (VTBL_ENTRY)&_ZN5S18C64v136Ev,
  (VTBL_ENTRY)&_ZN5S18C54v137Ev,
  (VTBL_ENTRY)&_ZN5S18C54v138Ev,
  (VTBL_ENTRY)&_ZN5S18C54v139Ev,
  (VTBL_ENTRY)&_ZN5S18C54v140Ev,
  (VTBL_ENTRY)&_ZN5S18C54v141Ev,
  (VTBL_ENTRY)&_ZN5S18C54v142Ev,
  (VTBL_ENTRY)&_ZN5S18C54v143Ev,
  (VTBL_ENTRY)&_ZN5S18C54v144Ev,
  (VTBL_ENTRY)&_ZN5S18C54v145Ev,
  (VTBL_ENTRY)&_ZN5S18C54v146Ev,
  (VTBL_ENTRY)&_ZN5S18C54v147Ev,
  (VTBL_ENTRY)&_ZN5S18C54v148Ev,
  (VTBL_ENTRY)&_ZN5S18C54v149Ev,
  (VTBL_ENTRY)&_ZN5S18C54v150Ev,
  (VTBL_ENTRY)&_ZN5S18C54v151Ev,
  (VTBL_ENTRY)&_ZN5S18C54v152Ev,
  (VTBL_ENTRY)&_ZN5S18C54v153Ev,
  (VTBL_ENTRY)&_ZN5S18C54v154Ev,
  (VTBL_ENTRY)&_ZN5S18C44v155Ev,
  (VTBL_ENTRY)&_ZN5S18C44v156Ev,
  (VTBL_ENTRY)&_ZN5S18C44v157Ev,
  (VTBL_ENTRY)&_ZN5S18C44v158Ev,
  (VTBL_ENTRY)&_ZN5S18C44v159Ev,
  (VTBL_ENTRY)&_ZN5S18C44v160Ev,
  (VTBL_ENTRY)&_ZN5S18C44v161Ev,
  (VTBL_ENTRY)&_ZN5S18C44v162Ev,
  (VTBL_ENTRY)&_ZN5S18C44v163Ev,
  (VTBL_ENTRY)&_ZN5S18C44v164Ev,
  (VTBL_ENTRY)&_ZN5S18C44v165Ev,
  (VTBL_ENTRY)&_ZN5S18C44v166Ev,
  (VTBL_ENTRY)&_ZN5S18C44v167Ev,
  (VTBL_ENTRY)&_ZN5S18C44v168Ev,
  (VTBL_ENTRY)&_ZN5S18C44v169Ev,
  (VTBL_ENTRY)&_ZN5S18C44v170Ev,
  (VTBL_ENTRY)&_ZN5S18C44v171Ev,
  (VTBL_ENTRY)&_ZN5S18C44v172Ev,
  (VTBL_ENTRY)&_ZN5S18C44v173Ev,
  (VTBL_ENTRY)&_ZN5S18C44v174Ev,
  (VTBL_ENTRY)&_ZN5S18C44v175Ev,
  (VTBL_ENTRY)&_ZN5S18C44v176Ev,
  (VTBL_ENTRY)&_ZN5S18C44v177Ev,
  (VTBL_ENTRY)&_ZN5S18C44v178Ev,
  (VTBL_ENTRY)&_ZN5S18C44v179Ev,
  (VTBL_ENTRY)&_ZN5S18C44v180Ev,
};
extern VTBL_ENTRY _ZTI5S18C4[];
extern  VTBL_ENTRY _ZTV5S18C4[];
Class_Descriptor cd_S18C4 = {  "S18C4", // class name
  bases_S18C4, 5,
  &(vtc_S18C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S18C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S18C4),181, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18C3  : S18C4 {
  ~S18C3(); // tgen
  S18C3(); // tgen
};
//SIG(-1 S18C3) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd m Fp Fi} 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 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 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}}


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

static void Test_S18C3()
{
  extern Class_Descriptor cd_S18C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18C3, buf);
    S18C3 *dp, &lv = *(dp=new (buf) S18C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18C3)");
    check_base_class_offset(lv, (S1C11_nt*)(S18C8*)(S18C7*)(S18C6*)(S18C5*)(S18C4*), 0, "S18C3");
    check_base_class_offset(lv, (S18C8*)(S18C7*)(S18C6*)(S18C5*)(S18C4*), 0, "S18C3");
    check_base_class_offset(lv, (S18C7*)(S18C6*)(S18C5*)(S18C4*), 0, "S18C3");
    check_base_class_offset(lv, (S18C6*)(S18C5*)(S18C4*), 0, "S18C3");
    check_base_class_offset(lv, (S18C5*)(S18C4*), 0, "S18C3");
    check_base_class_offset(lv, (S18C4*), 0, "S18C3");
    test_class_info(&lv, &cd_S18C3);
    dp->~S18C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18C3(Test_S18C3, "S18C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S18C3C1Ev();
extern void _ZN5S18C3D1Ev();
Name_Map name_map_S18C3[] = {
  NSPAIR(_ZN5S18C3C1Ev),
  NSPAIR(_ZN5S18C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S18C8;
extern VTBL_ENTRY _ZTI5S18C8[];
extern  VTBL_ENTRY _ZTV5S18C8[];
extern Class_Descriptor cd_S18C7;
extern VTBL_ENTRY _ZTI5S18C7[];
extern  VTBL_ENTRY _ZTV5S18C7[];
extern Class_Descriptor cd_S18C6;
extern VTBL_ENTRY _ZTI5S18C6[];
extern  VTBL_ENTRY _ZTV5S18C6[];
extern Class_Descriptor cd_S18C5;
extern VTBL_ENTRY _ZTI5S18C5[];
extern  VTBL_ENTRY _ZTV5S18C5[];
extern Class_Descriptor cd_S18C4;
extern VTBL_ENTRY _ZTI5S18C4[];
extern  VTBL_ENTRY _ZTV5S18C4[];
static Base_Class bases_S18C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S18C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S18C3[];
extern void _ZN5S18C3D1Ev();
extern void _ZN5S18C3D0Ev();
extern void _ZN5S18C82v4Ev();
extern void _ZN5S18C82v5Ev();
extern void _ZN5S18C82v6Ev();
extern void _ZN5S18C82v7Ev();
extern void _ZN5S18C82v8Ev();
extern void _ZN5S18C82v9Ev();
extern void _ZN5S18C83v10Ev();
extern void _ZN5S18C83v11Ev();
extern void _ZN5S18C83v12Ev();
extern void _ZN5S18C83v13Ev();
extern void _ZN5S18C83v14Ev();
extern void _ZN5S18C83v15Ev();
extern void _ZN5S18C83v16Ev();
extern void _ZN5S18C83v17Ev();
extern void _ZN5S18C83v18Ev();
extern void _ZN5S18C83v19Ev();
extern void _ZN5S18C83v20Ev();
extern void _ZN5S18C83v21Ev();
extern void _ZN5S18C83v22Ev();
extern void _ZN5S18C83v23Ev();
extern void _ZN5S18C83v24Ev();
extern void _ZN5S18C83v25Ev();
extern void _ZN5S18C83v26Ev();
extern void _ZN5S18C83v27Ev();
extern void _ZN5S18C83v28Ev();
extern void _ZN5S18C83v29Ev();
extern void _ZN5S18C83v30Ev();
extern void _ZN5S18C83v31Ev();
extern void _ZN5S18C83v32Ev();
extern void _ZN5S18C83v33Ev();
extern void _ZN5S18C83v34Ev();
extern void _ZN5S18C83v35Ev();
extern void _ZN5S18C83v36Ev();
extern void _ZN5S18C83v37Ev();
extern void _ZN5S18C83v38Ev();
extern void _ZN5S18C83v39Ev();
extern void _ZN5S18C83v40Ev();
extern void _ZN5S18C83v41Ev();
extern void _ZN5S18C83v42Ev();
extern void _ZN5S18C83v43Ev();
extern void _ZN5S18C83v44Ev();
extern void _ZN5S18C83v45Ev();
extern void _ZN5S18C83v46Ev();
extern void _ZN5S18C83v47Ev();
extern void _ZN5S18C83v48Ev();
extern void _ZN5S18C83v49Ev();
extern void _ZN5S18C83v50Ev();
extern void _ZN5S18C83v51Ev();
extern void _ZN5S18C83v52Ev();
extern void _ZN5S18C83v53Ev();
extern void _ZN5S18C83v54Ev();
extern void _ZN5S18C83v55Ev();
extern void _ZN5S18C83v56Ev();
extern void _ZN5S18C83v57Ev();
extern void _ZN5S18C83v58Ev();
extern void _ZN5S18C83v59Ev();
extern void _ZN5S18C83v60Ev();
extern void _ZN5S18C83v61Ev();
extern void _ZN5S18C83v62Ev();
extern void _ZN5S18C83v63Ev();
extern void _ZN5S18C83v64Ev();
extern void _ZN5S18C83v65Ev();
extern void _ZN5S18C83v66Ev();
extern void _ZN5S18C83v67Ev();
extern void _ZN5S18C83v68Ev();
extern void _ZN5S18C83v69Ev();
extern void _ZN5S18C83v70Ev();
extern void _ZN5S18C83v71Ev();
extern void _ZN5S18C83v72Ev();
extern void _ZN5S18C83v73Ev();
extern void _ZN5S18C83v74Ev();
extern void _ZN5S18C83v75Ev();
extern void _ZN5S18C83v76Ev();
extern void _ZN5S18C83v77Ev();
extern void _ZN5S18C83v78Ev();
extern void _ZN5S18C83v79Ev();
extern void _ZN5S18C83v80Ev();
extern void _ZN5S18C83v81Ev();
extern void _ZN5S18C83v82Ev();
extern void _ZN5S18C83v83Ev();
extern void _ZN5S18C83v84Ev();
extern void _ZN5S18C83v85Ev();
extern void _ZN5S18C83v86Ev();
extern void _ZN5S18C83v87Ev();
extern void _ZN5S18C83v88Ev();
extern void _ZN5S18C83v89Ev();
extern void _ZN5S18C83v90Ev();
extern void _ZN5S18C83v91Ev();
extern void _ZN5S18C83v92Ev();
extern void _ZN5S18C83v93Ev();
extern void _ZN5S18C83v94Ev();
extern void _ZN5S18C83v95Ev();
extern void _ZN5S18C83v96Ev();
extern void _ZN5S18C83v97Ev();
extern void _ZN5S18C83v98Ev();
extern void _ZN5S18C83v99Ev();
extern void _ZN5S18C84v100Ev();
extern void _ZN5S18C84v101Ev();
extern void _ZN5S18C84v102Ev();
extern void _ZN5S18C84v103Ev();
extern void _ZN5S18C84v104Ev();
extern void _ZN5S18C84v105Ev();
extern void _ZN5S18C84v106Ev();
extern void _ZN5S18C84v107Ev();
extern void _ZN5S18C84v108Ev();
extern void _ZN5S18C84v109Ev();
extern void _ZN5S18C84v110Ev();
extern void _ZN5S18C64v111Ev();
extern void _ZN5S18C64v112Ev();
extern void _ZN5S18C64v113Ev();
extern void _ZN5S18C64v114Ev();
extern void _ZN5S18C64v115Ev();
extern void _ZN5S18C64v116Ev();
extern void _ZN5S18C64v117Ev();
extern void _ZN5S18C64v118Ev();
extern void _ZN5S18C64v119Ev();
extern void _ZN5S18C64v120Ev();
extern void _ZN5S18C64v121Ev();
extern void _ZN5S18C64v122Ev();
extern void _ZN5S18C64v123Ev();
extern void _ZN5S18C64v124Ev();
extern void _ZN5S18C64v125Ev();
extern void _ZN5S18C64v126Ev();
extern void _ZN5S18C64v127Ev();
extern void _ZN5S18C64v128Ev();
extern void _ZN5S18C64v129Ev();
extern void _ZN5S18C64v130Ev();
extern void _ZN5S18C64v131Ev();
extern void _ZN5S18C64v132Ev();
extern void _ZN5S18C64v133Ev();
extern void _ZN5S18C64v134Ev();
extern void _ZN5S18C64v135Ev();
extern void _ZN5S18C64v136Ev();
extern void _ZN5S18C54v137Ev();
extern void _ZN5S18C54v138Ev();
extern void _ZN5S18C54v139Ev();
extern void _ZN5S18C54v140Ev();
extern void _ZN5S18C54v141Ev();
extern void _ZN5S18C54v142Ev();
extern void _ZN5S18C54v143Ev();
extern void _ZN5S18C54v144Ev();
extern void _ZN5S18C54v145Ev();
extern void _ZN5S18C54v146Ev();
extern void _ZN5S18C54v147Ev();
extern void _ZN5S18C54v148Ev();
extern void _ZN5S18C54v149Ev();
extern void _ZN5S18C54v150Ev();
extern void _ZN5S18C54v151Ev();
extern void _ZN5S18C54v152Ev();
extern void _ZN5S18C54v153Ev();
extern void _ZN5S18C54v154Ev();
extern void _ZN5S18C44v155Ev();
extern void _ZN5S18C44v156Ev();
extern void _ZN5S18C44v157Ev();
extern void _ZN5S18C44v158Ev();
extern void _ZN5S18C44v159Ev();
extern void _ZN5S18C44v160Ev();
extern void _ZN5S18C44v161Ev();
extern void _ZN5S18C44v162Ev();
extern void _ZN5S18C44v163Ev();
extern void _ZN5S18C44v164Ev();
extern void _ZN5S18C44v165Ev();
extern void _ZN5S18C44v166Ev();
extern void _ZN5S18C44v167Ev();
extern void _ZN5S18C44v168Ev();
extern void _ZN5S18C44v169Ev();
extern void _ZN5S18C44v170Ev();
extern void _ZN5S18C44v171Ev();
extern void _ZN5S18C44v172Ev();
extern void _ZN5S18C44v173Ev();
extern void _ZN5S18C44v174Ev();
extern void _ZN5S18C44v175Ev();
extern void _ZN5S18C44v176Ev();
extern void _ZN5S18C44v177Ev();
extern void _ZN5S18C44v178Ev();
extern void _ZN5S18C44v179Ev();
extern void _ZN5S18C44v180Ev();
static  VTBL_ENTRY vtc_S18C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S18C3[0]),
  (VTBL_ENTRY)&_ZN5S18C3D1Ev,
  (VTBL_ENTRY)&_ZN5S18C3D0Ev,
  (VTBL_ENTRY)&_ZN5S18C82v4Ev,
  (VTBL_ENTRY)&_ZN5S18C82v5Ev,
  (VTBL_ENTRY)&_ZN5S18C82v6Ev,
  (VTBL_ENTRY)&_ZN5S18C82v7Ev,
  (VTBL_ENTRY)&_ZN5S18C82v8Ev,
  (VTBL_ENTRY)&_ZN5S18C82v9Ev,
  (VTBL_ENTRY)&_ZN5S18C83v10Ev,
  (VTBL_ENTRY)&_ZN5S18C83v11Ev,
  (VTBL_ENTRY)&_ZN5S18C83v12Ev,
  (VTBL_ENTRY)&_ZN5S18C83v13Ev,
  (VTBL_ENTRY)&_ZN5S18C83v14Ev,
  (VTBL_ENTRY)&_ZN5S18C83v15Ev,
  (VTBL_ENTRY)&_ZN5S18C83v16Ev,
  (VTBL_ENTRY)&_ZN5S18C83v17Ev,
  (VTBL_ENTRY)&_ZN5S18C83v18Ev,
  (VTBL_ENTRY)&_ZN5S18C83v19Ev,
  (VTBL_ENTRY)&_ZN5S18C83v20Ev,
  (VTBL_ENTRY)&_ZN5S18C83v21Ev,
  (VTBL_ENTRY)&_ZN5S18C83v22Ev,
  (VTBL_ENTRY)&_ZN5S18C83v23Ev,
  (VTBL_ENTRY)&_ZN5S18C83v24Ev,
  (VTBL_ENTRY)&_ZN5S18C83v25Ev,
  (VTBL_ENTRY)&_ZN5S18C83v26Ev,
  (VTBL_ENTRY)&_ZN5S18C83v27Ev,
  (VTBL_ENTRY)&_ZN5S18C83v28Ev,
  (VTBL_ENTRY)&_ZN5S18C83v29Ev,
  (VTBL_ENTRY)&_ZN5S18C83v30Ev,
  (VTBL_ENTRY)&_ZN5S18C83v31Ev,
  (VTBL_ENTRY)&_ZN5S18C83v32Ev,
  (VTBL_ENTRY)&_ZN5S18C83v33Ev,
  (VTBL_ENTRY)&_ZN5S18C83v34Ev,
  (VTBL_ENTRY)&_ZN5S18C83v35Ev,
  (VTBL_ENTRY)&_ZN5S18C83v36Ev,
  (VTBL_ENTRY)&_ZN5S18C83v37Ev,
  (VTBL_ENTRY)&_ZN5S18C83v38Ev,
  (VTBL_ENTRY)&_ZN5S18C83v39Ev,
  (VTBL_ENTRY)&_ZN5S18C83v40Ev,
  (VTBL_ENTRY)&_ZN5S18C83v41Ev,
  (VTBL_ENTRY)&_ZN5S18C83v42Ev,
  (VTBL_ENTRY)&_ZN5S18C83v43Ev,
  (VTBL_ENTRY)&_ZN5S18C83v44Ev,
  (VTBL_ENTRY)&_ZN5S18C83v45Ev,
  (VTBL_ENTRY)&_ZN5S18C83v46Ev,
  (VTBL_ENTRY)&_ZN5S18C83v47Ev,
  (VTBL_ENTRY)&_ZN5S18C83v48Ev,
  (VTBL_ENTRY)&_ZN5S18C83v49Ev,
  (VTBL_ENTRY)&_ZN5S18C83v50Ev,
  (VTBL_ENTRY)&_ZN5S18C83v51Ev,
  (VTBL_ENTRY)&_ZN5S18C83v52Ev,
  (VTBL_ENTRY)&_ZN5S18C83v53Ev,
  (VTBL_ENTRY)&_ZN5S18C83v54Ev,
  (VTBL_ENTRY)&_ZN5S18C83v55Ev,
  (VTBL_ENTRY)&_ZN5S18C83v56Ev,
  (VTBL_ENTRY)&_ZN5S18C83v57Ev,
  (VTBL_ENTRY)&_ZN5S18C83v58Ev,
  (VTBL_ENTRY)&_ZN5S18C83v59Ev,
  (VTBL_ENTRY)&_ZN5S18C83v60Ev,
  (VTBL_ENTRY)&_ZN5S18C83v61Ev,
  (VTBL_ENTRY)&_ZN5S18C83v62Ev,
  (VTBL_ENTRY)&_ZN5S18C83v63Ev,
  (VTBL_ENTRY)&_ZN5S18C83v64Ev,
  (VTBL_ENTRY)&_ZN5S18C83v65Ev,
  (VTBL_ENTRY)&_ZN5S18C83v66Ev,
  (VTBL_ENTRY)&_ZN5S18C83v67Ev,
  (VTBL_ENTRY)&_ZN5S18C83v68Ev,
  (VTBL_ENTRY)&_ZN5S18C83v69Ev,
  (VTBL_ENTRY)&_ZN5S18C83v70Ev,
  (VTBL_ENTRY)&_ZN5S18C83v71Ev,
  (VTBL_ENTRY)&_ZN5S18C83v72Ev,
  (VTBL_ENTRY)&_ZN5S18C83v73Ev,
  (VTBL_ENTRY)&_ZN5S18C83v74Ev,
  (VTBL_ENTRY)&_ZN5S18C83v75Ev,
  (VTBL_ENTRY)&_ZN5S18C83v76Ev,
  (VTBL_ENTRY)&_ZN5S18C83v77Ev,
  (VTBL_ENTRY)&_ZN5S18C83v78Ev,
  (VTBL_ENTRY)&_ZN5S18C83v79Ev,
  (VTBL_ENTRY)&_ZN5S18C83v80Ev,
  (VTBL_ENTRY)&_ZN5S18C83v81Ev,
  (VTBL_ENTRY)&_ZN5S18C83v82Ev,
  (VTBL_ENTRY)&_ZN5S18C83v83Ev,
  (VTBL_ENTRY)&_ZN5S18C83v84Ev,
  (VTBL_ENTRY)&_ZN5S18C83v85Ev,
  (VTBL_ENTRY)&_ZN5S18C83v86Ev,
  (VTBL_ENTRY)&_ZN5S18C83v87Ev,
  (VTBL_ENTRY)&_ZN5S18C83v88Ev,
  (VTBL_ENTRY)&_ZN5S18C83v89Ev,
  (VTBL_ENTRY)&_ZN5S18C83v90Ev,
  (VTBL_ENTRY)&_ZN5S18C83v91Ev,
  (VTBL_ENTRY)&_ZN5S18C83v92Ev,
  (VTBL_ENTRY)&_ZN5S18C83v93Ev,
  (VTBL_ENTRY)&_ZN5S18C83v94Ev,
  (VTBL_ENTRY)&_ZN5S18C83v95Ev,
  (VTBL_ENTRY)&_ZN5S18C83v96Ev,
  (VTBL_ENTRY)&_ZN5S18C83v97Ev,
  (VTBL_ENTRY)&_ZN5S18C83v98Ev,
  (VTBL_ENTRY)&_ZN5S18C83v99Ev,
  (VTBL_ENTRY)&_ZN5S18C84v100Ev,
  (VTBL_ENTRY)&_ZN5S18C84v101Ev,
  (VTBL_ENTRY)&_ZN5S18C84v102Ev,
  (VTBL_ENTRY)&_ZN5S18C84v103Ev,
  (VTBL_ENTRY)&_ZN5S18C84v104Ev,
  (VTBL_ENTRY)&_ZN5S18C84v105Ev,
  (VTBL_ENTRY)&_ZN5S18C84v106Ev,
  (VTBL_ENTRY)&_ZN5S18C84v107Ev,
  (VTBL_ENTRY)&_ZN5S18C84v108Ev,
  (VTBL_ENTRY)&_ZN5S18C84v109Ev,
  (VTBL_ENTRY)&_ZN5S18C84v110Ev,
  (VTBL_ENTRY)&_ZN5S18C64v111Ev,
  (VTBL_ENTRY)&_ZN5S18C64v112Ev,
  (VTBL_ENTRY)&_ZN5S18C64v113Ev,
  (VTBL_ENTRY)&_ZN5S18C64v114Ev,
  (VTBL_ENTRY)&_ZN5S18C64v115Ev,
  (VTBL_ENTRY)&_ZN5S18C64v116Ev,
  (VTBL_ENTRY)&_ZN5S18C64v117Ev,
  (VTBL_ENTRY)&_ZN5S18C64v118Ev,
  (VTBL_ENTRY)&_ZN5S18C64v119Ev,
  (VTBL_ENTRY)&_ZN5S18C64v120Ev,
  (VTBL_ENTRY)&_ZN5S18C64v121Ev,
  (VTBL_ENTRY)&_ZN5S18C64v122Ev,
  (VTBL_ENTRY)&_ZN5S18C64v123Ev,
  (VTBL_ENTRY)&_ZN5S18C64v124Ev,
  (VTBL_ENTRY)&_ZN5S18C64v125Ev,
  (VTBL_ENTRY)&_ZN5S18C64v126Ev,
  (VTBL_ENTRY)&_ZN5S18C64v127Ev,
  (VTBL_ENTRY)&_ZN5S18C64v128Ev,
  (VTBL_ENTRY)&_ZN5S18C64v129Ev,
  (VTBL_ENTRY)&_ZN5S18C64v130Ev,
  (VTBL_ENTRY)&_ZN5S18C64v131Ev,
  (VTBL_ENTRY)&_ZN5S18C64v132Ev,
  (VTBL_ENTRY)&_ZN5S18C64v133Ev,
  (VTBL_ENTRY)&_ZN5S18C64v134Ev,
  (VTBL_ENTRY)&_ZN5S18C64v135Ev,
  (VTBL_ENTRY)&_ZN5S18C64v136Ev,
  (VTBL_ENTRY)&_ZN5S18C54v137Ev,
  (VTBL_ENTRY)&_ZN5S18C54v138Ev,
  (VTBL_ENTRY)&_ZN5S18C54v139Ev,
  (VTBL_ENTRY)&_ZN5S18C54v140Ev,
  (VTBL_ENTRY)&_ZN5S18C54v141Ev,
  (VTBL_ENTRY)&_ZN5S18C54v142Ev,
  (VTBL_ENTRY)&_ZN5S18C54v143Ev,
  (VTBL_ENTRY)&_ZN5S18C54v144Ev,
  (VTBL_ENTRY)&_ZN5S18C54v145Ev,
  (VTBL_ENTRY)&_ZN5S18C54v146Ev,
  (VTBL_ENTRY)&_ZN5S18C54v147Ev,
  (VTBL_ENTRY)&_ZN5S18C54v148Ev,
  (VTBL_ENTRY)&_ZN5S18C54v149Ev,
  (VTBL_ENTRY)&_ZN5S18C54v150Ev,
  (VTBL_ENTRY)&_ZN5S18C54v151Ev,
  (VTBL_ENTRY)&_ZN5S18C54v152Ev,
  (VTBL_ENTRY)&_ZN5S18C54v153Ev,
  (VTBL_ENTRY)&_ZN5S18C54v154Ev,
  (VTBL_ENTRY)&_ZN5S18C44v155Ev,
  (VTBL_ENTRY)&_ZN5S18C44v156Ev,
  (VTBL_ENTRY)&_ZN5S18C44v157Ev,
  (VTBL_ENTRY)&_ZN5S18C44v158Ev,
  (VTBL_ENTRY)&_ZN5S18C44v159Ev,
  (VTBL_ENTRY)&_ZN5S18C44v160Ev,
  (VTBL_ENTRY)&_ZN5S18C44v161Ev,
  (VTBL_ENTRY)&_ZN5S18C44v162Ev,
  (VTBL_ENTRY)&_ZN5S18C44v163Ev,
  (VTBL_ENTRY)&_ZN5S18C44v164Ev,
  (VTBL_ENTRY)&_ZN5S18C44v165Ev,
  (VTBL_ENTRY)&_ZN5S18C44v166Ev,
  (VTBL_ENTRY)&_ZN5S18C44v167Ev,
  (VTBL_ENTRY)&_ZN5S18C44v168Ev,
  (VTBL_ENTRY)&_ZN5S18C44v169Ev,
  (VTBL_ENTRY)&_ZN5S18C44v170Ev,
  (VTBL_ENTRY)&_ZN5S18C44v171Ev,
  (VTBL_ENTRY)&_ZN5S18C44v172Ev,
  (VTBL_ENTRY)&_ZN5S18C44v173Ev,
  (VTBL_ENTRY)&_ZN5S18C44v174Ev,
  (VTBL_ENTRY)&_ZN5S18C44v175Ev,
  (VTBL_ENTRY)&_ZN5S18C44v176Ev,
  (VTBL_ENTRY)&_ZN5S18C44v177Ev,
  (VTBL_ENTRY)&_ZN5S18C44v178Ev,
  (VTBL_ENTRY)&_ZN5S18C44v179Ev,
  (VTBL_ENTRY)&_ZN5S18C44v180Ev,
};
extern VTBL_ENTRY _ZTI5S18C3[];
extern  VTBL_ENTRY _ZTV5S18C3[];
Class_Descriptor cd_S18C3 = {  "S18C3", // class name
  bases_S18C3, 6,
  &(vtc_S18C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S18C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S18C3),181, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18C2  : S18C3 {
  virtual void  v181(); // _ZN5S18C24v181Ev
  virtual void  v182(); // _ZN5S18C24v182Ev
  virtual void  v183(); // _ZN5S18C24v183Ev
  virtual void  v184(); // _ZN5S18C24v184Ev
  virtual void  v185(); // _ZN5S18C24v185Ev
  virtual void  v186(); // _ZN5S18C24v186Ev
  ~S18C2(); // tgen
  S18C2(); // tgen
};
//SIG(-1 S18C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ vd m Fp Fi} 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 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 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}} v1 v2 v3 v4 v5 v6}


void  S18C2 ::v181(){vfunc_called(this, "_ZN5S18C24v181Ev");}
void  S18C2 ::v182(){vfunc_called(this, "_ZN5S18C24v182Ev");}
void  S18C2 ::v183(){vfunc_called(this, "_ZN5S18C24v183Ev");}
void  S18C2 ::v184(){vfunc_called(this, "_ZN5S18C24v184Ev");}
void  S18C2 ::v185(){vfunc_called(this, "_ZN5S18C24v185Ev");}
void  S18C2 ::v186(){vfunc_called(this, "_ZN5S18C24v186Ev");}
S18C2 ::~S18C2(){ note_dtor("S18C2", this);} // tgen
S18C2 ::S18C2(){ note_ctor("S18C2", this);} // tgen

static void Test_S18C2()
{
  extern Class_Descriptor cd_S18C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18C2, buf);
    S18C2 *dp, &lv = *(dp=new (buf) S18C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S18C8*)(S18C7*)(S18C6*)(S18C5*)(S18C4*)(S18C3*), 0, "S18C2");
    check_base_class_offset(lv, (S18C8*)(S18C7*)(S18C6*)(S18C5*)(S18C4*)(S18C3*), 0, "S18C2");
    check_base_class_offset(lv, (S18C7*)(S18C6*)(S18C5*)(S18C4*)(S18C3*), 0, "S18C2");
    check_base_class_offset(lv, (S18C6*)(S18C5*)(S18C4*)(S18C3*), 0, "S18C2");
    check_base_class_offset(lv, (S18C5*)(S18C4*)(S18C3*), 0, "S18C2");
    check_base_class_offset(lv, (S18C4*)(S18C3*), 0, "S18C2");
    check_base_class_offset(lv, (S18C3*), 0, "S18C2");
    test_class_info(&lv, &cd_S18C2);
    dp->~S18C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18C2(Test_S18C2, "S18C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S18C2C1Ev();
extern void _ZN5S18C2D1Ev();
Name_Map name_map_S18C2[] = {
  NSPAIR(_ZN5S18C2C1Ev),
  NSPAIR(_ZN5S18C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S18C8;
extern VTBL_ENTRY _ZTI5S18C8[];
extern  VTBL_ENTRY _ZTV5S18C8[];
extern Class_Descriptor cd_S18C7;
extern VTBL_ENTRY _ZTI5S18C7[];
extern  VTBL_ENTRY _ZTV5S18C7[];
extern Class_Descriptor cd_S18C6;
extern VTBL_ENTRY _ZTI5S18C6[];
extern  VTBL_ENTRY _ZTV5S18C6[];
extern Class_Descriptor cd_S18C5;
extern VTBL_ENTRY _ZTI5S18C5[];
extern  VTBL_ENTRY _ZTV5S18C5[];
extern Class_Descriptor cd_S18C4;
extern VTBL_ENTRY _ZTI5S18C4[];
extern  VTBL_ENTRY _ZTV5S18C4[];
extern Class_Descriptor cd_S18C3;
extern VTBL_ENTRY _ZTI5S18C3[];
extern  VTBL_ENTRY _ZTV5S18C3[];
static Base_Class bases_S18C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S18C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S18C2[];
extern void _ZN5S18C2D1Ev();
extern void _ZN5S18C2D0Ev();
extern void _ZN5S18C82v4Ev();
extern void _ZN5S18C82v5Ev();
extern void _ZN5S18C82v6Ev();
extern void _ZN5S18C82v7Ev();
extern void _ZN5S18C82v8Ev();
extern void _ZN5S18C82v9Ev();
extern void _ZN5S18C83v10Ev();
extern void _ZN5S18C83v11Ev();
extern void _ZN5S18C83v12Ev();
extern void _ZN5S18C83v13Ev();
extern void _ZN5S18C83v14Ev();
extern void _ZN5S18C83v15Ev();
extern void _ZN5S18C83v16Ev();
extern void _ZN5S18C83v17Ev();
extern void _ZN5S18C83v18Ev();
extern void _ZN5S18C83v19Ev();
extern void _ZN5S18C83v20Ev();
extern void _ZN5S18C83v21Ev();
extern void _ZN5S18C83v22Ev();
extern void _ZN5S18C83v23Ev();
extern void _ZN5S18C83v24Ev();
extern void _ZN5S18C83v25Ev();
extern void _ZN5S18C83v26Ev();
extern void _ZN5S18C83v27Ev();
extern void _ZN5S18C83v28Ev();
extern void _ZN5S18C83v29Ev();
extern void _ZN5S18C83v30Ev();
extern void _ZN5S18C83v31Ev();
extern void _ZN5S18C83v32Ev();
extern void _ZN5S18C83v33Ev();
extern void _ZN5S18C83v34Ev();
extern void _ZN5S18C83v35Ev();
extern void _ZN5S18C83v36Ev();
extern void _ZN5S18C83v37Ev();
extern void _ZN5S18C83v38Ev();
extern void _ZN5S18C83v39Ev();
extern void _ZN5S18C83v40Ev();
extern void _ZN5S18C83v41Ev();
extern void _ZN5S18C83v42Ev();
extern void _ZN5S18C83v43Ev();
extern void _ZN5S18C83v44Ev();
extern void _ZN5S18C83v45Ev();
extern void _ZN5S18C83v46Ev();
extern void _ZN5S18C83v47Ev();
extern void _ZN5S18C83v48Ev();
extern void _ZN5S18C83v49Ev();
extern void _ZN5S18C83v50Ev();
extern void _ZN5S18C83v51Ev();
extern void _ZN5S18C83v52Ev();
extern void _ZN5S18C83v53Ev();
extern void _ZN5S18C83v54Ev();
extern void _ZN5S18C83v55Ev();
extern void _ZN5S18C83v56Ev();
extern void _ZN5S18C83v57Ev();
extern void _ZN5S18C83v58Ev();
extern void _ZN5S18C83v59Ev();
extern void _ZN5S18C83v60Ev();
extern void _ZN5S18C83v61Ev();
extern void _ZN5S18C83v62Ev();
extern void _ZN5S18C83v63Ev();
extern void _ZN5S18C83v64Ev();
extern void _ZN5S18C83v65Ev();
extern void _ZN5S18C83v66Ev();
extern void _ZN5S18C83v67Ev();
extern void _ZN5S18C83v68Ev();
extern void _ZN5S18C83v69Ev();
extern void _ZN5S18C83v70Ev();
extern void _ZN5S18C83v71Ev();
extern void _ZN5S18C83v72Ev();
extern void _ZN5S18C83v73Ev();
extern void _ZN5S18C83v74Ev();
extern void _ZN5S18C83v75Ev();
extern void _ZN5S18C83v76Ev();
extern void _ZN5S18C83v77Ev();
extern void _ZN5S18C83v78Ev();
extern void _ZN5S18C83v79Ev();
extern void _ZN5S18C83v80Ev();
extern void _ZN5S18C83v81Ev();
extern void _ZN5S18C83v82Ev();
extern void _ZN5S18C83v83Ev();
extern void _ZN5S18C83v84Ev();
extern void _ZN5S18C83v85Ev();
extern void _ZN5S18C83v86Ev();
extern void _ZN5S18C83v87Ev();
extern void _ZN5S18C83v88Ev();
extern void _ZN5S18C83v89Ev();
extern void _ZN5S18C83v90Ev();
extern void _ZN5S18C83v91Ev();
extern void _ZN5S18C83v92Ev();
extern void _ZN5S18C83v93Ev();
extern void _ZN5S18C83v94Ev();
extern void _ZN5S18C83v95Ev();
extern void _ZN5S18C83v96Ev();
extern void _ZN5S18C83v97Ev();
extern void _ZN5S18C83v98Ev();
extern void _ZN5S18C83v99Ev();
extern void _ZN5S18C84v100Ev();
extern void _ZN5S18C84v101Ev();
extern void _ZN5S18C84v102Ev();
extern void _ZN5S18C84v103Ev();
extern void _ZN5S18C84v104Ev();
extern void _ZN5S18C84v105Ev();
extern void _ZN5S18C84v106Ev();
extern void _ZN5S18C84v107Ev();
extern void _ZN5S18C84v108Ev();
extern void _ZN5S18C84v109Ev();
extern void _ZN5S18C84v110Ev();
extern void _ZN5S18C64v111Ev();
extern void _ZN5S18C64v112Ev();
extern void _ZN5S18C64v113Ev();
extern void _ZN5S18C64v114Ev();
extern void _ZN5S18C64v115Ev();
extern void _ZN5S18C64v116Ev();
extern void _ZN5S18C64v117Ev();
extern void _ZN5S18C64v118Ev();
extern void _ZN5S18C64v119Ev();
extern void _ZN5S18C64v120Ev();
extern void _ZN5S18C64v121Ev();
extern void _ZN5S18C64v122Ev();
extern void _ZN5S18C64v123Ev();
extern void _ZN5S18C64v124Ev();
extern void _ZN5S18C64v125Ev();
extern void _ZN5S18C64v126Ev();
extern void _ZN5S18C64v127Ev();
extern void _ZN5S18C64v128Ev();
extern void _ZN5S18C64v129Ev();
extern void _ZN5S18C64v130Ev();
extern void _ZN5S18C64v131Ev();
extern void _ZN5S18C64v132Ev();
extern void _ZN5S18C64v133Ev();
extern void _ZN5S18C64v134Ev();
extern void _ZN5S18C64v135Ev();
extern void _ZN5S18C64v136Ev();
extern void _ZN5S18C54v137Ev();
extern void _ZN5S18C54v138Ev();
extern void _ZN5S18C54v139Ev();
extern void _ZN5S18C54v140Ev();
extern void _ZN5S18C54v141Ev();
extern void _ZN5S18C54v142Ev();
extern void _ZN5S18C54v143Ev();
extern void _ZN5S18C54v144Ev();
extern void _ZN5S18C54v145Ev();
extern void _ZN5S18C54v146Ev();
extern void _ZN5S18C54v147Ev();
extern void _ZN5S18C54v148Ev();
extern void _ZN5S18C54v149Ev();
extern void _ZN5S18C54v150Ev();
extern void _ZN5S18C54v151Ev();
extern void _ZN5S18C54v152Ev();
extern void _ZN5S18C54v153Ev();
extern void _ZN5S18C54v154Ev();
extern void _ZN5S18C44v155Ev();
extern void _ZN5S18C44v156Ev();
extern void _ZN5S18C44v157Ev();
extern void _ZN5S18C44v158Ev();
extern void _ZN5S18C44v159Ev();
extern void _ZN5S18C44v160Ev();
extern void _ZN5S18C44v161Ev();
extern void _ZN5S18C44v162Ev();
extern void _ZN5S18C44v163Ev();
extern void _ZN5S18C44v164Ev();
extern void _ZN5S18C44v165Ev();
extern void _ZN5S18C44v166Ev();
extern void _ZN5S18C44v167Ev();
extern void _ZN5S18C44v168Ev();
extern void _ZN5S18C44v169Ev();
extern void _ZN5S18C44v170Ev();
extern void _ZN5S18C44v171Ev();
extern void _ZN5S18C44v172Ev();
extern void _ZN5S18C44v173Ev();
extern void _ZN5S18C44v174Ev();
extern void _ZN5S18C44v175Ev();
extern void _ZN5S18C44v176Ev();
extern void _ZN5S18C44v177Ev();
extern void _ZN5S18C44v178Ev();
extern void _ZN5S18C44v179Ev();
extern void _ZN5S18C44v180Ev();
extern void _ZN5S18C24v181Ev();
extern void _ZN5S18C24v182Ev();
extern void _ZN5S18C24v183Ev();
extern void _ZN5S18C24v184Ev();
extern void _ZN5S18C24v185Ev();
extern void _ZN5S18C24v186Ev();
static  VTBL_ENTRY vtc_S18C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S18C2[0]),
  (VTBL_ENTRY)&_ZN5S18C2D1Ev,
  (VTBL_ENTRY)&_ZN5S18C2D0Ev,
  (VTBL_ENTRY)&_ZN5S18C82v4Ev,
  (VTBL_ENTRY)&_ZN5S18C82v5Ev,
  (VTBL_ENTRY)&_ZN5S18C82v6Ev,
  (VTBL_ENTRY)&_ZN5S18C82v7Ev,
  (VTBL_ENTRY)&_ZN5S18C82v8Ev,
  (VTBL_ENTRY)&_ZN5S18C82v9Ev,
  (VTBL_ENTRY)&_ZN5S18C83v10Ev,
  (VTBL_ENTRY)&_ZN5S18C83v11Ev,
  (VTBL_ENTRY)&_ZN5S18C83v12Ev,
  (VTBL_ENTRY)&_ZN5S18C83v13Ev,
  (VTBL_ENTRY)&_ZN5S18C83v14Ev,
  (VTBL_ENTRY)&_ZN5S18C83v15Ev,
  (VTBL_ENTRY)&_ZN5S18C83v16Ev,
  (VTBL_ENTRY)&_ZN5S18C83v17Ev,
  (VTBL_ENTRY)&_ZN5S18C83v18Ev,
  (VTBL_ENTRY)&_ZN5S18C83v19Ev,
  (VTBL_ENTRY)&_ZN5S18C83v20Ev,
  (VTBL_ENTRY)&_ZN5S18C83v21Ev,
  (VTBL_ENTRY)&_ZN5S18C83v22Ev,
  (VTBL_ENTRY)&_ZN5S18C83v23Ev,
  (VTBL_ENTRY)&_ZN5S18C83v24Ev,
  (VTBL_ENTRY)&_ZN5S18C83v25Ev,
  (VTBL_ENTRY)&_ZN5S18C83v26Ev,
  (VTBL_ENTRY)&_ZN5S18C83v27Ev,
  (VTBL_ENTRY)&_ZN5S18C83v28Ev,
  (VTBL_ENTRY)&_ZN5S18C83v29Ev,
  (VTBL_ENTRY)&_ZN5S18C83v30Ev,
  (VTBL_ENTRY)&_ZN5S18C83v31Ev,
  (VTBL_ENTRY)&_ZN5S18C83v32Ev,
  (VTBL_ENTRY)&_ZN5S18C83v33Ev,
  (VTBL_ENTRY)&_ZN5S18C83v34Ev,
  (VTBL_ENTRY)&_ZN5S18C83v35Ev,
  (VTBL_ENTRY)&_ZN5S18C83v36Ev,
  (VTBL_ENTRY)&_ZN5S18C83v37Ev,
  (VTBL_ENTRY)&_ZN5S18C83v38Ev,
  (VTBL_ENTRY)&_ZN5S18C83v39Ev,
  (VTBL_ENTRY)&_ZN5S18C83v40Ev,
  (VTBL_ENTRY)&_ZN5S18C83v41Ev,
  (VTBL_ENTRY)&_ZN5S18C83v42Ev,
  (VTBL_ENTRY)&_ZN5S18C83v43Ev,
  (VTBL_ENTRY)&_ZN5S18C83v44Ev,
  (VTBL_ENTRY)&_ZN5S18C83v45Ev,
  (VTBL_ENTRY)&_ZN5S18C83v46Ev,
  (VTBL_ENTRY)&_ZN5S18C83v47Ev,
  (VTBL_ENTRY)&_ZN5S18C83v48Ev,
  (VTBL_ENTRY)&_ZN5S18C83v49Ev,
  (VTBL_ENTRY)&_ZN5S18C83v50Ev,
  (VTBL_ENTRY)&_ZN5S18C83v51Ev,
  (VTBL_ENTRY)&_ZN5S18C83v52Ev,
  (VTBL_ENTRY)&_ZN5S18C83v53Ev,
  (VTBL_ENTRY)&_ZN5S18C83v54Ev,
  (VTBL_ENTRY)&_ZN5S18C83v55Ev,
  (VTBL_ENTRY)&_ZN5S18C83v56Ev,
  (VTBL_ENTRY)&_ZN5S18C83v57Ev,
  (VTBL_ENTRY)&_ZN5S18C83v58Ev,
  (VTBL_ENTRY)&_ZN5S18C83v59Ev,
  (VTBL_ENTRY)&_ZN5S18C83v60Ev,
  (VTBL_ENTRY)&_ZN5S18C83v61Ev,
  (VTBL_ENTRY)&_ZN5S18C83v62Ev,
  (VTBL_ENTRY)&_ZN5S18C83v63Ev,
  (VTBL_ENTRY)&_ZN5S18C83v64Ev,
  (VTBL_ENTRY)&_ZN5S18C83v65Ev,
  (VTBL_ENTRY)&_ZN5S18C83v66Ev,
  (VTBL_ENTRY)&_ZN5S18C83v67Ev,
  (VTBL_ENTRY)&_ZN5S18C83v68Ev,
  (VTBL_ENTRY)&_ZN5S18C83v69Ev,
  (VTBL_ENTRY)&_ZN5S18C83v70Ev,
  (VTBL_ENTRY)&_ZN5S18C83v71Ev,
  (VTBL_ENTRY)&_ZN5S18C83v72Ev,
  (VTBL_ENTRY)&_ZN5S18C83v73Ev,
  (VTBL_ENTRY)&_ZN5S18C83v74Ev,
  (VTBL_ENTRY)&_ZN5S18C83v75Ev,
  (VTBL_ENTRY)&_ZN5S18C83v76Ev,
  (VTBL_ENTRY)&_ZN5S18C83v77Ev,
  (VTBL_ENTRY)&_ZN5S18C83v78Ev,
  (VTBL_ENTRY)&_ZN5S18C83v79Ev,
  (VTBL_ENTRY)&_ZN5S18C83v80Ev,
  (VTBL_ENTRY)&_ZN5S18C83v81Ev,
  (VTBL_ENTRY)&_ZN5S18C83v82Ev,
  (VTBL_ENTRY)&_ZN5S18C83v83Ev,
  (VTBL_ENTRY)&_ZN5S18C83v84Ev,
  (VTBL_ENTRY)&_ZN5S18C83v85Ev,
  (VTBL_ENTRY)&_ZN5S18C83v86Ev,
  (VTBL_ENTRY)&_ZN5S18C83v87Ev,
  (VTBL_ENTRY)&_ZN5S18C83v88Ev,
  (VTBL_ENTRY)&_ZN5S18C83v89Ev,
  (VTBL_ENTRY)&_ZN5S18C83v90Ev,
  (VTBL_ENTRY)&_ZN5S18C83v91Ev,
  (VTBL_ENTRY)&_ZN5S18C83v92Ev,
  (VTBL_ENTRY)&_ZN5S18C83v93Ev,
  (VTBL_ENTRY)&_ZN5S18C83v94Ev,
  (VTBL_ENTRY)&_ZN5S18C83v95Ev,
  (VTBL_ENTRY)&_ZN5S18C83v96Ev,
  (VTBL_ENTRY)&_ZN5S18C83v97Ev,
  (VTBL_ENTRY)&_ZN5S18C83v98Ev,
  (VTBL_ENTRY)&_ZN5S18C83v99Ev,
  (VTBL_ENTRY)&_ZN5S18C84v100Ev,
  (VTBL_ENTRY)&_ZN5S18C84v101Ev,
  (VTBL_ENTRY)&_ZN5S18C84v102Ev,
  (VTBL_ENTRY)&_ZN5S18C84v103Ev,
  (VTBL_ENTRY)&_ZN5S18C84v104Ev,
  (VTBL_ENTRY)&_ZN5S18C84v105Ev,
  (VTBL_ENTRY)&_ZN5S18C84v106Ev,
  (VTBL_ENTRY)&_ZN5S18C84v107Ev,
  (VTBL_ENTRY)&_ZN5S18C84v108Ev,
  (VTBL_ENTRY)&_ZN5S18C84v109Ev,
  (VTBL_ENTRY)&_ZN5S18C84v110Ev,
  (VTBL_ENTRY)&_ZN5S18C64v111Ev,
  (VTBL_ENTRY)&_ZN5S18C64v112Ev,
  (VTBL_ENTRY)&_ZN5S18C64v113Ev,
  (VTBL_ENTRY)&_ZN5S18C64v114Ev,
  (VTBL_ENTRY)&_ZN5S18C64v115Ev,
  (VTBL_ENTRY)&_ZN5S18C64v116Ev,
  (VTBL_ENTRY)&_ZN5S18C64v117Ev,
  (VTBL_ENTRY)&_ZN5S18C64v118Ev,
  (VTBL_ENTRY)&_ZN5S18C64v119Ev,
  (VTBL_ENTRY)&_ZN5S18C64v120Ev,
  (VTBL_ENTRY)&_ZN5S18C64v121Ev,
  (VTBL_ENTRY)&_ZN5S18C64v122Ev,
  (VTBL_ENTRY)&_ZN5S18C64v123Ev,
  (VTBL_ENTRY)&_ZN5S18C64v124Ev,
  (VTBL_ENTRY)&_ZN5S18C64v125Ev,
  (VTBL_ENTRY)&_ZN5S18C64v126Ev,
  (VTBL_ENTRY)&_ZN5S18C64v127Ev,
  (VTBL_ENTRY)&_ZN5S18C64v128Ev,
  (VTBL_ENTRY)&_ZN5S18C64v129Ev,
  (VTBL_ENTRY)&_ZN5S18C64v130Ev,
  (VTBL_ENTRY)&_ZN5S18C64v131Ev,
  (VTBL_ENTRY)&_ZN5S18C64v132Ev,
  (VTBL_ENTRY)&_ZN5S18C64v133Ev,
  (VTBL_ENTRY)&_ZN5S18C64v134Ev,
  (VTBL_ENTRY)&_ZN5S18C64v135Ev,
  (VTBL_ENTRY)&_ZN5S18C64v136Ev,
  (VTBL_ENTRY)&_ZN5S18C54v137Ev,
  (VTBL_ENTRY)&_ZN5S18C54v138Ev,
  (VTBL_ENTRY)&_ZN5S18C54v139Ev,
  (VTBL_ENTRY)&_ZN5S18C54v140Ev,
  (VTBL_ENTRY)&_ZN5S18C54v141Ev,
  (VTBL_ENTRY)&_ZN5S18C54v142Ev,
  (VTBL_ENTRY)&_ZN5S18C54v143Ev,
  (VTBL_ENTRY)&_ZN5S18C54v144Ev,
  (VTBL_ENTRY)&_ZN5S18C54v145Ev,
  (VTBL_ENTRY)&_ZN5S18C54v146Ev,
  (VTBL_ENTRY)&_ZN5S18C54v147Ev,
  (VTBL_ENTRY)&_ZN5S18C54v148Ev,
  (VTBL_ENTRY)&_ZN5S18C54v149Ev,
  (VTBL_ENTRY)&_ZN5S18C54v150Ev,
  (VTBL_ENTRY)&_ZN5S18C54v151Ev,
  (VTBL_ENTRY)&_ZN5S18C54v152Ev,
  (VTBL_ENTRY)&_ZN5S18C54v153Ev,
  (VTBL_ENTRY)&_ZN5S18C54v154Ev,
  (VTBL_ENTRY)&_ZN5S18C44v155Ev,
  (VTBL_ENTRY)&_ZN5S18C44v156Ev,
  (VTBL_ENTRY)&_ZN5S18C44v157Ev,
  (VTBL_ENTRY)&_ZN5S18C44v158Ev,
  (VTBL_ENTRY)&_ZN5S18C44v159Ev,
  (VTBL_ENTRY)&_ZN5S18C44v160Ev,
  (VTBL_ENTRY)&_ZN5S18C44v161Ev,
  (VTBL_ENTRY)&_ZN5S18C44v162Ev,
  (VTBL_ENTRY)&_ZN5S18C44v163Ev,
  (VTBL_ENTRY)&_ZN5S18C44v164Ev,
  (VTBL_ENTRY)&_ZN5S18C44v165Ev,
  (VTBL_ENTRY)&_ZN5S18C44v166Ev,
  (VTBL_ENTRY)&_ZN5S18C44v167Ev,
  (VTBL_ENTRY)&_ZN5S18C44v168Ev,
  (VTBL_ENTRY)&_ZN5S18C44v169Ev,
  (VTBL_ENTRY)&_ZN5S18C44v170Ev,
  (VTBL_ENTRY)&_ZN5S18C44v171Ev,
  (VTBL_ENTRY)&_ZN5S18C44v172Ev,
  (VTBL_ENTRY)&_ZN5S18C44v173Ev,
  (VTBL_ENTRY)&_ZN5S18C44v174Ev,
  (VTBL_ENTRY)&_ZN5S18C44v175Ev,
  (VTBL_ENTRY)&_ZN5S18C44v176Ev,
  (VTBL_ENTRY)&_ZN5S18C44v177Ev,
  (VTBL_ENTRY)&_ZN5S18C44v178Ev,
  (VTBL_ENTRY)&_ZN5S18C44v179Ev,
  (VTBL_ENTRY)&_ZN5S18C44v180Ev,
  (VTBL_ENTRY)&_ZN5S18C24v181Ev,
  (VTBL_ENTRY)&_ZN5S18C24v182Ev,
  (VTBL_ENTRY)&_ZN5S18C24v183Ev,
  (VTBL_ENTRY)&_ZN5S18C24v184Ev,
  (VTBL_ENTRY)&_ZN5S18C24v185Ev,
  (VTBL_ENTRY)&_ZN5S18C24v186Ev,
};
extern VTBL_ENTRY _ZTI5S18C2[];
extern  VTBL_ENTRY _ZTV5S18C2[];
Class_Descriptor cd_S18C2 = {  "S18C2", // class name
  bases_S18C2, 7,
  &(vtc_S18C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S18C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S18C2),187, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18C1  : S18C2 {
  virtual void  v1(); // _ZN5S18C12v1Ev
  virtual void  v2(); // _ZN5S18C12v2Ev
  virtual void  v3(); // _ZN5S18C12v3Ev
  ~S18C1(); // tgen
  S18C1(); // tgen
};
//SIG(1 S18C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ BC9{ vd m Fp Fi} 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 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 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} v1 v2 v3}


void  S18C1 ::v1(){vfunc_called(this, "_ZN5S18C12v1Ev");}
void  S18C1 ::v2(){vfunc_called(this, "_ZN5S18C12v2Ev");}
void  S18C1 ::v3(){vfunc_called(this, "_ZN5S18C12v3Ev");}
S18C1 ::~S18C1(){ note_dtor("S18C1", this);} // tgen
S18C1 ::S18C1(){ note_ctor("S18C1", this);} // tgen

static void Test_S18C1()
{
  extern Class_Descriptor cd_S18C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18C1, buf);
    S18C1 *dp, &lv = *(dp=new (buf) S18C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S18C8*)(S18C7*)(S18C6*)(S18C5*)(S18C4*)(S18C3*)(S18C2*), 0, "S18C1");
    check_base_class_offset(lv, (S18C8*)(S18C7*)(S18C6*)(S18C5*)(S18C4*)(S18C3*)(S18C2*), 0, "S18C1");
    check_base_class_offset(lv, (S18C7*)(S18C6*)(S18C5*)(S18C4*)(S18C3*)(S18C2*), 0, "S18C1");
    check_base_class_offset(lv, (S18C6*)(S18C5*)(S18C4*)(S18C3*)(S18C2*), 0, "S18C1");
    check_base_class_offset(lv, (S18C5*)(S18C4*)(S18C3*)(S18C2*), 0, "S18C1");
    check_base_class_offset(lv, (S18C4*)(S18C3*)(S18C2*), 0, "S18C1");
    check_base_class_offset(lv, (S18C3*)(S18C2*), 0, "S18C1");
    check_base_class_offset(lv, (S18C2*), 0, "S18C1");
    test_class_info(&lv, &cd_S18C1);
    dp->~S18C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18C1(Test_S18C1, "S18C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S18C1C1Ev();
extern void _ZN5S18C1D1Ev();
Name_Map name_map_S18C1[] = {
  NSPAIR(_ZN5S18C1C1Ev),
  NSPAIR(_ZN5S18C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S18C8;
extern VTBL_ENTRY _ZTI5S18C8[];
extern  VTBL_ENTRY _ZTV5S18C8[];
extern Class_Descriptor cd_S18C7;
extern VTBL_ENTRY _ZTI5S18C7[];
extern  VTBL_ENTRY _ZTV5S18C7[];
extern Class_Descriptor cd_S18C6;
extern VTBL_ENTRY _ZTI5S18C6[];
extern  VTBL_ENTRY _ZTV5S18C6[];
extern Class_Descriptor cd_S18C5;
extern VTBL_ENTRY _ZTI5S18C5[];
extern  VTBL_ENTRY _ZTV5S18C5[];
extern Class_Descriptor cd_S18C4;
extern VTBL_ENTRY _ZTI5S18C4[];
extern  VTBL_ENTRY _ZTV5S18C4[];
extern Class_Descriptor cd_S18C3;
extern VTBL_ENTRY _ZTI5S18C3[];
extern  VTBL_ENTRY _ZTV5S18C3[];
extern Class_Descriptor cd_S18C2;
extern VTBL_ENTRY _ZTI5S18C2[];
extern  VTBL_ENTRY _ZTV5S18C2[];
static Base_Class bases_S18C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S18C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S18C1[];
extern void _ZN5S18C1D1Ev();
extern void _ZN5S18C1D0Ev();
extern void _ZN5S18C82v4Ev();
extern void _ZN5S18C82v5Ev();
extern void _ZN5S18C82v6Ev();
extern void _ZN5S18C82v7Ev();
extern void _ZN5S18C82v8Ev();
extern void _ZN5S18C82v9Ev();
extern void _ZN5S18C83v10Ev();
extern void _ZN5S18C83v11Ev();
extern void _ZN5S18C83v12Ev();
extern void _ZN5S18C83v13Ev();
extern void _ZN5S18C83v14Ev();
extern void _ZN5S18C83v15Ev();
extern void _ZN5S18C83v16Ev();
extern void _ZN5S18C83v17Ev();
extern void _ZN5S18C83v18Ev();
extern void _ZN5S18C83v19Ev();
extern void _ZN5S18C83v20Ev();
extern void _ZN5S18C83v21Ev();
extern void _ZN5S18C83v22Ev();
extern void _ZN5S18C83v23Ev();
extern void _ZN5S18C83v24Ev();
extern void _ZN5S18C83v25Ev();
extern void _ZN5S18C83v26Ev();
extern void _ZN5S18C83v27Ev();
extern void _ZN5S18C83v28Ev();
extern void _ZN5S18C83v29Ev();
extern void _ZN5S18C83v30Ev();
extern void _ZN5S18C83v31Ev();
extern void _ZN5S18C83v32Ev();
extern void _ZN5S18C83v33Ev();
extern void _ZN5S18C83v34Ev();
extern void _ZN5S18C83v35Ev();
extern void _ZN5S18C83v36Ev();
extern void _ZN5S18C83v37Ev();
extern void _ZN5S18C83v38Ev();
extern void _ZN5S18C83v39Ev();
extern void _ZN5S18C83v40Ev();
extern void _ZN5S18C83v41Ev();
extern void _ZN5S18C83v42Ev();
extern void _ZN5S18C83v43Ev();
extern void _ZN5S18C83v44Ev();
extern void _ZN5S18C83v45Ev();
extern void _ZN5S18C83v46Ev();
extern void _ZN5S18C83v47Ev();
extern void _ZN5S18C83v48Ev();
extern void _ZN5S18C83v49Ev();
extern void _ZN5S18C83v50Ev();
extern void _ZN5S18C83v51Ev();
extern void _ZN5S18C83v52Ev();
extern void _ZN5S18C83v53Ev();
extern void _ZN5S18C83v54Ev();
extern void _ZN5S18C83v55Ev();
extern void _ZN5S18C83v56Ev();
extern void _ZN5S18C83v57Ev();
extern void _ZN5S18C83v58Ev();
extern void _ZN5S18C83v59Ev();
extern void _ZN5S18C83v60Ev();
extern void _ZN5S18C83v61Ev();
extern void _ZN5S18C83v62Ev();
extern void _ZN5S18C83v63Ev();
extern void _ZN5S18C83v64Ev();
extern void _ZN5S18C83v65Ev();
extern void _ZN5S18C83v66Ev();
extern void _ZN5S18C83v67Ev();
extern void _ZN5S18C83v68Ev();
extern void _ZN5S18C83v69Ev();
extern void _ZN5S18C83v70Ev();
extern void _ZN5S18C83v71Ev();
extern void _ZN5S18C83v72Ev();
extern void _ZN5S18C83v73Ev();
extern void _ZN5S18C83v74Ev();
extern void _ZN5S18C83v75Ev();
extern void _ZN5S18C83v76Ev();
extern void _ZN5S18C83v77Ev();
extern void _ZN5S18C83v78Ev();
extern void _ZN5S18C83v79Ev();
extern void _ZN5S18C83v80Ev();
extern void _ZN5S18C83v81Ev();
extern void _ZN5S18C83v82Ev();
extern void _ZN5S18C83v83Ev();
extern void _ZN5S18C83v84Ev();
extern void _ZN5S18C83v85Ev();
extern void _ZN5S18C83v86Ev();
extern void _ZN5S18C83v87Ev();
extern void _ZN5S18C83v88Ev();
extern void _ZN5S18C83v89Ev();
extern void _ZN5S18C83v90Ev();
extern void _ZN5S18C83v91Ev();
extern void _ZN5S18C83v92Ev();
extern void _ZN5S18C83v93Ev();
extern void _ZN5S18C83v94Ev();
extern void _ZN5S18C83v95Ev();
extern void _ZN5S18C83v96Ev();
extern void _ZN5S18C83v97Ev();
extern void _ZN5S18C83v98Ev();
extern void _ZN5S18C83v99Ev();
extern void _ZN5S18C84v100Ev();
extern void _ZN5S18C84v101Ev();
extern void _ZN5S18C84v102Ev();
extern void _ZN5S18C84v103Ev();
extern void _ZN5S18C84v104Ev();
extern void _ZN5S18C84v105Ev();
extern void _ZN5S18C84v106Ev();
extern void _ZN5S18C84v107Ev();
extern void _ZN5S18C84v108Ev();
extern void _ZN5S18C84v109Ev();
extern void _ZN5S18C84v110Ev();
extern void _ZN5S18C64v111Ev();
extern void _ZN5S18C64v112Ev();
extern void _ZN5S18C64v113Ev();
extern void _ZN5S18C64v114Ev();
extern void _ZN5S18C64v115Ev();
extern void _ZN5S18C64v116Ev();
extern void _ZN5S18C64v117Ev();
extern void _ZN5S18C64v118Ev();
extern void _ZN5S18C64v119Ev();
extern void _ZN5S18C64v120Ev();
extern void _ZN5S18C64v121Ev();
extern void _ZN5S18C64v122Ev();
extern void _ZN5S18C64v123Ev();
extern void _ZN5S18C64v124Ev();
extern void _ZN5S18C64v125Ev();
extern void _ZN5S18C64v126Ev();
extern void _ZN5S18C64v127Ev();
extern void _ZN5S18C64v128Ev();
extern void _ZN5S18C64v129Ev();
extern void _ZN5S18C64v130Ev();
extern void _ZN5S18C64v131Ev();
extern void _ZN5S18C64v132Ev();
extern void _ZN5S18C64v133Ev();
extern void _ZN5S18C64v134Ev();
extern void _ZN5S18C64v135Ev();
extern void _ZN5S18C64v136Ev();
extern void _ZN5S18C54v137Ev();
extern void _ZN5S18C54v138Ev();
extern void _ZN5S18C54v139Ev();
extern void _ZN5S18C54v140Ev();
extern void _ZN5S18C54v141Ev();
extern void _ZN5S18C54v142Ev();
extern void _ZN5S18C54v143Ev();
extern void _ZN5S18C54v144Ev();
extern void _ZN5S18C54v145Ev();
extern void _ZN5S18C54v146Ev();
extern void _ZN5S18C54v147Ev();
extern void _ZN5S18C54v148Ev();
extern void _ZN5S18C54v149Ev();
extern void _ZN5S18C54v150Ev();
extern void _ZN5S18C54v151Ev();
extern void _ZN5S18C54v152Ev();
extern void _ZN5S18C54v153Ev();
extern void _ZN5S18C54v154Ev();
extern void _ZN5S18C44v155Ev();
extern void _ZN5S18C44v156Ev();
extern void _ZN5S18C44v157Ev();
extern void _ZN5S18C44v158Ev();
extern void _ZN5S18C44v159Ev();
extern void _ZN5S18C44v160Ev();
extern void _ZN5S18C44v161Ev();
extern void _ZN5S18C44v162Ev();
extern void _ZN5S18C44v163Ev();
extern void _ZN5S18C44v164Ev();
extern void _ZN5S18C44v165Ev();
extern void _ZN5S18C44v166Ev();
extern void _ZN5S18C44v167Ev();
extern void _ZN5S18C44v168Ev();
extern void _ZN5S18C44v169Ev();
extern void _ZN5S18C44v170Ev();
extern void _ZN5S18C44v171Ev();
extern void _ZN5S18C44v172Ev();
extern void _ZN5S18C44v173Ev();
extern void _ZN5S18C44v174Ev();
extern void _ZN5S18C44v175Ev();
extern void _ZN5S18C44v176Ev();
extern void _ZN5S18C44v177Ev();
extern void _ZN5S18C44v178Ev();
extern void _ZN5S18C44v179Ev();
extern void _ZN5S18C44v180Ev();
extern void _ZN5S18C24v181Ev();
extern void _ZN5S18C24v182Ev();
extern void _ZN5S18C24v183Ev();
extern void _ZN5S18C24v184Ev();
extern void _ZN5S18C24v185Ev();
extern void _ZN5S18C24v186Ev();
extern void _ZN5S18C12v1Ev();
extern void _ZN5S18C12v2Ev();
extern void _ZN5S18C12v3Ev();
static  VTBL_ENTRY vtc_S18C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S18C1[0]),
  (VTBL_ENTRY)&_ZN5S18C1D1Ev,
  (VTBL_ENTRY)&_ZN5S18C1D0Ev,
  (VTBL_ENTRY)&_ZN5S18C82v4Ev,
  (VTBL_ENTRY)&_ZN5S18C82v5Ev,
  (VTBL_ENTRY)&_ZN5S18C82v6Ev,
  (VTBL_ENTRY)&_ZN5S18C82v7Ev,
  (VTBL_ENTRY)&_ZN5S18C82v8Ev,
  (VTBL_ENTRY)&_ZN5S18C82v9Ev,
  (VTBL_ENTRY)&_ZN5S18C83v10Ev,
  (VTBL_ENTRY)&_ZN5S18C83v11Ev,
  (VTBL_ENTRY)&_ZN5S18C83v12Ev,
  (VTBL_ENTRY)&_ZN5S18C83v13Ev,
  (VTBL_ENTRY)&_ZN5S18C83v14Ev,
  (VTBL_ENTRY)&_ZN5S18C83v15Ev,
  (VTBL_ENTRY)&_ZN5S18C83v16Ev,
  (VTBL_ENTRY)&_ZN5S18C83v17Ev,
  (VTBL_ENTRY)&_ZN5S18C83v18Ev,
  (VTBL_ENTRY)&_ZN5S18C83v19Ev,
  (VTBL_ENTRY)&_ZN5S18C83v20Ev,
  (VTBL_ENTRY)&_ZN5S18C83v21Ev,
  (VTBL_ENTRY)&_ZN5S18C83v22Ev,
  (VTBL_ENTRY)&_ZN5S18C83v23Ev,
  (VTBL_ENTRY)&_ZN5S18C83v24Ev,
  (VTBL_ENTRY)&_ZN5S18C83v25Ev,
  (VTBL_ENTRY)&_ZN5S18C83v26Ev,
  (VTBL_ENTRY)&_ZN5S18C83v27Ev,
  (VTBL_ENTRY)&_ZN5S18C83v28Ev,
  (VTBL_ENTRY)&_ZN5S18C83v29Ev,
  (VTBL_ENTRY)&_ZN5S18C83v30Ev,
  (VTBL_ENTRY)&_ZN5S18C83v31Ev,
  (VTBL_ENTRY)&_ZN5S18C83v32Ev,
  (VTBL_ENTRY)&_ZN5S18C83v33Ev,
  (VTBL_ENTRY)&_ZN5S18C83v34Ev,
  (VTBL_ENTRY)&_ZN5S18C83v35Ev,
  (VTBL_ENTRY)&_ZN5S18C83v36Ev,
  (VTBL_ENTRY)&_ZN5S18C83v37Ev,
  (VTBL_ENTRY)&_ZN5S18C83v38Ev,
  (VTBL_ENTRY)&_ZN5S18C83v39Ev,
  (VTBL_ENTRY)&_ZN5S18C83v40Ev,
  (VTBL_ENTRY)&_ZN5S18C83v41Ev,
  (VTBL_ENTRY)&_ZN5S18C83v42Ev,
  (VTBL_ENTRY)&_ZN5S18C83v43Ev,
  (VTBL_ENTRY)&_ZN5S18C83v44Ev,
  (VTBL_ENTRY)&_ZN5S18C83v45Ev,
  (VTBL_ENTRY)&_ZN5S18C83v46Ev,
  (VTBL_ENTRY)&_ZN5S18C83v47Ev,
  (VTBL_ENTRY)&_ZN5S18C83v48Ev,
  (VTBL_ENTRY)&_ZN5S18C83v49Ev,
  (VTBL_ENTRY)&_ZN5S18C83v50Ev,
  (VTBL_ENTRY)&_ZN5S18C83v51Ev,
  (VTBL_ENTRY)&_ZN5S18C83v52Ev,
  (VTBL_ENTRY)&_ZN5S18C83v53Ev,
  (VTBL_ENTRY)&_ZN5S18C83v54Ev,
  (VTBL_ENTRY)&_ZN5S18C83v55Ev,
  (VTBL_ENTRY)&_ZN5S18C83v56Ev,
  (VTBL_ENTRY)&_ZN5S18C83v57Ev,
  (VTBL_ENTRY)&_ZN5S18C83v58Ev,
  (VTBL_ENTRY)&_ZN5S18C83v59Ev,
  (VTBL_ENTRY)&_ZN5S18C83v60Ev,
  (VTBL_ENTRY)&_ZN5S18C83v61Ev,
  (VTBL_ENTRY)&_ZN5S18C83v62Ev,
  (VTBL_ENTRY)&_ZN5S18C83v63Ev,
  (VTBL_ENTRY)&_ZN5S18C83v64Ev,
  (VTBL_ENTRY)&_ZN5S18C83v65Ev,
  (VTBL_ENTRY)&_ZN5S18C83v66Ev,
  (VTBL_ENTRY)&_ZN5S18C83v67Ev,
  (VTBL_ENTRY)&_ZN5S18C83v68Ev,
  (VTBL_ENTRY)&_ZN5S18C83v69Ev,
  (VTBL_ENTRY)&_ZN5S18C83v70Ev,
  (VTBL_ENTRY)&_ZN5S18C83v71Ev,
  (VTBL_ENTRY)&_ZN5S18C83v72Ev,
  (VTBL_ENTRY)&_ZN5S18C83v73Ev,
  (VTBL_ENTRY)&_ZN5S18C83v74Ev,
  (VTBL_ENTRY)&_ZN5S18C83v75Ev,
  (VTBL_ENTRY)&_ZN5S18C83v76Ev,
  (VTBL_ENTRY)&_ZN5S18C83v77Ev,
  (VTBL_ENTRY)&_ZN5S18C83v78Ev,
  (VTBL_ENTRY)&_ZN5S18C83v79Ev,
  (VTBL_ENTRY)&_ZN5S18C83v80Ev,
  (VTBL_ENTRY)&_ZN5S18C83v81Ev,
  (VTBL_ENTRY)&_ZN5S18C83v82Ev,
  (VTBL_ENTRY)&_ZN5S18C83v83Ev,
  (VTBL_ENTRY)&_ZN5S18C83v84Ev,
  (VTBL_ENTRY)&_ZN5S18C83v85Ev,
  (VTBL_ENTRY)&_ZN5S18C83v86Ev,
  (VTBL_ENTRY)&_ZN5S18C83v87Ev,
  (VTBL_ENTRY)&_ZN5S18C83v88Ev,
  (VTBL_ENTRY)&_ZN5S18C83v89Ev,
  (VTBL_ENTRY)&_ZN5S18C83v90Ev,
  (VTBL_ENTRY)&_ZN5S18C83v91Ev,
  (VTBL_ENTRY)&_ZN5S18C83v92Ev,
  (VTBL_ENTRY)&_ZN5S18C83v93Ev,
  (VTBL_ENTRY)&_ZN5S18C83v94Ev,
  (VTBL_ENTRY)&_ZN5S18C83v95Ev,
  (VTBL_ENTRY)&_ZN5S18C83v96Ev,
  (VTBL_ENTRY)&_ZN5S18C83v97Ev,
  (VTBL_ENTRY)&_ZN5S18C83v98Ev,
  (VTBL_ENTRY)&_ZN5S18C83v99Ev,
  (VTBL_ENTRY)&_ZN5S18C84v100Ev,
  (VTBL_ENTRY)&_ZN5S18C84v101Ev,
  (VTBL_ENTRY)&_ZN5S18C84v102Ev,
  (VTBL_ENTRY)&_ZN5S18C84v103Ev,
  (VTBL_ENTRY)&_ZN5S18C84v104Ev,
  (VTBL_ENTRY)&_ZN5S18C84v105Ev,
  (VTBL_ENTRY)&_ZN5S18C84v106Ev,
  (VTBL_ENTRY)&_ZN5S18C84v107Ev,
  (VTBL_ENTRY)&_ZN5S18C84v108Ev,
  (VTBL_ENTRY)&_ZN5S18C84v109Ev,
  (VTBL_ENTRY)&_ZN5S18C84v110Ev,
  (VTBL_ENTRY)&_ZN5S18C64v111Ev,
  (VTBL_ENTRY)&_ZN5S18C64v112Ev,
  (VTBL_ENTRY)&_ZN5S18C64v113Ev,
  (VTBL_ENTRY)&_ZN5S18C64v114Ev,
  (VTBL_ENTRY)&_ZN5S18C64v115Ev,
  (VTBL_ENTRY)&_ZN5S18C64v116Ev,
  (VTBL_ENTRY)&_ZN5S18C64v117Ev,
  (VTBL_ENTRY)&_ZN5S18C64v118Ev,
  (VTBL_ENTRY)&_ZN5S18C64v119Ev,
  (VTBL_ENTRY)&_ZN5S18C64v120Ev,
  (VTBL_ENTRY)&_ZN5S18C64v121Ev,
  (VTBL_ENTRY)&_ZN5S18C64v122Ev,
  (VTBL_ENTRY)&_ZN5S18C64v123Ev,
  (VTBL_ENTRY)&_ZN5S18C64v124Ev,
  (VTBL_ENTRY)&_ZN5S18C64v125Ev,
  (VTBL_ENTRY)&_ZN5S18C64v126Ev,
  (VTBL_ENTRY)&_ZN5S18C64v127Ev,
  (VTBL_ENTRY)&_ZN5S18C64v128Ev,
  (VTBL_ENTRY)&_ZN5S18C64v129Ev,
  (VTBL_ENTRY)&_ZN5S18C64v130Ev,
  (VTBL_ENTRY)&_ZN5S18C64v131Ev,
  (VTBL_ENTRY)&_ZN5S18C64v132Ev,
  (VTBL_ENTRY)&_ZN5S18C64v133Ev,
  (VTBL_ENTRY)&_ZN5S18C64v134Ev,
  (VTBL_ENTRY)&_ZN5S18C64v135Ev,
  (VTBL_ENTRY)&_ZN5S18C64v136Ev,
  (VTBL_ENTRY)&_ZN5S18C54v137Ev,
  (VTBL_ENTRY)&_ZN5S18C54v138Ev,
  (VTBL_ENTRY)&_ZN5S18C54v139Ev,
  (VTBL_ENTRY)&_ZN5S18C54v140Ev,
  (VTBL_ENTRY)&_ZN5S18C54v141Ev,
  (VTBL_ENTRY)&_ZN5S18C54v142Ev,
  (VTBL_ENTRY)&_ZN5S18C54v143Ev,
  (VTBL_ENTRY)&_ZN5S18C54v144Ev,
  (VTBL_ENTRY)&_ZN5S18C54v145Ev,
  (VTBL_ENTRY)&_ZN5S18C54v146Ev,
  (VTBL_ENTRY)&_ZN5S18C54v147Ev,
  (VTBL_ENTRY)&_ZN5S18C54v148Ev,
  (VTBL_ENTRY)&_ZN5S18C54v149Ev,
  (VTBL_ENTRY)&_ZN5S18C54v150Ev,
  (VTBL_ENTRY)&_ZN5S18C54v151Ev,
  (VTBL_ENTRY)&_ZN5S18C54v152Ev,
  (VTBL_ENTRY)&_ZN5S18C54v153Ev,
  (VTBL_ENTRY)&_ZN5S18C54v154Ev,
  (VTBL_ENTRY)&_ZN5S18C44v155Ev,
  (VTBL_ENTRY)&_ZN5S18C44v156Ev,
  (VTBL_ENTRY)&_ZN5S18C44v157Ev,
  (VTBL_ENTRY)&_ZN5S18C44v158Ev,
  (VTBL_ENTRY)&_ZN5S18C44v159Ev,
  (VTBL_ENTRY)&_ZN5S18C44v160Ev,
  (VTBL_ENTRY)&_ZN5S18C44v161Ev,
  (VTBL_ENTRY)&_ZN5S18C44v162Ev,
  (VTBL_ENTRY)&_ZN5S18C44v163Ev,
  (VTBL_ENTRY)&_ZN5S18C44v164Ev,
  (VTBL_ENTRY)&_ZN5S18C44v165Ev,
  (VTBL_ENTRY)&_ZN5S18C44v166Ev,
  (VTBL_ENTRY)&_ZN5S18C44v167Ev,
  (VTBL_ENTRY)&_ZN5S18C44v168Ev,
  (VTBL_ENTRY)&_ZN5S18C44v169Ev,
  (VTBL_ENTRY)&_ZN5S18C44v170Ev,
  (VTBL_ENTRY)&_ZN5S18C44v171Ev,
  (VTBL_ENTRY)&_ZN5S18C44v172Ev,
  (VTBL_ENTRY)&_ZN5S18C44v173Ev,
  (VTBL_ENTRY)&_ZN5S18C44v174Ev,
  (VTBL_ENTRY)&_ZN5S18C44v175Ev,
  (VTBL_ENTRY)&_ZN5S18C44v176Ev,
  (VTBL_ENTRY)&_ZN5S18C44v177Ev,
  (VTBL_ENTRY)&_ZN5S18C44v178Ev,
  (VTBL_ENTRY)&_ZN5S18C44v179Ev,
  (VTBL_ENTRY)&_ZN5S18C44v180Ev,
  (VTBL_ENTRY)&_ZN5S18C24v181Ev,
  (VTBL_ENTRY)&_ZN5S18C24v182Ev,
  (VTBL_ENTRY)&_ZN5S18C24v183Ev,
  (VTBL_ENTRY)&_ZN5S18C24v184Ev,
  (VTBL_ENTRY)&_ZN5S18C24v185Ev,
  (VTBL_ENTRY)&_ZN5S18C24v186Ev,
  (VTBL_ENTRY)&_ZN5S18C12v1Ev,
  (VTBL_ENTRY)&_ZN5S18C12v2Ev,
  (VTBL_ENTRY)&_ZN5S18C12v3Ev,
};
extern VTBL_ENTRY _ZTI5S18C1[];
extern  VTBL_ENTRY _ZTV5S18C1[];
Class_Descriptor cd_S18C1 = {  "S18C1", // class name
  bases_S18C1, 8,
  &(vtc_S18C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S18C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S18C1),190, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  8, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S41C7  : S1C11_nt {
  virtual void  v5(); // _ZN5S41C72v5Ev
  virtual void  v6(); // _ZN5S41C72v6Ev
  virtual void  v7(); // _ZN5S41C72v7Ev
  virtual void  v8(); // _ZN5S41C72v8Ev
  virtual void  v9(); // _ZN5S41C72v9Ev
  virtual void  v10(); // _ZN5S41C73v10Ev
  virtual void  v11(); // _ZN5S41C73v11Ev
  virtual void  v12(); // _ZN5S41C73v12Ev
  virtual void  v13(); // _ZN5S41C73v13Ev
  virtual void  v14(); // _ZN5S41C73v14Ev
  virtual void  v15(); // _ZN5S41C73v15Ev
  virtual void  v16(); // _ZN5S41C73v16Ev
  virtual void  v17(); // _ZN5S41C73v17Ev
  virtual void  v18(); // _ZN5S41C73v18Ev
  virtual void  v19(); // _ZN5S41C73v19Ev
  virtual void  v20(); // _ZN5S41C73v20Ev
  virtual void  v21(); // _ZN5S41C73v21Ev
  virtual void  v22(); // _ZN5S41C73v22Ev
  virtual void  v23(); // _ZN5S41C73v23Ev
  virtual void  v24(); // _ZN5S41C73v24Ev
  virtual void  v25(); // _ZN5S41C73v25Ev
  virtual void  v26(); // _ZN5S41C73v26Ev
  virtual void  v27(); // _ZN5S41C73v27Ev
  virtual void  v28(); // _ZN5S41C73v28Ev
  virtual void  v29(); // _ZN5S41C73v29Ev
  virtual void  v30(); // _ZN5S41C73v30Ev
  virtual void  v31(); // _ZN5S41C73v31Ev
  virtual void  v32(); // _ZN5S41C73v32Ev
  virtual void  v33(); // _ZN5S41C73v33Ev
  virtual void  v34(); // _ZN5S41C73v34Ev
  virtual void  v35(); // _ZN5S41C73v35Ev
  virtual void  v36(); // _ZN5S41C73v36Ev
  virtual void  v37(); // _ZN5S41C73v37Ev
  virtual void  v38(); // _ZN5S41C73v38Ev
  virtual void  v39(); // _ZN5S41C73v39Ev
  virtual void  v40(); // _ZN5S41C73v40Ev
  virtual void  v41(); // _ZN5S41C73v41Ev
  virtual void  v42(); // _ZN5S41C73v42Ev
  virtual void  v43(); // _ZN5S41C73v43Ev
  virtual void  v44(); // _ZN5S41C73v44Ev
  virtual void  v45(); // _ZN5S41C73v45Ev
  virtual void  v46(); // _ZN5S41C73v46Ev
  virtual void  v47(); // _ZN5S41C73v47Ev
  virtual void  v48(); // _ZN5S41C73v48Ev
  virtual void  v49(); // _ZN5S41C73v49Ev
  virtual void  v50(); // _ZN5S41C73v50Ev
  virtual void  v51(); // _ZN5S41C73v51Ev
  virtual void  v52(); // _ZN5S41C73v52Ev
  virtual void  v53(); // _ZN5S41C73v53Ev
  virtual void  v54(); // _ZN5S41C73v54Ev
  virtual void  v55(); // _ZN5S41C73v55Ev
  virtual void  v56(); // _ZN5S41C73v56Ev
  virtual void  v57(); // _ZN5S41C73v57Ev
  virtual void  v58(); // _ZN5S41C73v58Ev
  virtual void  v59(); // _ZN5S41C73v59Ev
  virtual void  v60(); // _ZN5S41C73v60Ev
  virtual void  v61(); // _ZN5S41C73v61Ev
  virtual void  v62(); // _ZN5S41C73v62Ev
  virtual void  v63(); // _ZN5S41C73v63Ev
  virtual void  v64(); // _ZN5S41C73v64Ev
  virtual void  v65(); // _ZN5S41C73v65Ev
  virtual void  v66(); // _ZN5S41C73v66Ev
  virtual void  v67(); // _ZN5S41C73v67Ev
  virtual void  v68(); // _ZN5S41C73v68Ev
  virtual void  v69(); // _ZN5S41C73v69Ev
  virtual void  v70(); // _ZN5S41C73v70Ev
  virtual void  v71(); // _ZN5S41C73v71Ev
  virtual void  v72(); // _ZN5S41C73v72Ev
  virtual void  v73(); // _ZN5S41C73v73Ev
  virtual void  v74(); // _ZN5S41C73v74Ev
  virtual void  v75(); // _ZN5S41C73v75Ev
  virtual void  v76(); // _ZN5S41C73v76Ev
  virtual void  v77(); // _ZN5S41C73v77Ev
  virtual void  v78(); // _ZN5S41C73v78Ev
  virtual void  v79(); // _ZN5S41C73v79Ev
  virtual void  v80(); // _ZN5S41C73v80Ev
  virtual void  v81(); // _ZN5S41C73v81Ev
  virtual void  v82(); // _ZN5S41C73v82Ev
  virtual void  v83(); // _ZN5S41C73v83Ev
  virtual void  v84(); // _ZN5S41C73v84Ev
  virtual void  v85(); // _ZN5S41C73v85Ev
  virtual void  v86(); // _ZN5S41C73v86Ev
  virtual void  v87(); // _ZN5S41C73v87Ev
  virtual void  v88(); // _ZN5S41C73v88Ev
  virtual void  v89(); // _ZN5S41C73v89Ev
  virtual void  v90(); // _ZN5S41C73v90Ev
  virtual void  v91(); // _ZN5S41C73v91Ev
  virtual void  v92(); // _ZN5S41C73v92Ev
  virtual void  v93(); // _ZN5S41C73v93Ev
  virtual void  v94(); // _ZN5S41C73v94Ev
  virtual void  v95(); // _ZN5S41C73v95Ev
  virtual void  v96(); // _ZN5S41C73v96Ev
  virtual void  v97(); // _ZN5S41C73v97Ev
  virtual void  v98(); // _ZN5S41C73v98Ev
  virtual void  v99(); // _ZN5S41C73v99Ev
  virtual void  v100(); // _ZN5S41C74v100Ev
  virtual void  v101(); // _ZN5S41C74v101Ev
  virtual void  v102(); // _ZN5S41C74v102Ev
  virtual void  v103(); // _ZN5S41C74v103Ev
  virtual void  v104(); // _ZN5S41C74v104Ev
  virtual void  v105(); // _ZN5S41C74v105Ev
  virtual void  v106(); // _ZN5S41C74v106Ev
  virtual void  v107(); // _ZN5S41C74v107Ev
  virtual void  v108(); // _ZN5S41C74v108Ev
  virtual void  v109(); // _ZN5S41C74v109Ev
  virtual void  v110(); // _ZN5S41C74v110Ev
  virtual void  v111(); // _ZN5S41C74v111Ev
  ~S41C7(); // tgen
  S41C7(); // tgen
};
//SIG(-1 S41C7) C1{ BC2{ vd m Fp Fi} 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 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}


void  S41C7 ::v5(){vfunc_called(this, "_ZN5S41C72v5Ev");}
void  S41C7 ::v6(){vfunc_called(this, "_ZN5S41C72v6Ev");}
void  S41C7 ::v7(){vfunc_called(this, "_ZN5S41C72v7Ev");}
void  S41C7 ::v8(){vfunc_called(this, "_ZN5S41C72v8Ev");}
void  S41C7 ::v9(){vfunc_called(this, "_ZN5S41C72v9Ev");}
void  S41C7 ::v10(){vfunc_called(this, "_ZN5S41C73v10Ev");}
void  S41C7 ::v11(){vfunc_called(this, "_ZN5S41C73v11Ev");}
void  S41C7 ::v12(){vfunc_called(this, "_ZN5S41C73v12Ev");}
void  S41C7 ::v13(){vfunc_called(this, "_ZN5S41C73v13Ev");}
void  S41C7 ::v14(){vfunc_called(this, "_ZN5S41C73v14Ev");}
void  S41C7 ::v15(){vfunc_called(this, "_ZN5S41C73v15Ev");}
void  S41C7 ::v16(){vfunc_called(this, "_ZN5S41C73v16Ev");}
void  S41C7 ::v17(){vfunc_called(this, "_ZN5S41C73v17Ev");}
void  S41C7 ::v18(){vfunc_called(this, "_ZN5S41C73v18Ev");}
void  S41C7 ::v19(){vfunc_called(this, "_ZN5S41C73v19Ev");}
void  S41C7 ::v20(){vfunc_called(this, "_ZN5S41C73v20Ev");}
void  S41C7 ::v21(){vfunc_called(this, "_ZN5S41C73v21Ev");}
void  S41C7 ::v22(){vfunc_called(this, "_ZN5S41C73v22Ev");}
void  S41C7 ::v23(){vfunc_called(this, "_ZN5S41C73v23Ev");}
void  S41C7 ::v24(){vfunc_called(this, "_ZN5S41C73v24Ev");}
void  S41C7 ::v25(){vfunc_called(this, "_ZN5S41C73v25Ev");}
void  S41C7 ::v26(){vfunc_called(this, "_ZN5S41C73v26Ev");}
void  S41C7 ::v27(){vfunc_called(this, "_ZN5S41C73v27Ev");}
void  S41C7 ::v28(){vfunc_called(this, "_ZN5S41C73v28Ev");}
void  S41C7 ::v29(){vfunc_called(this, "_ZN5S41C73v29Ev");}
void  S41C7 ::v30(){vfunc_called(this, "_ZN5S41C73v30Ev");}
void  S41C7 ::v31(){vfunc_called(this, "_ZN5S41C73v31Ev");}
void  S41C7 ::v32(){vfunc_called(this, "_ZN5S41C73v32Ev");}
void  S41C7 ::v33(){vfunc_called(this, "_ZN5S41C73v33Ev");}
void  S41C7 ::v34(){vfunc_called(this, "_ZN5S41C73v34Ev");}
void  S41C7 ::v35(){vfunc_called(this, "_ZN5S41C73v35Ev");}
void  S41C7 ::v36(){vfunc_called(this, "_ZN5S41C73v36Ev");}
void  S41C7 ::v37(){vfunc_called(this, "_ZN5S41C73v37Ev");}
void  S41C7 ::v38(){vfunc_called(this, "_ZN5S41C73v38Ev");}
void  S41C7 ::v39(){vfunc_called(this, "_ZN5S41C73v39Ev");}
void  S41C7 ::v40(){vfunc_called(this, "_ZN5S41C73v40Ev");}
void  S41C7 ::v41(){vfunc_called(this, "_ZN5S41C73v41Ev");}
void  S41C7 ::v42(){vfunc_called(this, "_ZN5S41C73v42Ev");}
void  S41C7 ::v43(){vfunc_called(this, "_ZN5S41C73v43Ev");}
void  S41C7 ::v44(){vfunc_called(this, "_ZN5S41C73v44Ev");}
void  S41C7 ::v45(){vfunc_called(this, "_ZN5S41C73v45Ev");}
void  S41C7 ::v46(){vfunc_called(this, "_ZN5S41C73v46Ev");}
void  S41C7 ::v47(){vfunc_called(this, "_ZN5S41C73v47Ev");}
void  S41C7 ::v48(){vfunc_called(this, "_ZN5S41C73v48Ev");}
void  S41C7 ::v49(){vfunc_called(this, "_ZN5S41C73v49Ev");}
void  S41C7 ::v50(){vfunc_called(this, "_ZN5S41C73v50Ev");}
void  S41C7 ::v51(){vfunc_called(this, "_ZN5S41C73v51Ev");}
void  S41C7 ::v52(){vfunc_called(this, "_ZN5S41C73v52Ev");}
void  S41C7 ::v53(){vfunc_called(this, "_ZN5S41C73v53Ev");}
void  S41C7 ::v54(){vfunc_called(this, "_ZN5S41C73v54Ev");}
void  S41C7 ::v55(){vfunc_called(this, "_ZN5S41C73v55Ev");}
void  S41C7 ::v56(){vfunc_called(this, "_ZN5S41C73v56Ev");}
void  S41C7 ::v57(){vfunc_called(this, "_ZN5S41C73v57Ev");}
void  S41C7 ::v58(){vfunc_called(this, "_ZN5S41C73v58Ev");}
void  S41C7 ::v59(){vfunc_called(this, "_ZN5S41C73v59Ev");}
void  S41C7 ::v60(){vfunc_called(this, "_ZN5S41C73v60Ev");}
void  S41C7 ::v61(){vfunc_called(this, "_ZN5S41C73v61Ev");}
void  S41C7 ::v62(){vfunc_called(this, "_ZN5S41C73v62Ev");}
void  S41C7 ::v63(){vfunc_called(this, "_ZN5S41C73v63Ev");}
void  S41C7 ::v64(){vfunc_called(this, "_ZN5S41C73v64Ev");}
void  S41C7 ::v65(){vfunc_called(this, "_ZN5S41C73v65Ev");}
void  S41C7 ::v66(){vfunc_called(this, "_ZN5S41C73v66Ev");}
void  S41C7 ::v67(){vfunc_called(this, "_ZN5S41C73v67Ev");}
void  S41C7 ::v68(){vfunc_called(this, "_ZN5S41C73v68Ev");}
void  S41C7 ::v69(){vfunc_called(this, "_ZN5S41C73v69Ev");}
void  S41C7 ::v70(){vfunc_called(this, "_ZN5S41C73v70Ev");}
void  S41C7 ::v71(){vfunc_called(this, "_ZN5S41C73v71Ev");}
void  S41C7 ::v72(){vfunc_called(this, "_ZN5S41C73v72Ev");}
void  S41C7 ::v73(){vfunc_called(this, "_ZN5S41C73v73Ev");}
void  S41C7 ::v74(){vfunc_called(this, "_ZN5S41C73v74Ev");}
void  S41C7 ::v75(){vfunc_called(this, "_ZN5S41C73v75Ev");}
void  S41C7 ::v76(){vfunc_called(this, "_ZN5S41C73v76Ev");}
void  S41C7 ::v77(){vfunc_called(this, "_ZN5S41C73v77Ev");}
void  S41C7 ::v78(){vfunc_called(this, "_ZN5S41C73v78Ev");}
void  S41C7 ::v79(){vfunc_called(this, "_ZN5S41C73v79Ev");}
void  S41C7 ::v80(){vfunc_called(this, "_ZN5S41C73v80Ev");}
void  S41C7 ::v81(){vfunc_called(this, "_ZN5S41C73v81Ev");}
void  S41C7 ::v82(){vfunc_called(this, "_ZN5S41C73v82Ev");}
void  S41C7 ::v83(){vfunc_called(this, "_ZN5S41C73v83Ev");}
void  S41C7 ::v84(){vfunc_called(this, "_ZN5S41C73v84Ev");}
void  S41C7 ::v85(){vfunc_called(this, "_ZN5S41C73v85Ev");}
void  S41C7 ::v86(){vfunc_called(this, "_ZN5S41C73v86Ev");}
void  S41C7 ::v87(){vfunc_called(this, "_ZN5S41C73v87Ev");}
void  S41C7 ::v88(){vfunc_called(this, "_ZN5S41C73v88Ev");}
void  S41C7 ::v89(){vfunc_called(this, "_ZN5S41C73v89Ev");}
void  S41C7 ::v90(){vfunc_called(this, "_ZN5S41C73v90Ev");}
void  S41C7 ::v91(){vfunc_called(this, "_ZN5S41C73v91Ev");}
void  S41C7 ::v92(){vfunc_called(this, "_ZN5S41C73v92Ev");}
void  S41C7 ::v93(){vfunc_called(this, "_ZN5S41C73v93Ev");}
void  S41C7 ::v94(){vfunc_called(this, "_ZN5S41C73v94Ev");}
void  S41C7 ::v95(){vfunc_called(this, "_ZN5S41C73v95Ev");}
void  S41C7 ::v96(){vfunc_called(this, "_ZN5S41C73v96Ev");}
void  S41C7 ::v97(){vfunc_called(this, "_ZN5S41C73v97Ev");}
void  S41C7 ::v98(){vfunc_called(this, "_ZN5S41C73v98Ev");}
void  S41C7 ::v99(){vfunc_called(this, "_ZN5S41C73v99Ev");}
void  S41C7 ::v100(){vfunc_called(this, "_ZN5S41C74v100Ev");}
void  S41C7 ::v101(){vfunc_called(this, "_ZN5S41C74v101Ev");}
void  S41C7 ::v102(){vfunc_called(this, "_ZN5S41C74v102Ev");}
void  S41C7 ::v103(){vfunc_called(this, "_ZN5S41C74v103Ev");}
void  S41C7 ::v104(){vfunc_called(this, "_ZN5S41C74v104Ev");}
void  S41C7 ::v105(){vfunc_called(this, "_ZN5S41C74v105Ev");}
void  S41C7 ::v106(){vfunc_called(this, "_ZN5S41C74v106Ev");}
void  S41C7 ::v107(){vfunc_called(this, "_ZN5S41C74v107Ev");}
void  S41C7 ::v108(){vfunc_called(this, "_ZN5S41C74v108Ev");}
void  S41C7 ::v109(){vfunc_called(this, "_ZN5S41C74v109Ev");}
void  S41C7 ::v110(){vfunc_called(this, "_ZN5S41C74v110Ev");}
void  S41C7 ::v111(){vfunc_called(this, "_ZN5S41C74v111Ev");}
S41C7 ::~S41C7(){ note_dtor("S41C7", this);} // tgen
S41C7 ::S41C7(){ note_ctor("S41C7", this);} // tgen

static void Test_S41C7()
{
  extern Class_Descriptor cd_S41C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S41C7, buf);
    S41C7 *dp, &lv = *(dp=new (buf) S41C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S41C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S41C7)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S41C7");
    test_class_info(&lv, &cd_S41C7);
    dp->~S41C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS41C7(Test_S41C7, "S41C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S41C7C1Ev();
extern void _ZN5S41C7D1Ev();
Name_Map name_map_S41C7[] = {
  NSPAIR(_ZN5S41C7C1Ev),
  NSPAIR(_ZN5S41C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S41C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI5S41C7[];
extern void _ZN5S41C7D1Ev();
extern void _ZN5S41C7D0Ev();
extern void _ZN5S41C72v5Ev();
extern void _ZN5S41C72v6Ev();
extern void _ZN5S41C72v7Ev();
extern void _ZN5S41C72v8Ev();
extern void _ZN5S41C72v9Ev();
extern void _ZN5S41C73v10Ev();
extern void _ZN5S41C73v11Ev();
extern void _ZN5S41C73v12Ev();
extern void _ZN5S41C73v13Ev();
extern void _ZN5S41C73v14Ev();
extern void _ZN5S41C73v15Ev();
extern void _ZN5S41C73v16Ev();
extern void _ZN5S41C73v17Ev();
extern void _ZN5S41C73v18Ev();
extern void _ZN5S41C73v19Ev();
extern void _ZN5S41C73v20Ev();
extern void _ZN5S41C73v21Ev();
extern void _ZN5S41C73v22Ev();
extern void _ZN5S41C73v23Ev();
extern void _ZN5S41C73v24Ev();
extern void _ZN5S41C73v25Ev();
extern void _ZN5S41C73v26Ev();
extern void _ZN5S41C73v27Ev();
extern void _ZN5S41C73v28Ev();
extern void _ZN5S41C73v29Ev();
extern void _ZN5S41C73v30Ev();
extern void _ZN5S41C73v31Ev();
extern void _ZN5S41C73v32Ev();
extern void _ZN5S41C73v33Ev();
extern void _ZN5S41C73v34Ev();
extern void _ZN5S41C73v35Ev();
extern void _ZN5S41C73v36Ev();
extern void _ZN5S41C73v37Ev();
extern void _ZN5S41C73v38Ev();
extern void _ZN5S41C73v39Ev();
extern void _ZN5S41C73v40Ev();
extern void _ZN5S41C73v41Ev();
extern void _ZN5S41C73v42Ev();
extern void _ZN5S41C73v43Ev();
extern void _ZN5S41C73v44Ev();
extern void _ZN5S41C73v45Ev();
extern void _ZN5S41C73v46Ev();
extern void _ZN5S41C73v47Ev();
extern void _ZN5S41C73v48Ev();
extern void _ZN5S41C73v49Ev();
extern void _ZN5S41C73v50Ev();
extern void _ZN5S41C73v51Ev();
extern void _ZN5S41C73v52Ev();
extern void _ZN5S41C73v53Ev();
extern void _ZN5S41C73v54Ev();
extern void _ZN5S41C73v55Ev();
extern void _ZN5S41C73v56Ev();
extern void _ZN5S41C73v57Ev();
extern void _ZN5S41C73v58Ev();
extern void _ZN5S41C73v59Ev();
extern void _ZN5S41C73v60Ev();
extern void _ZN5S41C73v61Ev();
extern void _ZN5S41C73v62Ev();
extern void _ZN5S41C73v63Ev();
extern void _ZN5S41C73v64Ev();
extern void _ZN5S41C73v65Ev();
extern void _ZN5S41C73v66Ev();
extern void _ZN5S41C73v67Ev();
extern void _ZN5S41C73v68Ev();
extern void _ZN5S41C73v69Ev();
extern void _ZN5S41C73v70Ev();
extern void _ZN5S41C73v71Ev();
extern void _ZN5S41C73v72Ev();
extern void _ZN5S41C73v73Ev();
extern void _ZN5S41C73v74Ev();
extern void _ZN5S41C73v75Ev();
extern void _ZN5S41C73v76Ev();
extern void _ZN5S41C73v77Ev();
extern void _ZN5S41C73v78Ev();
extern void _ZN5S41C73v79Ev();
extern void _ZN5S41C73v80Ev();
extern void _ZN5S41C73v81Ev();
extern void _ZN5S41C73v82Ev();
extern void _ZN5S41C73v83Ev();
extern void _ZN5S41C73v84Ev();
extern void _ZN5S41C73v85Ev();
extern void _ZN5S41C73v86Ev();
extern void _ZN5S41C73v87Ev();
extern void _ZN5S41C73v88Ev();
extern void _ZN5S41C73v89Ev();
extern void _ZN5S41C73v90Ev();
extern void _ZN5S41C73v91Ev();
extern void _ZN5S41C73v92Ev();
extern void _ZN5S41C73v93Ev();
extern void _ZN5S41C73v94Ev();
extern void _ZN5S41C73v95Ev();
extern void _ZN5S41C73v96Ev();
extern void _ZN5S41C73v97Ev();
extern void _ZN5S41C73v98Ev();
extern void _ZN5S41C73v99Ev();
extern void _ZN5S41C74v100Ev();
extern void _ZN5S41C74v101Ev();
extern void _ZN5S41C74v102Ev();
extern void _ZN5S41C74v103Ev();
extern void _ZN5S41C74v104Ev();
extern void _ZN5S41C74v105Ev();
extern void _ZN5S41C74v106Ev();
extern void _ZN5S41C74v107Ev();
extern void _ZN5S41C74v108Ev();
extern void _ZN5S41C74v109Ev();
extern void _ZN5S41C74v110Ev();
extern void _ZN5S41C74v111Ev();
static  VTBL_ENTRY vtc_S41C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S41C7[0]),
  (VTBL_ENTRY)&_ZN5S41C7D1Ev,
  (VTBL_ENTRY)&_ZN5S41C7D0Ev,
  (VTBL_ENTRY)&_ZN5S41C72v5Ev,
  (VTBL_ENTRY)&_ZN5S41C72v6Ev,
  (VTBL_ENTRY)&_ZN5S41C72v7Ev,
  (VTBL_ENTRY)&_ZN5S41C72v8Ev,
  (VTBL_ENTRY)&_ZN5S41C72v9Ev,
  (VTBL_ENTRY)&_ZN5S41C73v10Ev,
  (VTBL_ENTRY)&_ZN5S41C73v11Ev,
  (VTBL_ENTRY)&_ZN5S41C73v12Ev,
  (VTBL_ENTRY)&_ZN5S41C73v13Ev,
  (VTBL_ENTRY)&_ZN5S41C73v14Ev,
  (VTBL_ENTRY)&_ZN5S41C73v15Ev,
  (VTBL_ENTRY)&_ZN5S41C73v16Ev,
  (VTBL_ENTRY)&_ZN5S41C73v17Ev,
  (VTBL_ENTRY)&_ZN5S41C73v18Ev,
  (VTBL_ENTRY)&_ZN5S41C73v19Ev,
  (VTBL_ENTRY)&_ZN5S41C73v20Ev,
  (VTBL_ENTRY)&_ZN5S41C73v21Ev,
  (VTBL_ENTRY)&_ZN5S41C73v22Ev,
  (VTBL_ENTRY)&_ZN5S41C73v23Ev,
  (VTBL_ENTRY)&_ZN5S41C73v24Ev,
  (VTBL_ENTRY)&_ZN5S41C73v25Ev,
  (VTBL_ENTRY)&_ZN5S41C73v26Ev,
  (VTBL_ENTRY)&_ZN5S41C73v27Ev,
  (VTBL_ENTRY)&_ZN5S41C73v28Ev,
  (VTBL_ENTRY)&_ZN5S41C73v29Ev,
  (VTBL_ENTRY)&_ZN5S41C73v30Ev,
  (VTBL_ENTRY)&_ZN5S41C73v31Ev,
  (VTBL_ENTRY)&_ZN5S41C73v32Ev,
  (VTBL_ENTRY)&_ZN5S41C73v33Ev,
  (VTBL_ENTRY)&_ZN5S41C73v34Ev,
  (VTBL_ENTRY)&_ZN5S41C73v35Ev,
  (VTBL_ENTRY)&_ZN5S41C73v36Ev,
  (VTBL_ENTRY)&_ZN5S41C73v37Ev,
  (VTBL_ENTRY)&_ZN5S41C73v38Ev,
  (VTBL_ENTRY)&_ZN5S41C73v39Ev,
  (VTBL_ENTRY)&_ZN5S41C73v40Ev,
  (VTBL_ENTRY)&_ZN5S41C73v41Ev,
  (VTBL_ENTRY)&_ZN5S41C73v42Ev,
  (VTBL_ENTRY)&_ZN5S41C73v43Ev,
  (VTBL_ENTRY)&_ZN5S41C73v44Ev,
  (VTBL_ENTRY)&_ZN5S41C73v45Ev,
  (VTBL_ENTRY)&_ZN5S41C73v46Ev,
  (VTBL_ENTRY)&_ZN5S41C73v47Ev,
  (VTBL_ENTRY)&_ZN5S41C73v48Ev,
  (VTBL_ENTRY)&_ZN5S41C73v49Ev,
  (VTBL_ENTRY)&_ZN5S41C73v50Ev,
  (VTBL_ENTRY)&_ZN5S41C73v51Ev,
  (VTBL_ENTRY)&_ZN5S41C73v52Ev,
  (VTBL_ENTRY)&_ZN5S41C73v53Ev,
  (VTBL_ENTRY)&_ZN5S41C73v54Ev,
  (VTBL_ENTRY)&_ZN5S41C73v55Ev,
  (VTBL_ENTRY)&_ZN5S41C73v56Ev,
  (VTBL_ENTRY)&_ZN5S41C73v57Ev,
  (VTBL_ENTRY)&_ZN5S41C73v58Ev,
  (VTBL_ENTRY)&_ZN5S41C73v59Ev,
  (VTBL_ENTRY)&_ZN5S41C73v60Ev,
  (VTBL_ENTRY)&_ZN5S41C73v61Ev,
  (VTBL_ENTRY)&_ZN5S41C73v62Ev,
  (VTBL_ENTRY)&_ZN5S41C73v63Ev,
  (VTBL_ENTRY)&_ZN5S41C73v64Ev,
  (VTBL_ENTRY)&_ZN5S41C73v65Ev,
  (VTBL_ENTRY)&_ZN5S41C73v66Ev,
  (VTBL_ENTRY)&_ZN5S41C73v67Ev,
  (VTBL_ENTRY)&_ZN5S41C73v68Ev,
  (VTBL_ENTRY)&_ZN5S41C73v69Ev,
  (VTBL_ENTRY)&_ZN5S41C73v70Ev,
  (VTBL_ENTRY)&_ZN5S41C73v71Ev,
  (VTBL_ENTRY)&_ZN5S41C73v72Ev,
  (VTBL_ENTRY)&_ZN5S41C73v73Ev,
  (VTBL_ENTRY)&_ZN5S41C73v74Ev,
  (VTBL_ENTRY)&_ZN5S41C73v75Ev,
  (VTBL_ENTRY)&_ZN5S41C73v76Ev,
  (VTBL_ENTRY)&_ZN5S41C73v77Ev,
  (VTBL_ENTRY)&_ZN5S41C73v78Ev,
  (VTBL_ENTRY)&_ZN5S41C73v79Ev,
  (VTBL_ENTRY)&_ZN5S41C73v80Ev,
  (VTBL_ENTRY)&_ZN5S41C73v81Ev,
  (VTBL_ENTRY)&_ZN5S41C73v82Ev,
  (VTBL_ENTRY)&_ZN5S41C73v83Ev,
  (VTBL_ENTRY)&_ZN5S41C73v84Ev,
  (VTBL_ENTRY)&_ZN5S41C73v85Ev,
  (VTBL_ENTRY)&_ZN5S41C73v86Ev,
  (VTBL_ENTRY)&_ZN5S41C73v87Ev,
  (VTBL_ENTRY)&_ZN5S41C73v88Ev,
  (VTBL_ENTRY)&_ZN5S41C73v89Ev,
  (VTBL_ENTRY)&_ZN5S41C73v90Ev,
  (VTBL_ENTRY)&_ZN5S41C73v91Ev,
  (VTBL_ENTRY)&_ZN5S41C73v92Ev,
  (VTBL_ENTRY)&_ZN5S41C73v93Ev,
  (VTBL_ENTRY)&_ZN5S41C73v94Ev,
  (VTBL_ENTRY)&_ZN5S41C73v95Ev,
  (VTBL_ENTRY)&_ZN5S41C73v96Ev,
  (VTBL_ENTRY)&_ZN5S41C73v97Ev,
  (VTBL_ENTRY)&_ZN5S41C73v98Ev,
  (VTBL_ENTRY)&_ZN5S41C73v99Ev,
  (VTBL_ENTRY)&_ZN5S41C74v100Ev,
  (VTBL_ENTRY)&_ZN5S41C74v101Ev,
  (VTBL_ENTRY)&_ZN5S41C74v102Ev,
  (VTBL_ENTRY)&_ZN5S41C74v103Ev,
  (VTBL_ENTRY)&_ZN5S41C74v104Ev,
  (VTBL_ENTRY)&_ZN5S41C74v105Ev,
  (VTBL_ENTRY)&_ZN5S41C74v106Ev,
  (VTBL_ENTRY)&_ZN5S41C74v107Ev,
  (VTBL_ENTRY)&_ZN5S41C74v108Ev,
  (VTBL_ENTRY)&_ZN5S41C74v109Ev,
  (VTBL_ENTRY)&_ZN5S41C74v110Ev,
  (VTBL_ENTRY)&_ZN5S41C74v111Ev,
};
extern VTBL_ENTRY _ZTI5S41C7[];
extern  VTBL_ENTRY _ZTV5S41C7[];
Class_Descriptor cd_S41C7 = {  "S41C7", // class name
  bases_S41C7, 1,
  &(vtc_S41C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S41C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S41C7),111, //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  S41C6  : S41C7 {
  ~S41C6(); // tgen
  S41C6(); // tgen
};
//SIG(-1 S41C6) C1{ BC2{ BC3{ vd m Fp Fi} 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 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}}


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

static void Test_S41C6()
{
  extern Class_Descriptor cd_S41C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S41C6, buf);
    S41C6 *dp, &lv = *(dp=new (buf) S41C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S41C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S41C6)");
    check_base_class_offset(lv, (S1C11_nt*)(S41C7*), 0, "S41C6");
    check_base_class_offset(lv, (S41C7*), 0, "S41C6");
    test_class_info(&lv, &cd_S41C6);
    dp->~S41C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS41C6(Test_S41C6, "S41C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S41C6C1Ev();
extern void _ZN5S41C6D1Ev();
Name_Map name_map_S41C6[] = {
  NSPAIR(_ZN5S41C6C1Ev),
  NSPAIR(_ZN5S41C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S41C7;
extern VTBL_ENTRY _ZTI5S41C7[];
extern  VTBL_ENTRY _ZTV5S41C7[];
static Base_Class bases_S41C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S41C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S41C6[];
extern void _ZN5S41C6D1Ev();
extern void _ZN5S41C6D0Ev();
extern void _ZN5S41C72v5Ev();
extern void _ZN5S41C72v6Ev();
extern void _ZN5S41C72v7Ev();
extern void _ZN5S41C72v8Ev();
extern void _ZN5S41C72v9Ev();
extern void _ZN5S41C73v10Ev();
extern void _ZN5S41C73v11Ev();
extern void _ZN5S41C73v12Ev();
extern void _ZN5S41C73v13Ev();
extern void _ZN5S41C73v14Ev();
extern void _ZN5S41C73v15Ev();
extern void _ZN5S41C73v16Ev();
extern void _ZN5S41C73v17Ev();
extern void _ZN5S41C73v18Ev();
extern void _ZN5S41C73v19Ev();
extern void _ZN5S41C73v20Ev();
extern void _ZN5S41C73v21Ev();
extern void _ZN5S41C73v22Ev();
extern void _ZN5S41C73v23Ev();
extern void _ZN5S41C73v24Ev();
extern void _ZN5S41C73v25Ev();
extern void _ZN5S41C73v26Ev();
extern void _ZN5S41C73v27Ev();
extern void _ZN5S41C73v28Ev();
extern void _ZN5S41C73v29Ev();
extern void _ZN5S41C73v30Ev();
extern void _ZN5S41C73v31Ev();
extern void _ZN5S41C73v32Ev();
extern void _ZN5S41C73v33Ev();
extern void _ZN5S41C73v34Ev();
extern void _ZN5S41C73v35Ev();
extern void _ZN5S41C73v36Ev();
extern void _ZN5S41C73v37Ev();
extern void _ZN5S41C73v38Ev();
extern void _ZN5S41C73v39Ev();
extern void _ZN5S41C73v40Ev();
extern void _ZN5S41C73v41Ev();
extern void _ZN5S41C73v42Ev();
extern void _ZN5S41C73v43Ev();
extern void _ZN5S41C73v44Ev();
extern void _ZN5S41C73v45Ev();
extern void _ZN5S41C73v46Ev();
extern void _ZN5S41C73v47Ev();
extern void _ZN5S41C73v48Ev();
extern void _ZN5S41C73v49Ev();
extern void _ZN5S41C73v50Ev();
extern void _ZN5S41C73v51Ev();
extern void _ZN5S41C73v52Ev();
extern void _ZN5S41C73v53Ev();
extern void _ZN5S41C73v54Ev();
extern void _ZN5S41C73v55Ev();
extern void _ZN5S41C73v56Ev();
extern void _ZN5S41C73v57Ev();
extern void _ZN5S41C73v58Ev();
extern void _ZN5S41C73v59Ev();
extern void _ZN5S41C73v60Ev();
extern void _ZN5S41C73v61Ev();
extern void _ZN5S41C73v62Ev();
extern void _ZN5S41C73v63Ev();
extern void _ZN5S41C73v64Ev();
extern void _ZN5S41C73v65Ev();
extern void _ZN5S41C73v66Ev();
extern void _ZN5S41C73v67Ev();
extern void _ZN5S41C73v68Ev();
extern void _ZN5S41C73v69Ev();
extern void _ZN5S41C73v70Ev();
extern void _ZN5S41C73v71Ev();
extern void _ZN5S41C73v72Ev();
extern void _ZN5S41C73v73Ev();
extern void _ZN5S41C73v74Ev();
extern void _ZN5S41C73v75Ev();
extern void _ZN5S41C73v76Ev();
extern void _ZN5S41C73v77Ev();
extern void _ZN5S41C73v78Ev();
extern void _ZN5S41C73v79Ev();
extern void _ZN5S41C73v80Ev();
extern void _ZN5S41C73v81Ev();
extern void _ZN5S41C73v82Ev();
extern void _ZN5S41C73v83Ev();
extern void _ZN5S41C73v84Ev();
extern void _ZN5S41C73v85Ev();
extern void _ZN5S41C73v86Ev();
extern void _ZN5S41C73v87Ev();
extern void _ZN5S41C73v88Ev();
extern void _ZN5S41C73v89Ev();
extern void _ZN5S41C73v90Ev();
extern void _ZN5S41C73v91Ev();
extern void _ZN5S41C73v92Ev();
extern void _ZN5S41C73v93Ev();
extern void _ZN5S41C73v94Ev();
extern void _ZN5S41C73v95Ev();
extern void _ZN5S41C73v96Ev();
extern void _ZN5S41C73v97Ev();
extern void _ZN5S41C73v98Ev();
extern void _ZN5S41C73v99Ev();
extern void _ZN5S41C74v100Ev();
extern void _ZN5S41C74v101Ev();
extern void _ZN5S41C74v102Ev();
extern void _ZN5S41C74v103Ev();
extern void _ZN5S41C74v104Ev();
extern void _ZN5S41C74v105Ev();
extern void _ZN5S41C74v106Ev();
extern void _ZN5S41C74v107Ev();
extern void _ZN5S41C74v108Ev();
extern void _ZN5S41C74v109Ev();
extern void _ZN5S41C74v110Ev();
extern void _ZN5S41C74v111Ev();
static  VTBL_ENTRY vtc_S41C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S41C6[0]),
  (VTBL_ENTRY)&_ZN5S41C6D1Ev,
  (VTBL_ENTRY)&_ZN5S41C6D0Ev,
  (VTBL_ENTRY)&_ZN5S41C72v5Ev,
  (VTBL_ENTRY)&_ZN5S41C72v6Ev,
  (VTBL_ENTRY)&_ZN5S41C72v7Ev,
  (VTBL_ENTRY)&_ZN5S41C72v8Ev,
  (VTBL_ENTRY)&_ZN5S41C72v9Ev,
  (VTBL_ENTRY)&_ZN5S41C73v10Ev,
  (VTBL_ENTRY)&_ZN5S41C73v11Ev,
  (VTBL_ENTRY)&_ZN5S41C73v12Ev,
  (VTBL_ENTRY)&_ZN5S41C73v13Ev,
  (VTBL_ENTRY)&_ZN5S41C73v14Ev,
  (VTBL_ENTRY)&_ZN5S41C73v15Ev,
  (VTBL_ENTRY)&_ZN5S41C73v16Ev,
  (VTBL_ENTRY)&_ZN5S41C73v17Ev,
  (VTBL_ENTRY)&_ZN5S41C73v18Ev,
  (VTBL_ENTRY)&_ZN5S41C73v19Ev,
  (VTBL_ENTRY)&_ZN5S41C73v20Ev,
  (VTBL_ENTRY)&_ZN5S41C73v21Ev,
  (VTBL_ENTRY)&_ZN5S41C73v22Ev,
  (VTBL_ENTRY)&_ZN5S41C73v23Ev,
  (VTBL_ENTRY)&_ZN5S41C73v24Ev,
  (VTBL_ENTRY)&_ZN5S41C73v25Ev,
  (VTBL_ENTRY)&_ZN5S41C73v26Ev,
  (VTBL_ENTRY)&_ZN5S41C73v27Ev,
  (VTBL_ENTRY)&_ZN5S41C73v28Ev,
  (VTBL_ENTRY)&_ZN5S41C73v29Ev,
  (VTBL_ENTRY)&_ZN5S41C73v30Ev,
  (VTBL_ENTRY)&_ZN5S41C73v31Ev,
  (VTBL_ENTRY)&_ZN5S41C73v32Ev,
  (VTBL_ENTRY)&_ZN5S41C73v33Ev,
  (VTBL_ENTRY)&_ZN5S41C73v34Ev,
  (VTBL_ENTRY)&_ZN5S41C73v35Ev,
  (VTBL_ENTRY)&_ZN5S41C73v36Ev,
  (VTBL_ENTRY)&_ZN5S41C73v37Ev,
  (VTBL_ENTRY)&_ZN5S41C73v38Ev,
  (VTBL_ENTRY)&_ZN5S41C73v39Ev,
  (VTBL_ENTRY)&_ZN5S41C73v40Ev,
  (VTBL_ENTRY)&_ZN5S41C73v41Ev,
  (VTBL_ENTRY)&_ZN5S41C73v42Ev,
  (VTBL_ENTRY)&_ZN5S41C73v43Ev,
  (VTBL_ENTRY)&_ZN5S41C73v44Ev,
  (VTBL_ENTRY)&_ZN5S41C73v45Ev,
  (VTBL_ENTRY)&_ZN5S41C73v46Ev,
  (VTBL_ENTRY)&_ZN5S41C73v47Ev,
  (VTBL_ENTRY)&_ZN5S41C73v48Ev,
  (VTBL_ENTRY)&_ZN5S41C73v49Ev,
  (VTBL_ENTRY)&_ZN5S41C73v50Ev,
  (VTBL_ENTRY)&_ZN5S41C73v51Ev,
  (VTBL_ENTRY)&_ZN5S41C73v52Ev,
  (VTBL_ENTRY)&_ZN5S41C73v53Ev,
  (VTBL_ENTRY)&_ZN5S41C73v54Ev,
  (VTBL_ENTRY)&_ZN5S41C73v55Ev,
  (VTBL_ENTRY)&_ZN5S41C73v56Ev,
  (VTBL_ENTRY)&_ZN5S41C73v57Ev,
  (VTBL_ENTRY)&_ZN5S41C73v58Ev,
  (VTBL_ENTRY)&_ZN5S41C73v59Ev,
  (VTBL_ENTRY)&_ZN5S41C73v60Ev,
  (VTBL_ENTRY)&_ZN5S41C73v61Ev,
  (VTBL_ENTRY)&_ZN5S41C73v62Ev,
  (VTBL_ENTRY)&_ZN5S41C73v63Ev,
  (VTBL_ENTRY)&_ZN5S41C73v64Ev,
  (VTBL_ENTRY)&_ZN5S41C73v65Ev,
  (VTBL_ENTRY)&_ZN5S41C73v66Ev,
  (VTBL_ENTRY)&_ZN5S41C73v67Ev,
  (VTBL_ENTRY)&_ZN5S41C73v68Ev,
  (VTBL_ENTRY)&_ZN5S41C73v69Ev,
  (VTBL_ENTRY)&_ZN5S41C73v70Ev,
  (VTBL_ENTRY)&_ZN5S41C73v71Ev,
  (VTBL_ENTRY)&_ZN5S41C73v72Ev,
  (VTBL_ENTRY)&_ZN5S41C73v73Ev,
  (VTBL_ENTRY)&_ZN5S41C73v74Ev,
  (VTBL_ENTRY)&_ZN5S41C73v75Ev,
  (VTBL_ENTRY)&_ZN5S41C73v76Ev,
  (VTBL_ENTRY)&_ZN5S41C73v77Ev,
  (VTBL_ENTRY)&_ZN5S41C73v78Ev,
  (VTBL_ENTRY)&_ZN5S41C73v79Ev,
  (VTBL_ENTRY)&_ZN5S41C73v80Ev,
  (VTBL_ENTRY)&_ZN5S41C73v81Ev,
  (VTBL_ENTRY)&_ZN5S41C73v82Ev,
  (VTBL_ENTRY)&_ZN5S41C73v83Ev,
  (VTBL_ENTRY)&_ZN5S41C73v84Ev,
  (VTBL_ENTRY)&_ZN5S41C73v85Ev,
  (VTBL_ENTRY)&_ZN5S41C73v86Ev,
  (VTBL_ENTRY)&_ZN5S41C73v87Ev,
  (VTBL_ENTRY)&_ZN5S41C73v88Ev,
  (VTBL_ENTRY)&_ZN5S41C73v89Ev,
  (VTBL_ENTRY)&_ZN5S41C73v90Ev,
  (VTBL_ENTRY)&_ZN5S41C73v91Ev,
  (VTBL_ENTRY)&_ZN5S41C73v92Ev,
  (VTBL_ENTRY)&_ZN5S41C73v93Ev,
  (VTBL_ENTRY)&_ZN5S41C73v94Ev,
  (VTBL_ENTRY)&_ZN5S41C73v95Ev,
  (VTBL_ENTRY)&_ZN5S41C73v96Ev,
  (VTBL_ENTRY)&_ZN5S41C73v97Ev,
  (VTBL_ENTRY)&_ZN5S41C73v98Ev,
  (VTBL_ENTRY)&_ZN5S41C73v99Ev,
  (VTBL_ENTRY)&_ZN5S41C74v100Ev,
  (VTBL_ENTRY)&_ZN5S41C74v101Ev,
  (VTBL_ENTRY)&_ZN5S41C74v102Ev,
  (VTBL_ENTRY)&_ZN5S41C74v103Ev,
  (VTBL_ENTRY)&_ZN5S41C74v104Ev,
  (VTBL_ENTRY)&_ZN5S41C74v105Ev,
  (VTBL_ENTRY)&_ZN5S41C74v106Ev,
  (VTBL_ENTRY)&_ZN5S41C74v107Ev,
  (VTBL_ENTRY)&_ZN5S41C74v108Ev,
  (VTBL_ENTRY)&_ZN5S41C74v109Ev,
  (VTBL_ENTRY)&_ZN5S41C74v110Ev,
  (VTBL_ENTRY)&_ZN5S41C74v111Ev,
};
extern VTBL_ENTRY _ZTI5S41C6[];
extern  VTBL_ENTRY _ZTV5S41C6[];
Class_Descriptor cd_S41C6 = {  "S41C6", // class name
  bases_S41C6, 2,
  &(vtc_S41C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S41C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S41C6),111, //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  S41C5  : S41C6 {
  virtual void  v112(); // _ZN5S41C54v112Ev
  virtual void  v113(); // _ZN5S41C54v113Ev
  virtual void  v114(); // _ZN5S41C54v114Ev
  virtual void  v115(); // _ZN5S41C54v115Ev
  virtual void  v116(); // _ZN5S41C54v116Ev
  virtual void  v117(); // _ZN5S41C54v117Ev
  virtual void  v118(); // _ZN5S41C54v118Ev
  virtual void  v119(); // _ZN5S41C54v119Ev
  virtual void  v120(); // _ZN5S41C54v120Ev
  virtual void  v121(); // _ZN5S41C54v121Ev
  virtual void  v122(); // _ZN5S41C54v122Ev
  virtual void  v123(); // _ZN5S41C54v123Ev
  virtual void  v124(); // _ZN5S41C54v124Ev
  virtual void  v125(); // _ZN5S41C54v125Ev
  virtual void  v126(); // _ZN5S41C54v126Ev
  virtual void  v127(); // _ZN5S41C54v127Ev
  virtual void  v128(); // _ZN5S41C54v128Ev
  virtual void  v129(); // _ZN5S41C54v129Ev
  virtual void  v130(); // _ZN5S41C54v130Ev
  virtual void  v131(); // _ZN5S41C54v131Ev
  virtual void  v132(); // _ZN5S41C54v132Ev
  virtual void  v133(); // _ZN5S41C54v133Ev
  virtual void  v134(); // _ZN5S41C54v134Ev
  virtual void  v135(); // _ZN5S41C54v135Ev
  virtual void  v136(); // _ZN5S41C54v136Ev
  virtual void  v137(); // _ZN5S41C54v137Ev
  ~S41C5(); // tgen
  S41C5(); // tgen
};
//SIG(-1 S41C5) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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 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}} 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}


void  S41C5 ::v112(){vfunc_called(this, "_ZN5S41C54v112Ev");}
void  S41C5 ::v113(){vfunc_called(this, "_ZN5S41C54v113Ev");}
void  S41C5 ::v114(){vfunc_called(this, "_ZN5S41C54v114Ev");}
void  S41C5 ::v115(){vfunc_called(this, "_ZN5S41C54v115Ev");}
void  S41C5 ::v116(){vfunc_called(this, "_ZN5S41C54v116Ev");}
void  S41C5 ::v117(){vfunc_called(this, "_ZN5S41C54v117Ev");}
void  S41C5 ::v118(){vfunc_called(this, "_ZN5S41C54v118Ev");}
void  S41C5 ::v119(){vfunc_called(this, "_ZN5S41C54v119Ev");}
void  S41C5 ::v120(){vfunc_called(this, "_ZN5S41C54v120Ev");}
void  S41C5 ::v121(){vfunc_called(this, "_ZN5S41C54v121Ev");}
void  S41C5 ::v122(){vfunc_called(this, "_ZN5S41C54v122Ev");}
void  S41C5 ::v123(){vfunc_called(this, "_ZN5S41C54v123Ev");}
void  S41C5 ::v124(){vfunc_called(this, "_ZN5S41C54v124Ev");}
void  S41C5 ::v125(){vfunc_called(this, "_ZN5S41C54v125Ev");}
void  S41C5 ::v126(){vfunc_called(this, "_ZN5S41C54v126Ev");}
void  S41C5 ::v127(){vfunc_called(this, "_ZN5S41C54v127Ev");}
void  S41C5 ::v128(){vfunc_called(this, "_ZN5S41C54v128Ev");}
void  S41C5 ::v129(){vfunc_called(this, "_ZN5S41C54v129Ev");}
void  S41C5 ::v130(){vfunc_called(this, "_ZN5S41C54v130Ev");}
void  S41C5 ::v131(){vfunc_called(this, "_ZN5S41C54v131Ev");}
void  S41C5 ::v132(){vfunc_called(this, "_ZN5S41C54v132Ev");}
void  S41C5 ::v133(){vfunc_called(this, "_ZN5S41C54v133Ev");}
void  S41C5 ::v134(){vfunc_called(this, "_ZN5S41C54v134Ev");}
void  S41C5 ::v135(){vfunc_called(this, "_ZN5S41C54v135Ev");}
void  S41C5 ::v136(){vfunc_called(this, "_ZN5S41C54v136Ev");}
void  S41C5 ::v137(){vfunc_called(this, "_ZN5S41C54v137Ev");}
S41C5 ::~S41C5(){ note_dtor("S41C5", this);} // tgen
S41C5 ::S41C5(){ note_ctor("S41C5", this);} // tgen

static void Test_S41C5()
{
  extern Class_Descriptor cd_S41C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S41C5, buf);
    S41C5 *dp, &lv = *(dp=new (buf) S41C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S41C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S41C5)");
    check_base_class_offset(lv, (S1C11_nt*)(S41C7*)(S41C6*), 0, "S41C5");
    check_base_class_offset(lv, (S41C7*)(S41C6*), 0, "S41C5");
    check_base_class_offset(lv, (S41C6*), 0, "S41C5");
    test_class_info(&lv, &cd_S41C5);
    dp->~S41C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS41C5(Test_S41C5, "S41C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S41C5C1Ev();
extern void _ZN5S41C5D1Ev();
Name_Map name_map_S41C5[] = {
  NSPAIR(_ZN5S41C5C1Ev),
  NSPAIR(_ZN5S41C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S41C7;
extern VTBL_ENTRY _ZTI5S41C7[];
extern  VTBL_ENTRY _ZTV5S41C7[];
extern Class_Descriptor cd_S41C6;
extern VTBL_ENTRY _ZTI5S41C6[];
extern  VTBL_ENTRY _ZTV5S41C6[];
static Base_Class bases_S41C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S41C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S41C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S41C5[];
extern void _ZN5S41C5D1Ev();
extern void _ZN5S41C5D0Ev();
extern void _ZN5S41C72v5Ev();
extern void _ZN5S41C72v6Ev();
extern void _ZN5S41C72v7Ev();
extern void _ZN5S41C72v8Ev();
extern void _ZN5S41C72v9Ev();
extern void _ZN5S41C73v10Ev();
extern void _ZN5S41C73v11Ev();
extern void _ZN5S41C73v12Ev();
extern void _ZN5S41C73v13Ev();
extern void _ZN5S41C73v14Ev();
extern void _ZN5S41C73v15Ev();
extern void _ZN5S41C73v16Ev();
extern void _ZN5S41C73v17Ev();
extern void _ZN5S41C73v18Ev();
extern void _ZN5S41C73v19Ev();
extern void _ZN5S41C73v20Ev();
extern void _ZN5S41C73v21Ev();
extern void _ZN5S41C73v22Ev();
extern void _ZN5S41C73v23Ev();
extern void _ZN5S41C73v24Ev();
extern void _ZN5S41C73v25Ev();
extern void _ZN5S41C73v26Ev();
extern void _ZN5S41C73v27Ev();
extern void _ZN5S41C73v28Ev();
extern void _ZN5S41C73v29Ev();
extern void _ZN5S41C73v30Ev();
extern void _ZN5S41C73v31Ev();
extern void _ZN5S41C73v32Ev();
extern void _ZN5S41C73v33Ev();
extern void _ZN5S41C73v34Ev();
extern void _ZN5S41C73v35Ev();
extern void _ZN5S41C73v36Ev();
extern void _ZN5S41C73v37Ev();
extern void _ZN5S41C73v38Ev();
extern void _ZN5S41C73v39Ev();
extern void _ZN5S41C73v40Ev();
extern void _ZN5S41C73v41Ev();
extern void _ZN5S41C73v42Ev();
extern void _ZN5S41C73v43Ev();
extern void _ZN5S41C73v44Ev();
extern void _ZN5S41C73v45Ev();
extern void _ZN5S41C73v46Ev();
extern void _ZN5S41C73v47Ev();
extern void _ZN5S41C73v48Ev();
extern void _ZN5S41C73v49Ev();
extern void _ZN5S41C73v50Ev();
extern void _ZN5S41C73v51Ev();
extern void _ZN5S41C73v52Ev();
extern void _ZN5S41C73v53Ev();
extern void _ZN5S41C73v54Ev();
extern void _ZN5S41C73v55Ev();
extern void _ZN5S41C73v56Ev();
extern void _ZN5S41C73v57Ev();
extern void _ZN5S41C73v58Ev();
extern void _ZN5S41C73v59Ev();
extern void _ZN5S41C73v60Ev();
extern void _ZN5S41C73v61Ev();
extern void _ZN5S41C73v62Ev();
extern void _ZN5S41C73v63Ev();
extern void _ZN5S41C73v64Ev();
extern void _ZN5S41C73v65Ev();
extern void _ZN5S41C73v66Ev();
extern void _ZN5S41C73v67Ev();
extern void _ZN5S41C73v68Ev();
extern void _ZN5S41C73v69Ev();
extern void _ZN5S41C73v70Ev();
extern void _ZN5S41C73v71Ev();
extern void _ZN5S41C73v72Ev();
extern void _ZN5S41C73v73Ev();
extern void _ZN5S41C73v74Ev();
extern void _ZN5S41C73v75Ev();
extern void _ZN5S41C73v76Ev();
extern void _ZN5S41C73v77Ev();
extern void _ZN5S41C73v78Ev();
extern void _ZN5S41C73v79Ev();
extern void _ZN5S41C73v80Ev();
extern void _ZN5S41C73v81Ev();
extern void _ZN5S41C73v82Ev();
extern void _ZN5S41C73v83Ev();
extern void _ZN5S41C73v84Ev();
extern void _ZN5S41C73v85Ev();
extern void _ZN5S41C73v86Ev();
extern void _ZN5S41C73v87Ev();
extern void _ZN5S41C73v88Ev();
extern void _ZN5S41C73v89Ev();
extern void _ZN5S41C73v90Ev();
extern void _ZN5S41C73v91Ev();
extern void _ZN5S41C73v92Ev();
extern void _ZN5S41C73v93Ev();
extern void _ZN5S41C73v94Ev();
extern void _ZN5S41C73v95Ev();
extern void _ZN5S41C73v96Ev();
extern void _ZN5S41C73v97Ev();
extern void _ZN5S41C73v98Ev();
extern void _ZN5S41C73v99Ev();
extern void _ZN5S41C74v100Ev();
extern void _ZN5S41C74v101Ev();
extern void _ZN5S41C74v102Ev();
extern void _ZN5S41C74v103Ev();
extern void _ZN5S41C74v104Ev();
extern void _ZN5S41C74v105Ev();
extern void _ZN5S41C74v106Ev();
extern void _ZN5S41C74v107Ev();
extern void _ZN5S41C74v108Ev();
extern void _ZN5S41C74v109Ev();
extern void _ZN5S41C74v110Ev();
extern void _ZN5S41C74v111Ev();
extern void _ZN5S41C54v112Ev();
extern void _ZN5S41C54v113Ev();
extern void _ZN5S41C54v114Ev();
extern void _ZN5S41C54v115Ev();
extern void _ZN5S41C54v116Ev();
extern void _ZN5S41C54v117Ev();
extern void _ZN5S41C54v118Ev();
extern void _ZN5S41C54v119Ev();
extern void _ZN5S41C54v120Ev();
extern void _ZN5S41C54v121Ev();
extern void _ZN5S41C54v122Ev();
extern void _ZN5S41C54v123Ev();
extern void _ZN5S41C54v124Ev();
extern void _ZN5S41C54v125Ev();
extern void _ZN5S41C54v126Ev();
extern void _ZN5S41C54v127Ev();
extern void _ZN5S41C54v128Ev();
extern void _ZN5S41C54v129Ev();
extern void _ZN5S41C54v130Ev();
extern void _ZN5S41C54v131Ev();
extern void _ZN5S41C54v132Ev();
extern void _ZN5S41C54v133Ev();
extern void _ZN5S41C54v134Ev();
extern void _ZN5S41C54v135Ev();
extern void _ZN5S41C54v136Ev();
extern void _ZN5S41C54v137Ev();
static  VTBL_ENTRY vtc_S41C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S41C5[0]),
  (VTBL_ENTRY)&_ZN5S41C5D1Ev,
  (VTBL_ENTRY)&_ZN5S41C5D0Ev,
  (VTBL_ENTRY)&_ZN5S41C72v5Ev,
  (VTBL_ENTRY)&_ZN5S41C72v6Ev,
  (VTBL_ENTRY)&_ZN5S41C72v7Ev,
  (VTBL_ENTRY)&_ZN5S41C72v8Ev,
  (VTBL_ENTRY)&_ZN5S41C72v9Ev,
  (VTBL_ENTRY)&_ZN5S41C73v10Ev,
  (VTBL_ENTRY)&_ZN5S41C73v11Ev,
  (VTBL_ENTRY)&_ZN5S41C73v12Ev,
  (VTBL_ENTRY)&_ZN5S41C73v13Ev,
  (VTBL_ENTRY)&_ZN5S41C73v14Ev,
  (VTBL_ENTRY)&_ZN5S41C73v15Ev,
  (VTBL_ENTRY)&_ZN5S41C73v16Ev,
  (VTBL_ENTRY)&_ZN5S41C73v17Ev,
  (VTBL_ENTRY)&_ZN5S41C73v18Ev,
  (VTBL_ENTRY)&_ZN5S41C73v19Ev,
  (VTBL_ENTRY)&_ZN5S41C73v20Ev,
  (VTBL_ENTRY)&_ZN5S41C73v21Ev,
  (VTBL_ENTRY)&_ZN5S41C73v22Ev,
  (VTBL_ENTRY)&_ZN5S41C73v23Ev,
  (VTBL_ENTRY)&_ZN5S41C73v24Ev,
  (VTBL_ENTRY)&_ZN5S41C73v25Ev,
  (VTBL_ENTRY)&_ZN5S41C73v26Ev,
  (VTBL_ENTRY)&_ZN5S41C73v27Ev,
  (VTBL_ENTRY)&_ZN5S41C73v28Ev,
  (VTBL_ENTRY)&_ZN5S41C73v29Ev,
  (VTBL_ENTRY)&_ZN5S41C73v30Ev,
  (VTBL_ENTRY)&_ZN5S41C73v31Ev,
  (VTBL_ENTRY)&_ZN5S41C73v32Ev,
  (VTBL_ENTRY)&_ZN5S41C73v33Ev,
  (VTBL_ENTRY)&_ZN5S41C73v34Ev,
  (VTBL_ENTRY)&_ZN5S41C73v35Ev,
  (VTBL_ENTRY)&_ZN5S41C73v36Ev,
  (VTBL_ENTRY)&_ZN5S41C73v37Ev,
  (VTBL_ENTRY)&_ZN5S41C73v38Ev,
  (VTBL_ENTRY)&_ZN5S41C73v39Ev,
  (VTBL_ENTRY)&_ZN5S41C73v40Ev,
  (VTBL_ENTRY)&_ZN5S41C73v41Ev,
  (VTBL_ENTRY)&_ZN5S41C73v42Ev,
  (VTBL_ENTRY)&_ZN5S41C73v43Ev,
  (VTBL_ENTRY)&_ZN5S41C73v44Ev,
  (VTBL_ENTRY)&_ZN5S41C73v45Ev,
  (VTBL_ENTRY)&_ZN5S41C73v46Ev,
  (VTBL_ENTRY)&_ZN5S41C73v47Ev,
  (VTBL_ENTRY)&_ZN5S41C73v48Ev,
  (VTBL_ENTRY)&_ZN5S41C73v49Ev,
  (VTBL_ENTRY)&_ZN5S41C73v50Ev,
  (VTBL_ENTRY)&_ZN5S41C73v51Ev,
  (VTBL_ENTRY)&_ZN5S41C73v52Ev,
  (VTBL_ENTRY)&_ZN5S41C73v53Ev,
  (VTBL_ENTRY)&_ZN5S41C73v54Ev,
  (VTBL_ENTRY)&_ZN5S41C73v55Ev,
  (VTBL_ENTRY)&_ZN5S41C73v56Ev,
  (VTBL_ENTRY)&_ZN5S41C73v57Ev,
  (VTBL_ENTRY)&_ZN5S41C73v58Ev,
  (VTBL_ENTRY)&_ZN5S41C73v59Ev,
  (VTBL_ENTRY)&_ZN5S41C73v60Ev,
  (VTBL_ENTRY)&_ZN5S41C73v61Ev,
  (VTBL_ENTRY)&_ZN5S41C73v62Ev,
  (VTBL_ENTRY)&_ZN5S41C73v63Ev,
  (VTBL_ENTRY)&_ZN5S41C73v64Ev,
  (VTBL_ENTRY)&_ZN5S41C73v65Ev,
  (VTBL_ENTRY)&_ZN5S41C73v66Ev,
  (VTBL_ENTRY)&_ZN5S41C73v67Ev,
  (VTBL_ENTRY)&_ZN5S41C73v68Ev,
  (VTBL_ENTRY)&_ZN5S41C73v69Ev,
  (VTBL_ENTRY)&_ZN5S41C73v70Ev,
  (VTBL_ENTRY)&_ZN5S41C73v71Ev,
  (VTBL_ENTRY)&_ZN5S41C73v72Ev,
  (VTBL_ENTRY)&_ZN5S41C73v73Ev,
  (VTBL_ENTRY)&_ZN5S41C73v74Ev,
  (VTBL_ENTRY)&_ZN5S41C73v75Ev,
  (VTBL_ENTRY)&_ZN5S41C73v76Ev,
  (VTBL_ENTRY)&_ZN5S41C73v77Ev,
  (VTBL_ENTRY)&_ZN5S41C73v78Ev,
  (VTBL_ENTRY)&_ZN5S41C73v79Ev,
  (VTBL_ENTRY)&_ZN5S41C73v80Ev,
  (VTBL_ENTRY)&_ZN5S41C73v81Ev,
  (VTBL_ENTRY)&_ZN5S41C73v82Ev,
  (VTBL_ENTRY)&_ZN5S41C73v83Ev,
  (VTBL_ENTRY)&_ZN5S41C73v84Ev,
  (VTBL_ENTRY)&_ZN5S41C73v85Ev,
  (VTBL_ENTRY)&_ZN5S41C73v86Ev,
  (VTBL_ENTRY)&_ZN5S41C73v87Ev,
  (VTBL_ENTRY)&_ZN5S41C73v88Ev,
  (VTBL_ENTRY)&_ZN5S41C73v89Ev,
  (VTBL_ENTRY)&_ZN5S41C73v90Ev,
  (VTBL_ENTRY)&_ZN5S41C73v91Ev,
  (VTBL_ENTRY)&_ZN5S41C73v92Ev,
  (VTBL_ENTRY)&_ZN5S41C73v93Ev,
  (VTBL_ENTRY)&_ZN5S41C73v94Ev,
  (VTBL_ENTRY)&_ZN5S41C73v95Ev,
  (VTBL_ENTRY)&_ZN5S41C73v96Ev,
  (VTBL_ENTRY)&_ZN5S41C73v97Ev,
  (VTBL_ENTRY)&_ZN5S41C73v98Ev,
  (VTBL_ENTRY)&_ZN5S41C73v99Ev,
  (VTBL_ENTRY)&_ZN5S41C74v100Ev,
  (VTBL_ENTRY)&_ZN5S41C74v101Ev,
  (VTBL_ENTRY)&_ZN5S41C74v102Ev,
  (VTBL_ENTRY)&_ZN5S41C74v103Ev,
  (VTBL_ENTRY)&_ZN5S41C74v104Ev,
  (VTBL_ENTRY)&_ZN5S41C74v105Ev,
  (VTBL_ENTRY)&_ZN5S41C74v106Ev,
  (VTBL_ENTRY)&_ZN5S41C74v107Ev,
  (VTBL_ENTRY)&_ZN5S41C74v108Ev,
  (VTBL_ENTRY)&_ZN5S41C74v109Ev,
  (VTBL_ENTRY)&_ZN5S41C74v110Ev,
  (VTBL_ENTRY)&_ZN5S41C74v111Ev,
  (VTBL_ENTRY)&_ZN5S41C54v112Ev,
  (VTBL_ENTRY)&_ZN5S41C54v113Ev,
  (VTBL_ENTRY)&_ZN5S41C54v114Ev,
  (VTBL_ENTRY)&_ZN5S41C54v115Ev,
  (VTBL_ENTRY)&_ZN5S41C54v116Ev,
  (VTBL_ENTRY)&_ZN5S41C54v117Ev,
  (VTBL_ENTRY)&_ZN5S41C54v118Ev,
  (VTBL_ENTRY)&_ZN5S41C54v119Ev,
  (VTBL_ENTRY)&_ZN5S41C54v120Ev,
  (VTBL_ENTRY)&_ZN5S41C54v121Ev,
  (VTBL_ENTRY)&_ZN5S41C54v122Ev,
  (VTBL_ENTRY)&_ZN5S41C54v123Ev,
  (VTBL_ENTRY)&_ZN5S41C54v124Ev,
  (VTBL_ENTRY)&_ZN5S41C54v125Ev,
  (VTBL_ENTRY)&_ZN5S41C54v126Ev,
  (VTBL_ENTRY)&_ZN5S41C54v127Ev,
  (VTBL_ENTRY)&_ZN5S41C54v128Ev,
  (VTBL_ENTRY)&_ZN5S41C54v129Ev,
  (VTBL_ENTRY)&_ZN5S41C54v130Ev,
  (VTBL_ENTRY)&_ZN5S41C54v131Ev,
  (VTBL_ENTRY)&_ZN5S41C54v132Ev,
  (VTBL_ENTRY)&_ZN5S41C54v133Ev,
  (VTBL_ENTRY)&_ZN5S41C54v134Ev,
  (VTBL_ENTRY)&_ZN5S41C54v135Ev,
  (VTBL_ENTRY)&_ZN5S41C54v136Ev,
  (VTBL_ENTRY)&_ZN5S41C54v137Ev,
};
extern VTBL_ENTRY _ZTI5S41C5[];
extern  VTBL_ENTRY _ZTV5S41C5[];
Class_Descriptor cd_S41C5 = {  "S41C5", // class name
  bases_S41C5, 3,
  &(vtc_S41C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S41C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S41C5),137, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S41C4  : S41C5 {
  virtual void  v138(); // _ZN5S41C44v138Ev
  virtual void  v139(); // _ZN5S41C44v139Ev
  virtual void  v140(); // _ZN5S41C44v140Ev
  virtual void  v141(); // _ZN5S41C44v141Ev
  virtual void  v142(); // _ZN5S41C44v142Ev
  virtual void  v143(); // _ZN5S41C44v143Ev
  virtual void  v144(); // _ZN5S41C44v144Ev
  virtual void  v145(); // _ZN5S41C44v145Ev
  virtual void  v146(); // _ZN5S41C44v146Ev
  virtual void  v147(); // _ZN5S41C44v147Ev
  virtual void  v148(); // _ZN5S41C44v148Ev
  virtual void  v149(); // _ZN5S41C44v149Ev
  virtual void  v150(); // _ZN5S41C44v150Ev
  virtual void  v151(); // _ZN5S41C44v151Ev
  virtual void  v152(); // _ZN5S41C44v152Ev
  virtual void  v153(); // _ZN5S41C44v153Ev
  virtual void  v154(); // _ZN5S41C44v154Ev
  virtual void  v155(); // _ZN5S41C44v155Ev
  ~S41C4(); // tgen
  S41C4(); // tgen
};
//SIG(-1 S41C4) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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 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 v149 v150 v151} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S41C4 ::v138(){vfunc_called(this, "_ZN5S41C44v138Ev");}
void  S41C4 ::v139(){vfunc_called(this, "_ZN5S41C44v139Ev");}
void  S41C4 ::v140(){vfunc_called(this, "_ZN5S41C44v140Ev");}
void  S41C4 ::v141(){vfunc_called(this, "_ZN5S41C44v141Ev");}
void  S41C4 ::v142(){vfunc_called(this, "_ZN5S41C44v142Ev");}
void  S41C4 ::v143(){vfunc_called(this, "_ZN5S41C44v143Ev");}
void  S41C4 ::v144(){vfunc_called(this, "_ZN5S41C44v144Ev");}
void  S41C4 ::v145(){vfunc_called(this, "_ZN5S41C44v145Ev");}
void  S41C4 ::v146(){vfunc_called(this, "_ZN5S41C44v146Ev");}
void  S41C4 ::v147(){vfunc_called(this, "_ZN5S41C44v147Ev");}
void  S41C4 ::v148(){vfunc_called(this, "_ZN5S41C44v148Ev");}
void  S41C4 ::v149(){vfunc_called(this, "_ZN5S41C44v149Ev");}
void  S41C4 ::v150(){vfunc_called(this, "_ZN5S41C44v150Ev");}
void  S41C4 ::v151(){vfunc_called(this, "_ZN5S41C44v151Ev");}
void  S41C4 ::v152(){vfunc_called(this, "_ZN5S41C44v152Ev");}
void  S41C4 ::v153(){vfunc_called(this, "_ZN5S41C44v153Ev");}
void  S41C4 ::v154(){vfunc_called(this, "_ZN5S41C44v154Ev");}
void  S41C4 ::v155(){vfunc_called(this, "_ZN5S41C44v155Ev");}
S41C4 ::~S41C4(){ note_dtor("S41C4", this);} // tgen
S41C4 ::S41C4(){ note_ctor("S41C4", this);} // tgen

static void Test_S41C4()
{
  extern Class_Descriptor cd_S41C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S41C4, buf);
    S41C4 *dp, &lv = *(dp=new (buf) S41C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S41C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S41C4)");
    check_base_class_offset(lv, (S1C11_nt*)(S41C7*)(S41C6*)(S41C5*), 0, "S41C4");
    check_base_class_offset(lv, (S41C7*)(S41C6*)(S41C5*), 0, "S41C4");
    check_base_class_offset(lv, (S41C6*)(S41C5*), 0, "S41C4");
    check_base_class_offset(lv, (S41C5*), 0, "S41C4");
    test_class_info(&lv, &cd_S41C4);
    dp->~S41C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS41C4(Test_S41C4, "S41C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S41C4C1Ev();
extern void _ZN5S41C4D1Ev();
Name_Map name_map_S41C4[] = {
  NSPAIR(_ZN5S41C4C1Ev),
  NSPAIR(_ZN5S41C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S41C7;
extern VTBL_ENTRY _ZTI5S41C7[];
extern  VTBL_ENTRY _ZTV5S41C7[];
extern Class_Descriptor cd_S41C6;
extern VTBL_ENTRY _ZTI5S41C6[];
extern  VTBL_ENTRY _ZTV5S41C6[];
extern Class_Descriptor cd_S41C5;
extern VTBL_ENTRY _ZTI5S41C5[];
extern  VTBL_ENTRY _ZTV5S41C5[];
static Base_Class bases_S41C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S41C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S41C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S41C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S41C4[];
extern void _ZN5S41C4D1Ev();
extern void _ZN5S41C4D0Ev();
extern void _ZN5S41C72v5Ev();
extern void _ZN5S41C72v6Ev();
extern void _ZN5S41C72v7Ev();
extern void _ZN5S41C72v8Ev();
extern void _ZN5S41C72v9Ev();
extern void _ZN5S41C73v10Ev();
extern void _ZN5S41C73v11Ev();
extern void _ZN5S41C73v12Ev();
extern void _ZN5S41C73v13Ev();
extern void _ZN5S41C73v14Ev();
extern void _ZN5S41C73v15Ev();
extern void _ZN5S41C73v16Ev();
extern void _ZN5S41C73v17Ev();
extern void _ZN5S41C73v18Ev();
extern void _ZN5S41C73v19Ev();
extern void _ZN5S41C73v20Ev();
extern void _ZN5S41C73v21Ev();
extern void _ZN5S41C73v22Ev();
extern void _ZN5S41C73v23Ev();
extern void _ZN5S41C73v24Ev();
extern void _ZN5S41C73v25Ev();
extern void _ZN5S41C73v26Ev();
extern void _ZN5S41C73v27Ev();
extern void _ZN5S41C73v28Ev();
extern void _ZN5S41C73v29Ev();
extern void _ZN5S41C73v30Ev();
extern void _ZN5S41C73v31Ev();
extern void _ZN5S41C73v32Ev();
extern void _ZN5S41C73v33Ev();
extern void _ZN5S41C73v34Ev();
extern void _ZN5S41C73v35Ev();
extern void _ZN5S41C73v36Ev();
extern void _ZN5S41C73v37Ev();
extern void _ZN5S41C73v38Ev();
extern void _ZN5S41C73v39Ev();
extern void _ZN5S41C73v40Ev();
extern void _ZN5S41C73v41Ev();
extern void _ZN5S41C73v42Ev();
extern void _ZN5S41C73v43Ev();
extern void _ZN5S41C73v44Ev();
extern void _ZN5S41C73v45Ev();
extern void _ZN5S41C73v46Ev();
extern void _ZN5S41C73v47Ev();
extern void _ZN5S41C73v48Ev();
extern void _ZN5S41C73v49Ev();
extern void _ZN5S41C73v50Ev();
extern void _ZN5S41C73v51Ev();
extern void _ZN5S41C73v52Ev();
extern void _ZN5S41C73v53Ev();
extern void _ZN5S41C73v54Ev();
extern void _ZN5S41C73v55Ev();
extern void _ZN5S41C73v56Ev();
extern void _ZN5S41C73v57Ev();
extern void _ZN5S41C73v58Ev();
extern void _ZN5S41C73v59Ev();
extern void _ZN5S41C73v60Ev();
extern void _ZN5S41C73v61Ev();
extern void _ZN5S41C73v62Ev();
extern void _ZN5S41C73v63Ev();
extern void _ZN5S41C73v64Ev();
extern void _ZN5S41C73v65Ev();
extern void _ZN5S41C73v66Ev();
extern void _ZN5S41C73v67Ev();
extern void _ZN5S41C73v68Ev();
extern void _ZN5S41C73v69Ev();
extern void _ZN5S41C73v70Ev();
extern void _ZN5S41C73v71Ev();
extern void _ZN5S41C73v72Ev();
extern void _ZN5S41C73v73Ev();
extern void _ZN5S41C73v74Ev();
extern void _ZN5S41C73v75Ev();
extern void _ZN5S41C73v76Ev();
extern void _ZN5S41C73v77Ev();
extern void _ZN5S41C73v78Ev();
extern void _ZN5S41C73v79Ev();
extern void _ZN5S41C73v80Ev();
extern void _ZN5S41C73v81Ev();
extern void _ZN5S41C73v82Ev();
extern void _ZN5S41C73v83Ev();
extern void _ZN5S41C73v84Ev();
extern void _ZN5S41C73v85Ev();
extern void _ZN5S41C73v86Ev();
extern void _ZN5S41C73v87Ev();
extern void _ZN5S41C73v88Ev();
extern void _ZN5S41C73v89Ev();
extern void _ZN5S41C73v90Ev();
extern void _ZN5S41C73v91Ev();
extern void _ZN5S41C73v92Ev();
extern void _ZN5S41C73v93Ev();
extern void _ZN5S41C73v94Ev();
extern void _ZN5S41C73v95Ev();
extern void _ZN5S41C73v96Ev();
extern void _ZN5S41C73v97Ev();
extern void _ZN5S41C73v98Ev();
extern void _ZN5S41C73v99Ev();
extern void _ZN5S41C74v100Ev();
extern void _ZN5S41C74v101Ev();
extern void _ZN5S41C74v102Ev();
extern void _ZN5S41C74v103Ev();
extern void _ZN5S41C74v104Ev();
extern void _ZN5S41C74v105Ev();
extern void _ZN5S41C74v106Ev();
extern void _ZN5S41C74v107Ev();
extern void _ZN5S41C74v108Ev();
extern void _ZN5S41C74v109Ev();
extern void _ZN5S41C74v110Ev();
extern void _ZN5S41C74v111Ev();
extern void _ZN5S41C54v112Ev();
extern void _ZN5S41C54v113Ev();
extern void _ZN5S41C54v114Ev();
extern void _ZN5S41C54v115Ev();
extern void _ZN5S41C54v116Ev();
extern void _ZN5S41C54v117Ev();
extern void _ZN5S41C54v118Ev();
extern void _ZN5S41C54v119Ev();
extern void _ZN5S41C54v120Ev();
extern void _ZN5S41C54v121Ev();
extern void _ZN5S41C54v122Ev();
extern void _ZN5S41C54v123Ev();
extern void _ZN5S41C54v124Ev();
extern void _ZN5S41C54v125Ev();
extern void _ZN5S41C54v126Ev();
extern void _ZN5S41C54v127Ev();
extern void _ZN5S41C54v128Ev();
extern void _ZN5S41C54v129Ev();
extern void _ZN5S41C54v130Ev();
extern void _ZN5S41C54v131Ev();
extern void _ZN5S41C54v132Ev();
extern void _ZN5S41C54v133Ev();
extern void _ZN5S41C54v134Ev();
extern void _ZN5S41C54v135Ev();
extern void _ZN5S41C54v136Ev();
extern void _ZN5S41C54v137Ev();
extern void _ZN5S41C44v138Ev();
extern void _ZN5S41C44v139Ev();
extern void _ZN5S41C44v140Ev();
extern void _ZN5S41C44v141Ev();
extern void _ZN5S41C44v142Ev();
extern void _ZN5S41C44v143Ev();
extern void _ZN5S41C44v144Ev();
extern void _ZN5S41C44v145Ev();
extern void _ZN5S41C44v146Ev();
extern void _ZN5S41C44v147Ev();
extern void _ZN5S41C44v148Ev();
extern void _ZN5S41C44v149Ev();
extern void _ZN5S41C44v150Ev();
extern void _ZN5S41C44v151Ev();
extern void _ZN5S41C44v152Ev();
extern void _ZN5S41C44v153Ev();
extern void _ZN5S41C44v154Ev();
extern void _ZN5S41C44v155Ev();
static  VTBL_ENTRY vtc_S41C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S41C4[0]),
  (VTBL_ENTRY)&_ZN5S41C4D1Ev,
  (VTBL_ENTRY)&_ZN5S41C4D0Ev,
  (VTBL_ENTRY)&_ZN5S41C72v5Ev,
  (VTBL_ENTRY)&_ZN5S41C72v6Ev,
  (VTBL_ENTRY)&_ZN5S41C72v7Ev,
  (VTBL_ENTRY)&_ZN5S41C72v8Ev,
  (VTBL_ENTRY)&_ZN5S41C72v9Ev,
  (VTBL_ENTRY)&_ZN5S41C73v10Ev,
  (VTBL_ENTRY)&_ZN5S41C73v11Ev,
  (VTBL_ENTRY)&_ZN5S41C73v12Ev,
  (VTBL_ENTRY)&_ZN5S41C73v13Ev,
  (VTBL_ENTRY)&_ZN5S41C73v14Ev,
  (VTBL_ENTRY)&_ZN5S41C73v15Ev,
  (VTBL_ENTRY)&_ZN5S41C73v16Ev,
  (VTBL_ENTRY)&_ZN5S41C73v17Ev,
  (VTBL_ENTRY)&_ZN5S41C73v18Ev,
  (VTBL_ENTRY)&_ZN5S41C73v19Ev,
  (VTBL_ENTRY)&_ZN5S41C73v20Ev,
  (VTBL_ENTRY)&_ZN5S41C73v21Ev,
  (VTBL_ENTRY)&_ZN5S41C73v22Ev,
  (VTBL_ENTRY)&_ZN5S41C73v23Ev,
  (VTBL_ENTRY)&_ZN5S41C73v24Ev,
  (VTBL_ENTRY)&_ZN5S41C73v25Ev,
  (VTBL_ENTRY)&_ZN5S41C73v26Ev,
  (VTBL_ENTRY)&_ZN5S41C73v27Ev,
  (VTBL_ENTRY)&_ZN5S41C73v28Ev,
  (VTBL_ENTRY)&_ZN5S41C73v29Ev,
  (VTBL_ENTRY)&_ZN5S41C73v30Ev,
  (VTBL_ENTRY)&_ZN5S41C73v31Ev,
  (VTBL_ENTRY)&_ZN5S41C73v32Ev,
  (VTBL_ENTRY)&_ZN5S41C73v33Ev,
  (VTBL_ENTRY)&_ZN5S41C73v34Ev,
  (VTBL_ENTRY)&_ZN5S41C73v35Ev,
  (VTBL_ENTRY)&_ZN5S41C73v36Ev,
  (VTBL_ENTRY)&_ZN5S41C73v37Ev,
  (VTBL_ENTRY)&_ZN5S41C73v38Ev,
  (VTBL_ENTRY)&_ZN5S41C73v39Ev,
  (VTBL_ENTRY)&_ZN5S41C73v40Ev,
  (VTBL_ENTRY)&_ZN5S41C73v41Ev,
  (VTBL_ENTRY)&_ZN5S41C73v42Ev,
  (VTBL_ENTRY)&_ZN5S41C73v43Ev,
  (VTBL_ENTRY)&_ZN5S41C73v44Ev,
  (VTBL_ENTRY)&_ZN5S41C73v45Ev,
  (VTBL_ENTRY)&_ZN5S41C73v46Ev,
  (VTBL_ENTRY)&_ZN5S41C73v47Ev,
  (VTBL_ENTRY)&_ZN5S41C73v48Ev,
  (VTBL_ENTRY)&_ZN5S41C73v49Ev,
  (VTBL_ENTRY)&_ZN5S41C73v50Ev,
  (VTBL_ENTRY)&_ZN5S41C73v51Ev,
  (VTBL_ENTRY)&_ZN5S41C73v52Ev,
  (VTBL_ENTRY)&_ZN5S41C73v53Ev,
  (VTBL_ENTRY)&_ZN5S41C73v54Ev,
  (VTBL_ENTRY)&_ZN5S41C73v55Ev,
  (VTBL_ENTRY)&_ZN5S41C73v56Ev,
  (VTBL_ENTRY)&_ZN5S41C73v57Ev,
  (VTBL_ENTRY)&_ZN5S41C73v58Ev,
  (VTBL_ENTRY)&_ZN5S41C73v59Ev,
  (VTBL_ENTRY)&_ZN5S41C73v60Ev,
  (VTBL_ENTRY)&_ZN5S41C73v61Ev,
  (VTBL_ENTRY)&_ZN5S41C73v62Ev,
  (VTBL_ENTRY)&_ZN5S41C73v63Ev,
  (VTBL_ENTRY)&_ZN5S41C73v64Ev,
  (VTBL_ENTRY)&_ZN5S41C73v65Ev,
  (VTBL_ENTRY)&_ZN5S41C73v66Ev,
  (VTBL_ENTRY)&_ZN5S41C73v67Ev,
  (VTBL_ENTRY)&_ZN5S41C73v68Ev,
  (VTBL_ENTRY)&_ZN5S41C73v69Ev,
  (VTBL_ENTRY)&_ZN5S41C73v70Ev,
  (VTBL_ENTRY)&_ZN5S41C73v71Ev,
  (VTBL_ENTRY)&_ZN5S41C73v72Ev,
  (VTBL_ENTRY)&_ZN5S41C73v73Ev,
  (VTBL_ENTRY)&_ZN5S41C73v74Ev,
  (VTBL_ENTRY)&_ZN5S41C73v75Ev,
  (VTBL_ENTRY)&_ZN5S41C73v76Ev,
  (VTBL_ENTRY)&_ZN5S41C73v77Ev,
  (VTBL_ENTRY)&_ZN5S41C73v78Ev,
  (VTBL_ENTRY)&_ZN5S41C73v79Ev,
  (VTBL_ENTRY)&_ZN5S41C73v80Ev,
  (VTBL_ENTRY)&_ZN5S41C73v81Ev,
  (VTBL_ENTRY)&_ZN5S41C73v82Ev,
  (VTBL_ENTRY)&_ZN5S41C73v83Ev,
  (VTBL_ENTRY)&_ZN5S41C73v84Ev,
  (VTBL_ENTRY)&_ZN5S41C73v85Ev,
  (VTBL_ENTRY)&_ZN5S41C73v86Ev,
  (VTBL_ENTRY)&_ZN5S41C73v87Ev,
  (VTBL_ENTRY)&_ZN5S41C73v88Ev,
  (VTBL_ENTRY)&_ZN5S41C73v89Ev,
  (VTBL_ENTRY)&_ZN5S41C73v90Ev,
  (VTBL_ENTRY)&_ZN5S41C73v91Ev,
  (VTBL_ENTRY)&_ZN5S41C73v92Ev,
  (VTBL_ENTRY)&_ZN5S41C73v93Ev,
  (VTBL_ENTRY)&_ZN5S41C73v94Ev,
  (VTBL_ENTRY)&_ZN5S41C73v95Ev,
  (VTBL_ENTRY)&_ZN5S41C73v96Ev,
  (VTBL_ENTRY)&_ZN5S41C73v97Ev,
  (VTBL_ENTRY)&_ZN5S41C73v98Ev,
  (VTBL_ENTRY)&_ZN5S41C73v99Ev,
  (VTBL_ENTRY)&_ZN5S41C74v100Ev,
  (VTBL_ENTRY)&_ZN5S41C74v101Ev,
  (VTBL_ENTRY)&_ZN5S41C74v102Ev,
  (VTBL_ENTRY)&_ZN5S41C74v103Ev,
  (VTBL_ENTRY)&_ZN5S41C74v104Ev,
  (VTBL_ENTRY)&_ZN5S41C74v105Ev,
  (VTBL_ENTRY)&_ZN5S41C74v106Ev,
  (VTBL_ENTRY)&_ZN5S41C74v107Ev,
  (VTBL_ENTRY)&_ZN5S41C74v108Ev,
  (VTBL_ENTRY)&_ZN5S41C74v109Ev,
  (VTBL_ENTRY)&_ZN5S41C74v110Ev,
  (VTBL_ENTRY)&_ZN5S41C74v111Ev,
  (VTBL_ENTRY)&_ZN5S41C54v112Ev,
  (VTBL_ENTRY)&_ZN5S41C54v113Ev,
  (VTBL_ENTRY)&_ZN5S41C54v114Ev,
  (VTBL_ENTRY)&_ZN5S41C54v115Ev,
  (VTBL_ENTRY)&_ZN5S41C54v116Ev,
  (VTBL_ENTRY)&_ZN5S41C54v117Ev,
  (VTBL_ENTRY)&_ZN5S41C54v118Ev,
  (VTBL_ENTRY)&_ZN5S41C54v119Ev,
  (VTBL_ENTRY)&_ZN5S41C54v120Ev,
  (VTBL_ENTRY)&_ZN5S41C54v121Ev,
  (VTBL_ENTRY)&_ZN5S41C54v122Ev,
  (VTBL_ENTRY)&_ZN5S41C54v123Ev,
  (VTBL_ENTRY)&_ZN5S41C54v124Ev,
  (VTBL_ENTRY)&_ZN5S41C54v125Ev,
  (VTBL_ENTRY)&_ZN5S41C54v126Ev,
  (VTBL_ENTRY)&_ZN5S41C54v127Ev,
  (VTBL_ENTRY)&_ZN5S41C54v128Ev,
  (VTBL_ENTRY)&_ZN5S41C54v129Ev,
  (VTBL_ENTRY)&_ZN5S41C54v130Ev,
  (VTBL_ENTRY)&_ZN5S41C54v131Ev,
  (VTBL_ENTRY)&_ZN5S41C54v132Ev,
  (VTBL_ENTRY)&_ZN5S41C54v133Ev,
  (VTBL_ENTRY)&_ZN5S41C54v134Ev,
  (VTBL_ENTRY)&_ZN5S41C54v135Ev,
  (VTBL_ENTRY)&_ZN5S41C54v136Ev,
  (VTBL_ENTRY)&_ZN5S41C54v137Ev,
  (VTBL_ENTRY)&_ZN5S41C44v138Ev,
  (VTBL_ENTRY)&_ZN5S41C44v139Ev,
  (VTBL_ENTRY)&_ZN5S41C44v140Ev,
  (VTBL_ENTRY)&_ZN5S41C44v141Ev,
  (VTBL_ENTRY)&_ZN5S41C44v142Ev,
  (VTBL_ENTRY)&_ZN5S41C44v143Ev,
  (VTBL_ENTRY)&_ZN5S41C44v144Ev,
  (VTBL_ENTRY)&_ZN5S41C44v145Ev,
  (VTBL_ENTRY)&_ZN5S41C44v146Ev,
  (VTBL_ENTRY)&_ZN5S41C44v147Ev,
  (VTBL_ENTRY)&_ZN5S41C44v148Ev,
  (VTBL_ENTRY)&_ZN5S41C44v149Ev,
  (VTBL_ENTRY)&_ZN5S41C44v150Ev,
  (VTBL_ENTRY)&_ZN5S41C44v151Ev,
  (VTBL_ENTRY)&_ZN5S41C44v152Ev,
  (VTBL_ENTRY)&_ZN5S41C44v153Ev,
  (VTBL_ENTRY)&_ZN5S41C44v154Ev,
  (VTBL_ENTRY)&_ZN5S41C44v155Ev,
};
extern VTBL_ENTRY _ZTI5S41C4[];
extern  VTBL_ENTRY _ZTV5S41C4[];
Class_Descriptor cd_S41C4 = {  "S41C4", // class name
  bases_S41C4, 4,
  &(vtc_S41C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S41C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S41C4),155, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S41C3  : S41C4 {
  virtual void  v156(); // _ZN5S41C34v156Ev
  virtual void  v157(); // _ZN5S41C34v157Ev
  virtual void  v158(); // _ZN5S41C34v158Ev
  virtual void  v159(); // _ZN5S41C34v159Ev
  virtual void  v160(); // _ZN5S41C34v160Ev
  virtual void  v161(); // _ZN5S41C34v161Ev
  virtual void  v162(); // _ZN5S41C34v162Ev
  virtual void  v163(); // _ZN5S41C34v163Ev
  virtual void  v164(); // _ZN5S41C34v164Ev
  virtual void  v165(); // _ZN5S41C34v165Ev
  virtual void  v166(); // _ZN5S41C34v166Ev
  virtual void  v167(); // _ZN5S41C34v167Ev
  virtual void  v168(); // _ZN5S41C34v168Ev
  virtual void  v169(); // _ZN5S41C34v169Ev
  virtual void  v170(); // _ZN5S41C34v170Ev
  virtual void  v171(); // _ZN5S41C34v171Ev
  virtual void  v172(); // _ZN5S41C34v172Ev
  virtual void  v173(); // _ZN5S41C34v173Ev
  virtual void  v174(); // _ZN5S41C34v174Ev
  virtual void  v175(); // _ZN5S41C34v175Ev
  virtual void  v176(); // _ZN5S41C34v176Ev
  virtual void  v177(); // _ZN5S41C34v177Ev
  virtual void  v178(); // _ZN5S41C34v178Ev
  virtual void  v179(); // _ZN5S41C34v179Ev
  virtual void  v180(); // _ZN5S41C34v180Ev
  virtual void  v181(); // _ZN5S41C34v181Ev
  ~S41C3(); // tgen
  S41C3(); // tgen
};
//SIG(-1 S41C3) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m Fp Fi} 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 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 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} 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}


void  S41C3 ::v156(){vfunc_called(this, "_ZN5S41C34v156Ev");}
void  S41C3 ::v157(){vfunc_called(this, "_ZN5S41C34v157Ev");}
void  S41C3 ::v158(){vfunc_called(this, "_ZN5S41C34v158Ev");}
void  S41C3 ::v159(){vfunc_called(this, "_ZN5S41C34v159Ev");}
void  S41C3 ::v160(){vfunc_called(this, "_ZN5S41C34v160Ev");}
void  S41C3 ::v161(){vfunc_called(this, "_ZN5S41C34v161Ev");}
void  S41C3 ::v162(){vfunc_called(this, "_ZN5S41C34v162Ev");}
void  S41C3 ::v163(){vfunc_called(this, "_ZN5S41C34v163Ev");}
void  S41C3 ::v164(){vfunc_called(this, "_ZN5S41C34v164Ev");}
void  S41C3 ::v165(){vfunc_called(this, "_ZN5S41C34v165Ev");}
void  S41C3 ::v166(){vfunc_called(this, "_ZN5S41C34v166Ev");}
void  S41C3 ::v167(){vfunc_called(this, "_ZN5S41C34v167Ev");}
void  S41C3 ::v168(){vfunc_called(this, "_ZN5S41C34v168Ev");}
void  S41C3 ::v169(){vfunc_called(this, "_ZN5S41C34v169Ev");}
void  S41C3 ::v170(){vfunc_called(this, "_ZN5S41C34v170Ev");}
void  S41C3 ::v171(){vfunc_called(this, "_ZN5S41C34v171Ev");}
void  S41C3 ::v172(){vfunc_called(this, "_ZN5S41C34v172Ev");}
void  S41C3 ::v173(){vfunc_called(this, "_ZN5S41C34v173Ev");}
void  S41C3 ::v174(){vfunc_called(this, "_ZN5S41C34v174Ev");}
void  S41C3 ::v175(){vfunc_called(this, "_ZN5S41C34v175Ev");}
void  S41C3 ::v176(){vfunc_called(this, "_ZN5S41C34v176Ev");}
void  S41C3 ::v177(){vfunc_called(this, "_ZN5S41C34v177Ev");}
void  S41C3 ::v178(){vfunc_called(this, "_ZN5S41C34v178Ev");}
void  S41C3 ::v179(){vfunc_called(this, "_ZN5S41C34v179Ev");}
void  S41C3 ::v180(){vfunc_called(this, "_ZN5S41C34v180Ev");}
void  S41C3 ::v181(){vfunc_called(this, "_ZN5S41C34v181Ev");}
S41C3 ::~S41C3(){ note_dtor("S41C3", this);} // tgen
S41C3 ::S41C3(){ note_ctor("S41C3", this);} // tgen

static void Test_S41C3()
{
  extern Class_Descriptor cd_S41C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S41C3, buf);
    S41C3 *dp, &lv = *(dp=new (buf) S41C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S41C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S41C3)");
    check_base_class_offset(lv, (S1C11_nt*)(S41C7*)(S41C6*)(S41C5*)(S41C4*), 0, "S41C3");
    check_base_class_offset(lv, (S41C7*)(S41C6*)(S41C5*)(S41C4*), 0, "S41C3");
    check_base_class_offset(lv, (S41C6*)(S41C5*)(S41C4*), 0, "S41C3");
    check_base_class_offset(lv, (S41C5*)(S41C4*), 0, "S41C3");
    check_base_class_offset(lv, (S41C4*), 0, "S41C3");
    test_class_info(&lv, &cd_S41C3);
    dp->~S41C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS41C3(Test_S41C3, "S41C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S41C3C1Ev();
extern void _ZN5S41C3D1Ev();
Name_Map name_map_S41C3[] = {
  NSPAIR(_ZN5S41C3C1Ev),
  NSPAIR(_ZN5S41C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S41C7;
extern VTBL_ENTRY _ZTI5S41C7[];
extern  VTBL_ENTRY _ZTV5S41C7[];
extern Class_Descriptor cd_S41C6;
extern VTBL_ENTRY _ZTI5S41C6[];
extern  VTBL_ENTRY _ZTV5S41C6[];
extern Class_Descriptor cd_S41C5;
extern VTBL_ENTRY _ZTI5S41C5[];
extern  VTBL_ENTRY _ZTV5S41C5[];
extern Class_Descriptor cd_S41C4;
extern VTBL_ENTRY _ZTI5S41C4[];
extern  VTBL_ENTRY _ZTV5S41C4[];
static Base_Class bases_S41C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S41C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S41C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S41C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S41C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S41C3[];
extern void _ZN5S41C3D1Ev();
extern void _ZN5S41C3D0Ev();
extern void _ZN5S41C72v5Ev();
extern void _ZN5S41C72v6Ev();
extern void _ZN5S41C72v7Ev();
extern void _ZN5S41C72v8Ev();
extern void _ZN5S41C72v9Ev();
extern void _ZN5S41C73v10Ev();
extern void _ZN5S41C73v11Ev();
extern void _ZN5S41C73v12Ev();
extern void _ZN5S41C73v13Ev();
extern void _ZN5S41C73v14Ev();
extern void _ZN5S41C73v15Ev();
extern void _ZN5S41C73v16Ev();
extern void _ZN5S41C73v17Ev();
extern void _ZN5S41C73v18Ev();
extern void _ZN5S41C73v19Ev();
extern void _ZN5S41C73v20Ev();
extern void _ZN5S41C73v21Ev();
extern void _ZN5S41C73v22Ev();
extern void _ZN5S41C73v23Ev();
extern void _ZN5S41C73v24Ev();
extern void _ZN5S41C73v25Ev();
extern void _ZN5S41C73v26Ev();
extern void _ZN5S41C73v27Ev();
extern void _ZN5S41C73v28Ev();
extern void _ZN5S41C73v29Ev();
extern void _ZN5S41C73v30Ev();
extern void _ZN5S41C73v31Ev();
extern void _ZN5S41C73v32Ev();
extern void _ZN5S41C73v33Ev();
extern void _ZN5S41C73v34Ev();
extern void _ZN5S41C73v35Ev();
extern void _ZN5S41C73v36Ev();
extern void _ZN5S41C73v37Ev();
extern void _ZN5S41C73v38Ev();
extern void _ZN5S41C73v39Ev();
extern void _ZN5S41C73v40Ev();
extern void _ZN5S41C73v41Ev();
extern void _ZN5S41C73v42Ev();
extern void _ZN5S41C73v43Ev();
extern void _ZN5S41C73v44Ev();
extern void _ZN5S41C73v45Ev();
extern void _ZN5S41C73v46Ev();
extern void _ZN5S41C73v47Ev();
extern void _ZN5S41C73v48Ev();
extern void _ZN5S41C73v49Ev();
extern void _ZN5S41C73v50Ev();
extern void _ZN5S41C73v51Ev();
extern void _ZN5S41C73v52Ev();
extern void _ZN5S41C73v53Ev();
extern void _ZN5S41C73v54Ev();
extern void _ZN5S41C73v55Ev();
extern void _ZN5S41C73v56Ev();
extern void _ZN5S41C73v57Ev();
extern void _ZN5S41C73v58Ev();
extern void _ZN5S41C73v59Ev();
extern void _ZN5S41C73v60Ev();
extern void _ZN5S41C73v61Ev();
extern void _ZN5S41C73v62Ev();
extern void _ZN5S41C73v63Ev();
extern void _ZN5S41C73v64Ev();
extern void _ZN5S41C73v65Ev();
extern void _ZN5S41C73v66Ev();
extern void _ZN5S41C73v67Ev();
extern void _ZN5S41C73v68Ev();
extern void _ZN5S41C73v69Ev();
extern void _ZN5S41C73v70Ev();
extern void _ZN5S41C73v71Ev();
extern void _ZN5S41C73v72Ev();
extern void _ZN5S41C73v73Ev();
extern void _ZN5S41C73v74Ev();
extern void _ZN5S41C73v75Ev();
extern void _ZN5S41C73v76Ev();
extern void _ZN5S41C73v77Ev();
extern void _ZN5S41C73v78Ev();
extern void _ZN5S41C73v79Ev();
extern void _ZN5S41C73v80Ev();
extern void _ZN5S41C73v81Ev();
extern void _ZN5S41C73v82Ev();
extern void _ZN5S41C73v83Ev();
extern void _ZN5S41C73v84Ev();
extern void _ZN5S41C73v85Ev();
extern void _ZN5S41C73v86Ev();
extern void _ZN5S41C73v87Ev();
extern void _ZN5S41C73v88Ev();
extern void _ZN5S41C73v89Ev();
extern void _ZN5S41C73v90Ev();
extern void _ZN5S41C73v91Ev();
extern void _ZN5S41C73v92Ev();
extern void _ZN5S41C73v93Ev();
extern void _ZN5S41C73v94Ev();
extern void _ZN5S41C73v95Ev();
extern void _ZN5S41C73v96Ev();
extern void _ZN5S41C73v97Ev();
extern void _ZN5S41C73v98Ev();
extern void _ZN5S41C73v99Ev();
extern void _ZN5S41C74v100Ev();
extern void _ZN5S41C74v101Ev();
extern void _ZN5S41C74v102Ev();
extern void _ZN5S41C74v103Ev();
extern void _ZN5S41C74v104Ev();
extern void _ZN5S41C74v105Ev();
extern void _ZN5S41C74v106Ev();
extern void _ZN5S41C74v107Ev();
extern void _ZN5S41C74v108Ev();
extern void _ZN5S41C74v109Ev();
extern void _ZN5S41C74v110Ev();
extern void _ZN5S41C74v111Ev();
extern void _ZN5S41C54v112Ev();
extern void _ZN5S41C54v113Ev();
extern void _ZN5S41C54v114Ev();
extern void _ZN5S41C54v115Ev();
extern void _ZN5S41C54v116Ev();
extern void _ZN5S41C54v117Ev();
extern void _ZN5S41C54v118Ev();
extern void _ZN5S41C54v119Ev();
extern void _ZN5S41C54v120Ev();
extern void _ZN5S41C54v121Ev();
extern void _ZN5S41C54v122Ev();
extern void _ZN5S41C54v123Ev();
extern void _ZN5S41C54v124Ev();
extern void _ZN5S41C54v125Ev();
extern void _ZN5S41C54v126Ev();
extern void _ZN5S41C54v127Ev();
extern void _ZN5S41C54v128Ev();
extern void _ZN5S41C54v129Ev();
extern void _ZN5S41C54v130Ev();
extern void _ZN5S41C54v131Ev();
extern void _ZN5S41C54v132Ev();
extern void _ZN5S41C54v133Ev();
extern void _ZN5S41C54v134Ev();
extern void _ZN5S41C54v135Ev();
extern void _ZN5S41C54v136Ev();
extern void _ZN5S41C54v137Ev();
extern void _ZN5S41C44v138Ev();
extern void _ZN5S41C44v139Ev();
extern void _ZN5S41C44v140Ev();
extern void _ZN5S41C44v141Ev();
extern void _ZN5S41C44v142Ev();
extern void _ZN5S41C44v143Ev();
extern void _ZN5S41C44v144Ev();
extern void _ZN5S41C44v145Ev();
extern void _ZN5S41C44v146Ev();
extern void _ZN5S41C44v147Ev();
extern void _ZN5S41C44v148Ev();
extern void _ZN5S41C44v149Ev();
extern void _ZN5S41C44v150Ev();
extern void _ZN5S41C44v151Ev();
extern void _ZN5S41C44v152Ev();
extern void _ZN5S41C44v153Ev();
extern void _ZN5S41C44v154Ev();
extern void _ZN5S41C44v155Ev();
extern void _ZN5S41C34v156Ev();
extern void _ZN5S41C34v157Ev();
extern void _ZN5S41C34v158Ev();
extern void _ZN5S41C34v159Ev();
extern void _ZN5S41C34v160Ev();
extern void _ZN5S41C34v161Ev();
extern void _ZN5S41C34v162Ev();
extern void _ZN5S41C34v163Ev();
extern void _ZN5S41C34v164Ev();
extern void _ZN5S41C34v165Ev();
extern void _ZN5S41C34v166Ev();
extern void _ZN5S41C34v167Ev();
extern void _ZN5S41C34v168Ev();
extern void _ZN5S41C34v169Ev();
extern void _ZN5S41C34v170Ev();
extern void _ZN5S41C34v171Ev();
extern void _ZN5S41C34v172Ev();
extern void _ZN5S41C34v173Ev();
extern void _ZN5S41C34v174Ev();
extern void _ZN5S41C34v175Ev();
extern void _ZN5S41C34v176Ev();
extern void _ZN5S41C34v177Ev();
extern void _ZN5S41C34v178Ev();
extern void _ZN5S41C34v179Ev();
extern void _ZN5S41C34v180Ev();
extern void _ZN5S41C34v181Ev();
static  VTBL_ENTRY vtc_S41C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S41C3[0]),
  (VTBL_ENTRY)&_ZN5S41C3D1Ev,
  (VTBL_ENTRY)&_ZN5S41C3D0Ev,
  (VTBL_ENTRY)&_ZN5S41C72v5Ev,
  (VTBL_ENTRY)&_ZN5S41C72v6Ev,
  (VTBL_ENTRY)&_ZN5S41C72v7Ev,
  (VTBL_ENTRY)&_ZN5S41C72v8Ev,
  (VTBL_ENTRY)&_ZN5S41C72v9Ev,
  (VTBL_ENTRY)&_ZN5S41C73v10Ev,
  (VTBL_ENTRY)&_ZN5S41C73v11Ev,
  (VTBL_ENTRY)&_ZN5S41C73v12Ev,
  (VTBL_ENTRY)&_ZN5S41C73v13Ev,
  (VTBL_ENTRY)&_ZN5S41C73v14Ev,
  (VTBL_ENTRY)&_ZN5S41C73v15Ev,
  (VTBL_ENTRY)&_ZN5S41C73v16Ev,
  (VTBL_ENTRY)&_ZN5S41C73v17Ev,
  (VTBL_ENTRY)&_ZN5S41C73v18Ev,
  (VTBL_ENTRY)&_ZN5S41C73v19Ev,
  (VTBL_ENTRY)&_ZN5S41C73v20Ev,
  (VTBL_ENTRY)&_ZN5S41C73v21Ev,
  (VTBL_ENTRY)&_ZN5S41C73v22Ev,
  (VTBL_ENTRY)&_ZN5S41C73v23Ev,
  (VTBL_ENTRY)&_ZN5S41C73v24Ev,
  (VTBL_ENTRY)&_ZN5S41C73v25Ev,
  (VTBL_ENTRY)&_ZN5S41C73v26Ev,
  (VTBL_ENTRY)&_ZN5S41C73v27Ev,
  (VTBL_ENTRY)&_ZN5S41C73v28Ev,
  (VTBL_ENTRY)&_ZN5S41C73v29Ev,
  (VTBL_ENTRY)&_ZN5S41C73v30Ev,
  (VTBL_ENTRY)&_ZN5S41C73v31Ev,
  (VTBL_ENTRY)&_ZN5S41C73v32Ev,
  (VTBL_ENTRY)&_ZN5S41C73v33Ev,
  (VTBL_ENTRY)&_ZN5S41C73v34Ev,
  (VTBL_ENTRY)&_ZN5S41C73v35Ev,
  (VTBL_ENTRY)&_ZN5S41C73v36Ev,
  (VTBL_ENTRY)&_ZN5S41C73v37Ev,
  (VTBL_ENTRY)&_ZN5S41C73v38Ev,
  (VTBL_ENTRY)&_ZN5S41C73v39Ev,
  (VTBL_ENTRY)&_ZN5S41C73v40Ev,
  (VTBL_ENTRY)&_ZN5S41C73v41Ev,
  (VTBL_ENTRY)&_ZN5S41C73v42Ev,
  (VTBL_ENTRY)&_ZN5S41C73v43Ev,
  (VTBL_ENTRY)&_ZN5S41C73v44Ev,
  (VTBL_ENTRY)&_ZN5S41C73v45Ev,
  (VTBL_ENTRY)&_ZN5S41C73v46Ev,
  (VTBL_ENTRY)&_ZN5S41C73v47Ev,
  (VTBL_ENTRY)&_ZN5S41C73v48Ev,
  (VTBL_ENTRY)&_ZN5S41C73v49Ev,
  (VTBL_ENTRY)&_ZN5S41C73v50Ev,
  (VTBL_ENTRY)&_ZN5S41C73v51Ev,
  (VTBL_ENTRY)&_ZN5S41C73v52Ev,
  (VTBL_ENTRY)&_ZN5S41C73v53Ev,
  (VTBL_ENTRY)&_ZN5S41C73v54Ev,
  (VTBL_ENTRY)&_ZN5S41C73v55Ev,
  (VTBL_ENTRY)&_ZN5S41C73v56Ev,
  (VTBL_ENTRY)&_ZN5S41C73v57Ev,
  (VTBL_ENTRY)&_ZN5S41C73v58Ev,
  (VTBL_ENTRY)&_ZN5S41C73v59Ev,
  (VTBL_ENTRY)&_ZN5S41C73v60Ev,
  (VTBL_ENTRY)&_ZN5S41C73v61Ev,
  (VTBL_ENTRY)&_ZN5S41C73v62Ev,
  (VTBL_ENTRY)&_ZN5S41C73v63Ev,
  (VTBL_ENTRY)&_ZN5S41C73v64Ev,
  (VTBL_ENTRY)&_ZN5S41C73v65Ev,
  (VTBL_ENTRY)&_ZN5S41C73v66Ev,
  (VTBL_ENTRY)&_ZN5S41C73v67Ev,
  (VTBL_ENTRY)&_ZN5S41C73v68Ev,
  (VTBL_ENTRY)&_ZN5S41C73v69Ev,
  (VTBL_ENTRY)&_ZN5S41C73v70Ev,
  (VTBL_ENTRY)&_ZN5S41C73v71Ev,
  (VTBL_ENTRY)&_ZN5S41C73v72Ev,
  (VTBL_ENTRY)&_ZN5S41C73v73Ev,
  (VTBL_ENTRY)&_ZN5S41C73v74Ev,
  (VTBL_ENTRY)&_ZN5S41C73v75Ev,
  (VTBL_ENTRY)&_ZN5S41C73v76Ev,
  (VTBL_ENTRY)&_ZN5S41C73v77Ev,
  (VTBL_ENTRY)&_ZN5S41C73v78Ev,
  (VTBL_ENTRY)&_ZN5S41C73v79Ev,
  (VTBL_ENTRY)&_ZN5S41C73v80Ev,
  (VTBL_ENTRY)&_ZN5S41C73v81Ev,
  (VTBL_ENTRY)&_ZN5S41C73v82Ev,
  (VTBL_ENTRY)&_ZN5S41C73v83Ev,
  (VTBL_ENTRY)&_ZN5S41C73v84Ev,
  (VTBL_ENTRY)&_ZN5S41C73v85Ev,
  (VTBL_ENTRY)&_ZN5S41C73v86Ev,
  (VTBL_ENTRY)&_ZN5S41C73v87Ev,
  (VTBL_ENTRY)&_ZN5S41C73v88Ev,
  (VTBL_ENTRY)&_ZN5S41C73v89Ev,
  (VTBL_ENTRY)&_ZN5S41C73v90Ev,
  (VTBL_ENTRY)&_ZN5S41C73v91Ev,
  (VTBL_ENTRY)&_ZN5S41C73v92Ev,
  (VTBL_ENTRY)&_ZN5S41C73v93Ev,
  (VTBL_ENTRY)&_ZN5S41C73v94Ev,
  (VTBL_ENTRY)&_ZN5S41C73v95Ev,
  (VTBL_ENTRY)&_ZN5S41C73v96Ev,
  (VTBL_ENTRY)&_ZN5S41C73v97Ev,
  (VTBL_ENTRY)&_ZN5S41C73v98Ev,
  (VTBL_ENTRY)&_ZN5S41C73v99Ev,
  (VTBL_ENTRY)&_ZN5S41C74v100Ev,
  (VTBL_ENTRY)&_ZN5S41C74v101Ev,
  (VTBL_ENTRY)&_ZN5S41C74v102Ev,
  (VTBL_ENTRY)&_ZN5S41C74v103Ev,
  (VTBL_ENTRY)&_ZN5S41C74v104Ev,
  (VTBL_ENTRY)&_ZN5S41C74v105Ev,
  (VTBL_ENTRY)&_ZN5S41C74v106Ev,
  (VTBL_ENTRY)&_ZN5S41C74v107Ev,
  (VTBL_ENTRY)&_ZN5S41C74v108Ev,
  (VTBL_ENTRY)&_ZN5S41C74v109Ev,
  (VTBL_ENTRY)&_ZN5S41C74v110Ev,
  (VTBL_ENTRY)&_ZN5S41C74v111Ev,
  (VTBL_ENTRY)&_ZN5S41C54v112Ev,
  (VTBL_ENTRY)&_ZN5S41C54v113Ev,
  (VTBL_ENTRY)&_ZN5S41C54v114Ev,
  (VTBL_ENTRY)&_ZN5S41C54v115Ev,
  (VTBL_ENTRY)&_ZN5S41C54v116Ev,
  (VTBL_ENTRY)&_ZN5S41C54v117Ev,
  (VTBL_ENTRY)&_ZN5S41C54v118Ev,
  (VTBL_ENTRY)&_ZN5S41C54v119Ev,
  (VTBL_ENTRY)&_ZN5S41C54v120Ev,
  (VTBL_ENTRY)&_ZN5S41C54v121Ev,
  (VTBL_ENTRY)&_ZN5S41C54v122Ev,
  (VTBL_ENTRY)&_ZN5S41C54v123Ev,
  (VTBL_ENTRY)&_ZN5S41C54v124Ev,
  (VTBL_ENTRY)&_ZN5S41C54v125Ev,
  (VTBL_ENTRY)&_ZN5S41C54v126Ev,
  (VTBL_ENTRY)&_ZN5S41C54v127Ev,
  (VTBL_ENTRY)&_ZN5S41C54v128Ev,
  (VTBL_ENTRY)&_ZN5S41C54v129Ev,
  (VTBL_ENTRY)&_ZN5S41C54v130Ev,
  (VTBL_ENTRY)&_ZN5S41C54v131Ev,
  (VTBL_ENTRY)&_ZN5S41C54v132Ev,
  (VTBL_ENTRY)&_ZN5S41C54v133Ev,
  (VTBL_ENTRY)&_ZN5S41C54v134Ev,
  (VTBL_ENTRY)&_ZN5S41C54v135Ev,
  (VTBL_ENTRY)&_ZN5S41C54v136Ev,
  (VTBL_ENTRY)&_ZN5S41C54v137Ev,
  (VTBL_ENTRY)&_ZN5S41C44v138Ev,
  (VTBL_ENTRY)&_ZN5S41C44v139Ev,
  (VTBL_ENTRY)&_ZN5S41C44v140Ev,
  (VTBL_ENTRY)&_ZN5S41C44v141Ev,
  (VTBL_ENTRY)&_ZN5S41C44v142Ev,
  (VTBL_ENTRY)&_ZN5S41C44v143Ev,
  (VTBL_ENTRY)&_ZN5S41C44v144Ev,
  (VTBL_ENTRY)&_ZN5S41C44v145Ev,
  (VTBL_ENTRY)&_ZN5S41C44v146Ev,
  (VTBL_ENTRY)&_ZN5S41C44v147Ev,
  (VTBL_ENTRY)&_ZN5S41C44v148Ev,
  (VTBL_ENTRY)&_ZN5S41C44v149Ev,
  (VTBL_ENTRY)&_ZN5S41C44v150Ev,
  (VTBL_ENTRY)&_ZN5S41C44v151Ev,
  (VTBL_ENTRY)&_ZN5S41C44v152Ev,
  (VTBL_ENTRY)&_ZN5S41C44v153Ev,
  (VTBL_ENTRY)&_ZN5S41C44v154Ev,
  (VTBL_ENTRY)&_ZN5S41C44v155Ev,
  (VTBL_ENTRY)&_ZN5S41C34v156Ev,
  (VTBL_ENTRY)&_ZN5S41C34v157Ev,
  (VTBL_ENTRY)&_ZN5S41C34v158Ev,
  (VTBL_ENTRY)&_ZN5S41C34v159Ev,
  (VTBL_ENTRY)&_ZN5S41C34v160Ev,
  (VTBL_ENTRY)&_ZN5S41C34v161Ev,
  (VTBL_ENTRY)&_ZN5S41C34v162Ev,
  (VTBL_ENTRY)&_ZN5S41C34v163Ev,
  (VTBL_ENTRY)&_ZN5S41C34v164Ev,
  (VTBL_ENTRY)&_ZN5S41C34v165Ev,
  (VTBL_ENTRY)&_ZN5S41C34v166Ev,
  (VTBL_ENTRY)&_ZN5S41C34v167Ev,
  (VTBL_ENTRY)&_ZN5S41C34v168Ev,
  (VTBL_ENTRY)&_ZN5S41C34v169Ev,
  (VTBL_ENTRY)&_ZN5S41C34v170Ev,
  (VTBL_ENTRY)&_ZN5S41C34v171Ev,
  (VTBL_ENTRY)&_ZN5S41C34v172Ev,
  (VTBL_ENTRY)&_ZN5S41C34v173Ev,
  (VTBL_ENTRY)&_ZN5S41C34v174Ev,
  (VTBL_ENTRY)&_ZN5S41C34v175Ev,
  (VTBL_ENTRY)&_ZN5S41C34v176Ev,
  (VTBL_ENTRY)&_ZN5S41C34v177Ev,
  (VTBL_ENTRY)&_ZN5S41C34v178Ev,
  (VTBL_ENTRY)&_ZN5S41C34v179Ev,
  (VTBL_ENTRY)&_ZN5S41C34v180Ev,
  (VTBL_ENTRY)&_ZN5S41C34v181Ev,
};
extern VTBL_ENTRY _ZTI5S41C3[];
extern  VTBL_ENTRY _ZTV5S41C3[];
Class_Descriptor cd_S41C3 = {  "S41C3", // class name
  bases_S41C3, 5,
  &(vtc_S41C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S41C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S41C3),181, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S41C2  : S41C3 {
  ~S41C2(); // tgen
  S41C2(); // tgen
};
//SIG(-1 S41C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd m Fp Fi} 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 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 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}}


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

static void Test_S41C2()
{
  extern Class_Descriptor cd_S41C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S41C2, buf);
    S41C2 *dp, &lv = *(dp=new (buf) S41C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S41C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S41C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S41C7*)(S41C6*)(S41C5*)(S41C4*)(S41C3*), 0, "S41C2");
    check_base_class_offset(lv, (S41C7*)(S41C6*)(S41C5*)(S41C4*)(S41C3*), 0, "S41C2");
    check_base_class_offset(lv, (S41C6*)(S41C5*)(S41C4*)(S41C3*), 0, "S41C2");
    check_base_class_offset(lv, (S41C5*)(S41C4*)(S41C3*), 0, "S41C2");
    check_base_class_offset(lv, (S41C4*)(S41C3*), 0, "S41C2");
    check_base_class_offset(lv, (S41C3*), 0, "S41C2");
    test_class_info(&lv, &cd_S41C2);
    dp->~S41C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS41C2(Test_S41C2, "S41C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S41C2C1Ev();
extern void _ZN5S41C2D1Ev();
Name_Map name_map_S41C2[] = {
  NSPAIR(_ZN5S41C2C1Ev),
  NSPAIR(_ZN5S41C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S41C7;
extern VTBL_ENTRY _ZTI5S41C7[];
extern  VTBL_ENTRY _ZTV5S41C7[];
extern Class_Descriptor cd_S41C6;
extern VTBL_ENTRY _ZTI5S41C6[];
extern  VTBL_ENTRY _ZTV5S41C6[];
extern Class_Descriptor cd_S41C5;
extern VTBL_ENTRY _ZTI5S41C5[];
extern  VTBL_ENTRY _ZTV5S41C5[];
extern Class_Descriptor cd_S41C4;
extern VTBL_ENTRY _ZTI5S41C4[];
extern  VTBL_ENTRY _ZTV5S41C4[];
extern Class_Descriptor cd_S41C3;
extern VTBL_ENTRY _ZTI5S41C3[];
extern  VTBL_ENTRY _ZTV5S41C3[];
static Base_Class bases_S41C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S41C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S41C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S41C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S41C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S41C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S41C2[];
extern void _ZN5S41C2D1Ev();
extern void _ZN5S41C2D0Ev();
extern void _ZN5S41C72v5Ev();
extern void _ZN5S41C72v6Ev();
extern void _ZN5S41C72v7Ev();
extern void _ZN5S41C72v8Ev();
extern void _ZN5S41C72v9Ev();
extern void _ZN5S41C73v10Ev();
extern void _ZN5S41C73v11Ev();
extern void _ZN5S41C73v12Ev();
extern void _ZN5S41C73v13Ev();
extern void _ZN5S41C73v14Ev();
extern void _ZN5S41C73v15Ev();
extern void _ZN5S41C73v16Ev();
extern void _ZN5S41C73v17Ev();
extern void _ZN5S41C73v18Ev();
extern void _ZN5S41C73v19Ev();
extern void _ZN5S41C73v20Ev();
extern void _ZN5S41C73v21Ev();
extern void _ZN5S41C73v22Ev();
extern void _ZN5S41C73v23Ev();
extern void _ZN5S41C73v24Ev();
extern void _ZN5S41C73v25Ev();
extern void _ZN5S41C73v26Ev();
extern void _ZN5S41C73v27Ev();
extern void _ZN5S41C73v28Ev();
extern void _ZN5S41C73v29Ev();
extern void _ZN5S41C73v30Ev();
extern void _ZN5S41C73v31Ev();
extern void _ZN5S41C73v32Ev();
extern void _ZN5S41C73v33Ev();
extern void _ZN5S41C73v34Ev();
extern void _ZN5S41C73v35Ev();
extern void _ZN5S41C73v36Ev();
extern void _ZN5S41C73v37Ev();
extern void _ZN5S41C73v38Ev();
extern void _ZN5S41C73v39Ev();
extern void _ZN5S41C73v40Ev();
extern void _ZN5S41C73v41Ev();
extern void _ZN5S41C73v42Ev();
extern void _ZN5S41C73v43Ev();
extern void _ZN5S41C73v44Ev();
extern void _ZN5S41C73v45Ev();
extern void _ZN5S41C73v46Ev();
extern void _ZN5S41C73v47Ev();
extern void _ZN5S41C73v48Ev();
extern void _ZN5S41C73v49Ev();
extern void _ZN5S41C73v50Ev();
extern void _ZN5S41C73v51Ev();
extern void _ZN5S41C73v52Ev();
extern void _ZN5S41C73v53Ev();
extern void _ZN5S41C73v54Ev();
extern void _ZN5S41C73v55Ev();
extern void _ZN5S41C73v56Ev();
extern void _ZN5S41C73v57Ev();
extern void _ZN5S41C73v58Ev();
extern void _ZN5S41C73v59Ev();
extern void _ZN5S41C73v60Ev();
extern void _ZN5S41C73v61Ev();
extern void _ZN5S41C73v62Ev();
extern void _ZN5S41C73v63Ev();
extern void _ZN5S41C73v64Ev();
extern void _ZN5S41C73v65Ev();
extern void _ZN5S41C73v66Ev();
extern void _ZN5S41C73v67Ev();
extern void _ZN5S41C73v68Ev();
extern void _ZN5S41C73v69Ev();
extern void _ZN5S41C73v70Ev();
extern void _ZN5S41C73v71Ev();
extern void _ZN5S41C73v72Ev();
extern void _ZN5S41C73v73Ev();
extern void _ZN5S41C73v74Ev();
extern void _ZN5S41C73v75Ev();
extern void _ZN5S41C73v76Ev();
extern void _ZN5S41C73v77Ev();
extern void _ZN5S41C73v78Ev();
extern void _ZN5S41C73v79Ev();
extern void _ZN5S41C73v80Ev();
extern void _ZN5S41C73v81Ev();
extern void _ZN5S41C73v82Ev();
extern void _ZN5S41C73v83Ev();
extern void _ZN5S41C73v84Ev();
extern void _ZN5S41C73v85Ev();
extern void _ZN5S41C73v86Ev();
extern void _ZN5S41C73v87Ev();
extern void _ZN5S41C73v88Ev();
extern void _ZN5S41C73v89Ev();
extern void _ZN5S41C73v90Ev();
extern void _ZN5S41C73v91Ev();
extern void _ZN5S41C73v92Ev();
extern void _ZN5S41C73v93Ev();
extern void _ZN5S41C73v94Ev();
extern void _ZN5S41C73v95Ev();
extern void _ZN5S41C73v96Ev();
extern void _ZN5S41C73v97Ev();
extern void _ZN5S41C73v98Ev();
extern void _ZN5S41C73v99Ev();
extern void _ZN5S41C74v100Ev();
extern void _ZN5S41C74v101Ev();
extern void _ZN5S41C74v102Ev();
extern void _ZN5S41C74v103Ev();
extern void _ZN5S41C74v104Ev();
extern void _ZN5S41C74v105Ev();
extern void _ZN5S41C74v106Ev();
extern void _ZN5S41C74v107Ev();
extern void _ZN5S41C74v108Ev();
extern void _ZN5S41C74v109Ev();
extern void _ZN5S41C74v110Ev();
extern void _ZN5S41C74v111Ev();
extern void _ZN5S41C54v112Ev();
extern void _ZN5S41C54v113Ev();
extern void _ZN5S41C54v114Ev();
extern void _ZN5S41C54v115Ev();
extern void _ZN5S41C54v116Ev();
extern void _ZN5S41C54v117Ev();
extern void _ZN5S41C54v118Ev();
extern void _ZN5S41C54v119Ev();
extern void _ZN5S41C54v120Ev();
extern void _ZN5S41C54v121Ev();
extern void _ZN5S41C54v122Ev();
extern void _ZN5S41C54v123Ev();
extern void _ZN5S41C54v124Ev();
extern void _ZN5S41C54v125Ev();
extern void _ZN5S41C54v126Ev();
extern void _ZN5S41C54v127Ev();
extern void _ZN5S41C54v128Ev();
extern void _ZN5S41C54v129Ev();
extern void _ZN5S41C54v130Ev();
extern void _ZN5S41C54v131Ev();
extern void _ZN5S41C54v132Ev();
extern void _ZN5S41C54v133Ev();
extern void _ZN5S41C54v134Ev();
extern void _ZN5S41C54v135Ev();
extern void _ZN5S41C54v136Ev();
extern void _ZN5S41C54v137Ev();
extern void _ZN5S41C44v138Ev();
extern void _ZN5S41C44v139Ev();
extern void _ZN5S41C44v140Ev();
extern void _ZN5S41C44v141Ev();
extern void _ZN5S41C44v142Ev();
extern void _ZN5S41C44v143Ev();
extern void _ZN5S41C44v144Ev();
extern void _ZN5S41C44v145Ev();
extern void _ZN5S41C44v146Ev();
extern void _ZN5S41C44v147Ev();
extern void _ZN5S41C44v148Ev();
extern void _ZN5S41C44v149Ev();
extern void _ZN5S41C44v150Ev();
extern void _ZN5S41C44v151Ev();
extern void _ZN5S41C44v152Ev();
extern void _ZN5S41C44v153Ev();
extern void _ZN5S41C44v154Ev();
extern void _ZN5S41C44v155Ev();
extern void _ZN5S41C34v156Ev();
extern void _ZN5S41C34v157Ev();
extern void _ZN5S41C34v158Ev();
extern void _ZN5S41C34v159Ev();
extern void _ZN5S41C34v160Ev();
extern void _ZN5S41C34v161Ev();
extern void _ZN5S41C34v162Ev();
extern void _ZN5S41C34v163Ev();
extern void _ZN5S41C34v164Ev();
extern void _ZN5S41C34v165Ev();
extern void _ZN5S41C34v166Ev();
extern void _ZN5S41C34v167Ev();
extern void _ZN5S41C34v168Ev();
extern void _ZN5S41C34v169Ev();
extern void _ZN5S41C34v170Ev();
extern void _ZN5S41C34v171Ev();
extern void _ZN5S41C34v172Ev();
extern void _ZN5S41C34v173Ev();
extern void _ZN5S41C34v174Ev();
extern void _ZN5S41C34v175Ev();
extern void _ZN5S41C34v176Ev();
extern void _ZN5S41C34v177Ev();
extern void _ZN5S41C34v178Ev();
extern void _ZN5S41C34v179Ev();
extern void _ZN5S41C34v180Ev();
extern void _ZN5S41C34v181Ev();
static  VTBL_ENTRY vtc_S41C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S41C2[0]),
  (VTBL_ENTRY)&_ZN5S41C2D1Ev,
  (VTBL_ENTRY)&_ZN5S41C2D0Ev,
  (VTBL_ENTRY)&_ZN5S41C72v5Ev,
  (VTBL_ENTRY)&_ZN5S41C72v6Ev,
  (VTBL_ENTRY)&_ZN5S41C72v7Ev,
  (VTBL_ENTRY)&_ZN5S41C72v8Ev,
  (VTBL_ENTRY)&_ZN5S41C72v9Ev,
  (VTBL_ENTRY)&_ZN5S41C73v10Ev,
  (VTBL_ENTRY)&_ZN5S41C73v11Ev,
  (VTBL_ENTRY)&_ZN5S41C73v12Ev,
  (VTBL_ENTRY)&_ZN5S41C73v13Ev,
  (VTBL_ENTRY)&_ZN5S41C73v14Ev,
  (VTBL_ENTRY)&_ZN5S41C73v15Ev,
  (VTBL_ENTRY)&_ZN5S41C73v16Ev,
  (VTBL_ENTRY)&_ZN5S41C73v17Ev,
  (VTBL_ENTRY)&_ZN5S41C73v18Ev,
  (VTBL_ENTRY)&_ZN5S41C73v19Ev,
  (VTBL_ENTRY)&_ZN5S41C73v20Ev,
  (VTBL_ENTRY)&_ZN5S41C73v21Ev,
  (VTBL_ENTRY)&_ZN5S41C73v22Ev,
  (VTBL_ENTRY)&_ZN5S41C73v23Ev,
  (VTBL_ENTRY)&_ZN5S41C73v24Ev,
  (VTBL_ENTRY)&_ZN5S41C73v25Ev,
  (VTBL_ENTRY)&_ZN5S41C73v26Ev,
  (VTBL_ENTRY)&_ZN5S41C73v27Ev,
  (VTBL_ENTRY)&_ZN5S41C73v28Ev,
  (VTBL_ENTRY)&_ZN5S41C73v29Ev,
  (VTBL_ENTRY)&_ZN5S41C73v30Ev,
  (VTBL_ENTRY)&_ZN5S41C73v31Ev,
  (VTBL_ENTRY)&_ZN5S41C73v32Ev,
  (VTBL_ENTRY)&_ZN5S41C73v33Ev,
  (VTBL_ENTRY)&_ZN5S41C73v34Ev,
  (VTBL_ENTRY)&_ZN5S41C73v35Ev,
  (VTBL_ENTRY)&_ZN5S41C73v36Ev,
  (VTBL_ENTRY)&_ZN5S41C73v37Ev,
  (VTBL_ENTRY)&_ZN5S41C73v38Ev,
  (VTBL_ENTRY)&_ZN5S41C73v39Ev,
  (VTBL_ENTRY)&_ZN5S41C73v40Ev,
  (VTBL_ENTRY)&_ZN5S41C73v41Ev,
  (VTBL_ENTRY)&_ZN5S41C73v42Ev,
  (VTBL_ENTRY)&_ZN5S41C73v43Ev,
  (VTBL_ENTRY)&_ZN5S41C73v44Ev,
  (VTBL_ENTRY)&_ZN5S41C73v45Ev,
  (VTBL_ENTRY)&_ZN5S41C73v46Ev,
  (VTBL_ENTRY)&_ZN5S41C73v47Ev,
  (VTBL_ENTRY)&_ZN5S41C73v48Ev,
  (VTBL_ENTRY)&_ZN5S41C73v49Ev,
  (VTBL_ENTRY)&_ZN5S41C73v50Ev,
  (VTBL_ENTRY)&_ZN5S41C73v51Ev,
  (VTBL_ENTRY)&_ZN5S41C73v52Ev,
  (VTBL_ENTRY)&_ZN5S41C73v53Ev,
  (VTBL_ENTRY)&_ZN5S41C73v54Ev,
  (VTBL_ENTRY)&_ZN5S41C73v55Ev,
  (VTBL_ENTRY)&_ZN5S41C73v56Ev,
  (VTBL_ENTRY)&_ZN5S41C73v57Ev,
  (VTBL_ENTRY)&_ZN5S41C73v58Ev,
  (VTBL_ENTRY)&_ZN5S41C73v59Ev,
  (VTBL_ENTRY)&_ZN5S41C73v60Ev,
  (VTBL_ENTRY)&_ZN5S41C73v61Ev,
  (VTBL_ENTRY)&_ZN5S41C73v62Ev,
  (VTBL_ENTRY)&_ZN5S41C73v63Ev,
  (VTBL_ENTRY)&_ZN5S41C73v64Ev,
  (VTBL_ENTRY)&_ZN5S41C73v65Ev,
  (VTBL_ENTRY)&_ZN5S41C73v66Ev,
  (VTBL_ENTRY)&_ZN5S41C73v67Ev,
  (VTBL_ENTRY)&_ZN5S41C73v68Ev,
  (VTBL_ENTRY)&_ZN5S41C73v69Ev,
  (VTBL_ENTRY)&_ZN5S41C73v70Ev,
  (VTBL_ENTRY)&_ZN5S41C73v71Ev,
  (VTBL_ENTRY)&_ZN5S41C73v72Ev,
  (VTBL_ENTRY)&_ZN5S41C73v73Ev,
  (VTBL_ENTRY)&_ZN5S41C73v74Ev,
  (VTBL_ENTRY)&_ZN5S41C73v75Ev,
  (VTBL_ENTRY)&_ZN5S41C73v76Ev,
  (VTBL_ENTRY)&_ZN5S41C73v77Ev,
  (VTBL_ENTRY)&_ZN5S41C73v78Ev,
  (VTBL_ENTRY)&_ZN5S41C73v79Ev,
  (VTBL_ENTRY)&_ZN5S41C73v80Ev,
  (VTBL_ENTRY)&_ZN5S41C73v81Ev,
  (VTBL_ENTRY)&_ZN5S41C73v82Ev,
  (VTBL_ENTRY)&_ZN5S41C73v83Ev,
  (VTBL_ENTRY)&_ZN5S41C73v84Ev,
  (VTBL_ENTRY)&_ZN5S41C73v85Ev,
  (VTBL_ENTRY)&_ZN5S41C73v86Ev,
  (VTBL_ENTRY)&_ZN5S41C73v87Ev,
  (VTBL_ENTRY)&_ZN5S41C73v88Ev,
  (VTBL_ENTRY)&_ZN5S41C73v89Ev,
  (VTBL_ENTRY)&_ZN5S41C73v90Ev,
  (VTBL_ENTRY)&_ZN5S41C73v91Ev,
  (VTBL_ENTRY)&_ZN5S41C73v92Ev,
  (VTBL_ENTRY)&_ZN5S41C73v93Ev,
  (VTBL_ENTRY)&_ZN5S41C73v94Ev,
  (VTBL_ENTRY)&_ZN5S41C73v95Ev,
  (VTBL_ENTRY)&_ZN5S41C73v96Ev,
  (VTBL_ENTRY)&_ZN5S41C73v97Ev,
  (VTBL_ENTRY)&_ZN5S41C73v98Ev,
  (VTBL_ENTRY)&_ZN5S41C73v99Ev,
  (VTBL_ENTRY)&_ZN5S41C74v100Ev,
  (VTBL_ENTRY)&_ZN5S41C74v101Ev,
  (VTBL_ENTRY)&_ZN5S41C74v102Ev,
  (VTBL_ENTRY)&_ZN5S41C74v103Ev,
  (VTBL_ENTRY)&_ZN5S41C74v104Ev,
  (VTBL_ENTRY)&_ZN5S41C74v105Ev,
  (VTBL_ENTRY)&_ZN5S41C74v106Ev,
  (VTBL_ENTRY)&_ZN5S41C74v107Ev,
  (VTBL_ENTRY)&_ZN5S41C74v108Ev,
  (VTBL_ENTRY)&_ZN5S41C74v109Ev,
  (VTBL_ENTRY)&_ZN5S41C74v110Ev,
  (VTBL_ENTRY)&_ZN5S41C74v111Ev,
  (VTBL_ENTRY)&_ZN5S41C54v112Ev,
  (VTBL_ENTRY)&_ZN5S41C54v113Ev,
  (VTBL_ENTRY)&_ZN5S41C54v114Ev,
  (VTBL_ENTRY)&_ZN5S41C54v115Ev,
  (VTBL_ENTRY)&_ZN5S41C54v116Ev,
  (VTBL_ENTRY)&_ZN5S41C54v117Ev,
  (VTBL_ENTRY)&_ZN5S41C54v118Ev,
  (VTBL_ENTRY)&_ZN5S41C54v119Ev,
  (VTBL_ENTRY)&_ZN5S41C54v120Ev,
  (VTBL_ENTRY)&_ZN5S41C54v121Ev,
  (VTBL_ENTRY)&_ZN5S41C54v122Ev,
  (VTBL_ENTRY)&_ZN5S41C54v123Ev,
  (VTBL_ENTRY)&_ZN5S41C54v124Ev,
  (VTBL_ENTRY)&_ZN5S41C54v125Ev,
  (VTBL_ENTRY)&_ZN5S41C54v126Ev,
  (VTBL_ENTRY)&_ZN5S41C54v127Ev,
  (VTBL_ENTRY)&_ZN5S41C54v128Ev,
  (VTBL_ENTRY)&_ZN5S41C54v129Ev,
  (VTBL_ENTRY)&_ZN5S41C54v130Ev,
  (VTBL_ENTRY)&_ZN5S41C54v131Ev,
  (VTBL_ENTRY)&_ZN5S41C54v132Ev,
  (VTBL_ENTRY)&_ZN5S41C54v133Ev,
  (VTBL_ENTRY)&_ZN5S41C54v134Ev,
  (VTBL_ENTRY)&_ZN5S41C54v135Ev,
  (VTBL_ENTRY)&_ZN5S41C54v136Ev,
  (VTBL_ENTRY)&_ZN5S41C54v137Ev,
  (VTBL_ENTRY)&_ZN5S41C44v138Ev,
  (VTBL_ENTRY)&_ZN5S41C44v139Ev,
  (VTBL_ENTRY)&_ZN5S41C44v140Ev,
  (VTBL_ENTRY)&_ZN5S41C44v141Ev,
  (VTBL_ENTRY)&_ZN5S41C44v142Ev,
  (VTBL_ENTRY)&_ZN5S41C44v143Ev,
  (VTBL_ENTRY)&_ZN5S41C44v144Ev,
  (VTBL_ENTRY)&_ZN5S41C44v145Ev,
  (VTBL_ENTRY)&_ZN5S41C44v146Ev,
  (VTBL_ENTRY)&_ZN5S41C44v147Ev,
  (VTBL_ENTRY)&_ZN5S41C44v148Ev,
  (VTBL_ENTRY)&_ZN5S41C44v149Ev,
  (VTBL_ENTRY)&_ZN5S41C44v150Ev,
  (VTBL_ENTRY)&_ZN5S41C44v151Ev,
  (VTBL_ENTRY)&_ZN5S41C44v152Ev,
  (VTBL_ENTRY)&_ZN5S41C44v153Ev,
  (VTBL_ENTRY)&_ZN5S41C44v154Ev,
  (VTBL_ENTRY)&_ZN5S41C44v155Ev,
  (VTBL_ENTRY)&_ZN5S41C34v156Ev,
  (VTBL_ENTRY)&_ZN5S41C34v157Ev,
  (VTBL_ENTRY)&_ZN5S41C34v158Ev,
  (VTBL_ENTRY)&_ZN5S41C34v159Ev,
  (VTBL_ENTRY)&_ZN5S41C34v160Ev,
  (VTBL_ENTRY)&_ZN5S41C34v161Ev,
  (VTBL_ENTRY)&_ZN5S41C34v162Ev,
  (VTBL_ENTRY)&_ZN5S41C34v163Ev,
  (VTBL_ENTRY)&_ZN5S41C34v164Ev,
  (VTBL_ENTRY)&_ZN5S41C34v165Ev,
  (VTBL_ENTRY)&_ZN5S41C34v166Ev,
  (VTBL_ENTRY)&_ZN5S41C34v167Ev,
  (VTBL_ENTRY)&_ZN5S41C34v168Ev,
  (VTBL_ENTRY)&_ZN5S41C34v169Ev,
  (VTBL_ENTRY)&_ZN5S41C34v170Ev,
  (VTBL_ENTRY)&_ZN5S41C34v171Ev,
  (VTBL_ENTRY)&_ZN5S41C34v172Ev,
  (VTBL_ENTRY)&_ZN5S41C34v173Ev,
  (VTBL_ENTRY)&_ZN5S41C34v174Ev,
  (VTBL_ENTRY)&_ZN5S41C34v175Ev,
  (VTBL_ENTRY)&_ZN5S41C34v176Ev,
  (VTBL_ENTRY)&_ZN5S41C34v177Ev,
  (VTBL_ENTRY)&_ZN5S41C34v178Ev,
  (VTBL_ENTRY)&_ZN5S41C34v179Ev,
  (VTBL_ENTRY)&_ZN5S41C34v180Ev,
  (VTBL_ENTRY)&_ZN5S41C34v181Ev,
};
extern VTBL_ENTRY _ZTI5S41C2[];
extern  VTBL_ENTRY _ZTV5S41C2[];
Class_Descriptor cd_S41C2 = {  "S41C2", // class name
  bases_S41C2, 6,
  &(vtc_S41C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S41C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S41C2),181, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S41C1  : S41C2 {
  virtual void  v1(); // _ZN5S41C12v1Ev
  virtual void  v2(); // _ZN5S41C12v2Ev
  virtual void  v3(); // _ZN5S41C12v3Ev
  virtual void  v4(); // _ZN5S41C12v4Ev
  ~S41C1(); // tgen
  S41C1(); // tgen
};
//SIG(1 S41C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ vd m Fp Fi} 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 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 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}} v1 v2 v3 v4}


void  S41C1 ::v1(){vfunc_called(this, "_ZN5S41C12v1Ev");}
void  S41C1 ::v2(){vfunc_called(this, "_ZN5S41C12v2Ev");}
void  S41C1 ::v3(){vfunc_called(this, "_ZN5S41C12v3Ev");}
void  S41C1 ::v4(){vfunc_called(this, "_ZN5S41C12v4Ev");}
S41C1 ::~S41C1(){ note_dtor("S41C1", this);} // tgen
S41C1 ::S41C1(){ note_ctor("S41C1", this);} // tgen

static void Test_S41C1()
{
  extern Class_Descriptor cd_S41C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S41C1, buf);
    S41C1 *dp, &lv = *(dp=new (buf) S41C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S41C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S41C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S41C7*)(S41C6*)(S41C5*)(S41C4*)(S41C3*)(S41C2*), 0, "S41C1");
    check_base_class_offset(lv, (S41C7*)(S41C6*)(S41C5*)(S41C4*)(S41C3*)(S41C2*), 0, "S41C1");
    check_base_class_offset(lv, (S41C6*)(S41C5*)(S41C4*)(S41C3*)(S41C2*), 0, "S41C1");
    check_base_class_offset(lv, (S41C5*)(S41C4*)(S41C3*)(S41C2*), 0, "S41C1");
    check_base_class_offset(lv, (S41C4*)(S41C3*)(S41C2*), 0, "S41C1");
    check_base_class_offset(lv, (S41C3*)(S41C2*), 0, "S41C1");
    check_base_class_offset(lv, (S41C2*), 0, "S41C1");
    test_class_info(&lv, &cd_S41C1);
    dp->~S41C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS41C1(Test_S41C1, "S41C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN5S41C1C1Ev();
extern void _ZN5S41C1D1Ev();
Name_Map name_map_S41C1[] = {
  NSPAIR(_ZN5S41C1C1Ev),
  NSPAIR(_ZN5S41C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S41C7;
extern VTBL_ENTRY _ZTI5S41C7[];
extern  VTBL_ENTRY _ZTV5S41C7[];
extern Class_Descriptor cd_S41C6;
extern VTBL_ENTRY _ZTI5S41C6[];
extern  VTBL_ENTRY _ZTV5S41C6[];
extern Class_Descriptor cd_S41C5;
extern VTBL_ENTRY _ZTI5S41C5[];
extern  VTBL_ENTRY _ZTV5S41C5[];
extern Class_Descriptor cd_S41C4;
extern VTBL_ENTRY _ZTI5S41C4[];
extern  VTBL_ENTRY _ZTV5S41C4[];
extern Class_Descriptor cd_S41C3;
extern VTBL_ENTRY _ZTI5S41C3[];
extern  VTBL_ENTRY _ZTV5S41C3[];
extern Class_Descriptor cd_S41C2;
extern VTBL_ENTRY _ZTI5S41C2[];
extern  VTBL_ENTRY _ZTV5S41C2[];
static Base_Class bases_S41C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S41C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S41C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S41C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S41C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S41C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S41C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S41C1[];
extern void _ZN5S41C1D1Ev();
extern void _ZN5S41C1D0Ev();
extern void _ZN5S41C72v5Ev();
extern void _ZN5S41C72v6Ev();
extern void _ZN5S41C72v7Ev();
extern void _ZN5S41C72v8Ev();
extern void _ZN5S41C72v9Ev();
extern void _ZN5S41C73v10Ev();
extern void _ZN5S41C73v11Ev();
extern void _ZN5S41C73v12Ev();
extern void _ZN5S41C73v13Ev();
extern void _ZN5S41C73v14Ev();
extern void _ZN5S41C73v15Ev();
extern void _ZN5S41C73v16Ev();
extern void _ZN5S41C73v17Ev();
extern void _ZN5S41C73v18Ev();
extern void _ZN5S41C73v19Ev();
extern void _ZN5S41C73v20Ev();
extern void _ZN5S41C73v21Ev();
extern void _ZN5S41C73v22Ev();
extern void _ZN5S41C73v23Ev();
extern void _ZN5S41C73v24Ev();
extern void _ZN5S41C73v25Ev();
extern void _ZN5S41C73v26Ev();
extern void _ZN5S41C73v27Ev();
extern void _ZN5S41C73v28Ev();
extern void _ZN5S41C73v29Ev();
extern void _ZN5S41C73v30Ev();
extern void _ZN5S41C73v31Ev();
extern void _ZN5S41C73v32Ev();
extern void _ZN5S41C73v33Ev();
extern void _ZN5S41C73v34Ev();
extern void _ZN5S41C73v35Ev();
extern void _ZN5S41C73v36Ev();
extern void _ZN5S41C73v37Ev();
extern void _ZN5S41C73v38Ev();
extern void _ZN5S41C73v39Ev();
extern void _ZN5S41C73v40Ev();
extern void _ZN5S41C73v41Ev();
extern void _ZN5S41C73v42Ev();
extern void _ZN5S41C73v43Ev();
extern void _ZN5S41C73v44Ev();
extern void _ZN5S41C73v45Ev();
extern void _ZN5S41C73v46Ev();
extern void _ZN5S41C73v47Ev();
extern void _ZN5S41C73v48Ev();
extern void _ZN5S41C73v49Ev();
extern void _ZN5S41C73v50Ev();
extern void _ZN5S41C73v51Ev();
extern void _ZN5S41C73v52Ev();
extern void _ZN5S41C73v53Ev();
extern void _ZN5S41C73v54Ev();
extern void _ZN5S41C73v55Ev();
extern void _ZN5S41C73v56Ev();
extern void _ZN5S41C73v57Ev();
extern void _ZN5S41C73v58Ev();
extern void _ZN5S41C73v59Ev();
extern void _ZN5S41C73v60Ev();
extern void _ZN5S41C73v61Ev();
extern void _ZN5S41C73v62Ev();
extern void _ZN5S41C73v63Ev();
extern void _ZN5S41C73v64Ev();
extern void _ZN5S41C73v65Ev();
extern void _ZN5S41C73v66Ev();
extern void _ZN5S41C73v67Ev();
extern void _ZN5S41C73v68Ev();
extern void _ZN5S41C73v69Ev();
extern void _ZN5S41C73v70Ev();
extern void _ZN5S41C73v71Ev();
extern void _ZN5S41C73v72Ev();
extern void _ZN5S41C73v73Ev();
extern void _ZN5S41C73v74Ev();
extern void _ZN5S41C73v75Ev();
extern void _ZN5S41C73v76Ev();
extern void _ZN5S41C73v77Ev();
extern void _ZN5S41C73v78Ev();
extern void _ZN5S41C73v79Ev();
extern void _ZN5S41C73v80Ev();
extern void _ZN5S41C73v81Ev();
extern void _ZN5S41C73v82Ev();
extern void _ZN5S41C73v83Ev();
extern void _ZN5S41C73v84Ev();
extern void _ZN5S41C73v85Ev();
extern void _ZN5S41C73v86Ev();
extern void _ZN5S41C73v87Ev();
extern void _ZN5S41C73v88Ev();
extern void _ZN5S41C73v89Ev();
extern void _ZN5S41C73v90Ev();
extern void _ZN5S41C73v91Ev();
extern void _ZN5S41C73v92Ev();
extern void _ZN5S41C73v93Ev();
extern void _ZN5S41C73v94Ev();
extern void _ZN5S41C73v95Ev();
extern void _ZN5S41C73v96Ev();
extern void _ZN5S41C73v97Ev();
extern void _ZN5S41C73v98Ev();
extern void _ZN5S41C73v99Ev();
extern void _ZN5S41C74v100Ev();
extern void _ZN5S41C74v101Ev();
extern void _ZN5S41C74v102Ev();
extern void _ZN5S41C74v103Ev();
extern void _ZN5S41C74v104Ev();
extern void _ZN5S41C74v105Ev();
extern void _ZN5S41C74v106Ev();
extern void _ZN5S41C74v107Ev();
extern void _ZN5S41C74v108Ev();
extern void _ZN5S41C74v109Ev();
extern void _ZN5S41C74v110Ev();
extern void _ZN5S41C74v111Ev();
extern void _ZN5S41C54v112Ev();
extern void _ZN5S41C54v113Ev();
extern void _ZN5S41C54v114Ev();
extern void _ZN5S41C54v115Ev();
extern void _ZN5S41C54v116Ev();
extern void _ZN5S41C54v117Ev();
extern void _ZN5S41C54v118Ev();
extern void _ZN5S41C54v119Ev();
extern void _ZN5S41C54v120Ev();
extern void _ZN5S41C54v121Ev();
extern void _ZN5S41C54v122Ev();
extern void _ZN5S41C54v123Ev();
extern void _ZN5S41C54v124Ev();
extern void _ZN5S41C54v125Ev();
extern void _ZN5S41C54v126Ev();
extern void _ZN5S41C54v127Ev();
extern void _ZN5S41C54v128Ev();
extern void _ZN5S41C54v129Ev();
extern void _ZN5S41C54v130Ev();
extern void _ZN5S41C54v131Ev();
extern void _ZN5S41C54v132Ev();
extern void _ZN5S41C54v133Ev();
extern void _ZN5S41C54v134Ev();
extern void _ZN5S41C54v135Ev();
extern void _ZN5S41C54v136Ev();
extern void _ZN5S41C54v137Ev();
extern void _ZN5S41C44v138Ev();
extern void _ZN5S41C44v139Ev();
extern void _ZN5S41C44v140Ev();
extern void _ZN5S41C44v141Ev();
extern void _ZN5S41C44v142Ev();
extern void _ZN5S41C44v143Ev();
extern void _ZN5S41C44v144Ev();
extern void _ZN5S41C44v145Ev();
extern void _ZN5S41C44v146Ev();
extern void _ZN5S41C44v147Ev();
extern void _ZN5S41C44v148Ev();
extern void _ZN5S41C44v149Ev();
extern void _ZN5S41C44v150Ev();
extern void _ZN5S41C44v151Ev();
extern void _ZN5S41C44v152Ev();
extern void _ZN5S41C44v153Ev();
extern void _ZN5S41C44v154Ev();
extern void _ZN5S41C44v155Ev();
extern void _ZN5S41C34v156Ev();
extern void _ZN5S41C34v157Ev();
extern void _ZN5S41C34v158Ev();
extern void _ZN5S41C34v159Ev();
extern void _ZN5S41C34v160Ev();
extern void _ZN5S41C34v161Ev();
extern void _ZN5S41C34v162Ev();
extern void _ZN5S41C34v163Ev();
extern void _ZN5S41C34v164Ev();
extern void _ZN5S41C34v165Ev();
extern void _ZN5S41C34v166Ev();
extern void _ZN5S41C34v167Ev();
extern void _ZN5S41C34v168Ev();
extern void _ZN5S41C34v169Ev();
extern void _ZN5S41C34v170Ev();
extern void _ZN5S41C34v171Ev();
extern void _ZN5S41C34v172Ev();
extern void _ZN5S41C34v173Ev();
extern void _ZN5S41C34v174Ev();
extern void _ZN5S41C34v175Ev();
extern void _ZN5S41C34v176Ev();
extern void _ZN5S41C34v177Ev();
extern void _ZN5S41C34v178Ev();
extern void _ZN5S41C34v179Ev();
extern void _ZN5S41C34v180Ev();
extern void _ZN5S41C34v181Ev();
extern void _ZN5S41C12v1Ev();
extern void _ZN5S41C12v2Ev();
extern void _ZN5S41C12v3Ev();
extern void _ZN5S41C12v4Ev();
static  VTBL_ENTRY vtc_S41C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S41C1[0]),
  (VTBL_ENTRY)&_ZN5S41C1D1Ev,
  (VTBL_ENTRY)&_ZN5S41C1D0Ev,
  (VTBL_ENTRY)&_ZN5S41C72v5Ev,
  (VTBL_ENTRY)&_ZN5S41C72v6Ev,
  (VTBL_ENTRY)&_ZN5S41C72v7Ev,
  (VTBL_ENTRY)&_ZN5S41C72v8Ev,
  (VTBL_ENTRY)&_ZN5S41C72v9Ev,
  (VTBL_ENTRY)&_ZN5S41C73v10Ev,
  (VTBL_ENTRY)&_ZN5S41C73v11Ev,
  (VTBL_ENTRY)&_ZN5S41C73v12Ev,
  (VTBL_ENTRY)&_ZN5S41C73v13Ev,
  (VTBL_ENTRY)&_ZN5S41C73v14Ev,
  (VTBL_ENTRY)&_ZN5S41C73v15Ev,
  (VTBL_ENTRY)&_ZN5S41C73v16Ev,
  (VTBL_ENTRY)&_ZN5S41C73v17Ev,
  (VTBL_ENTRY)&_ZN5S41C73v18Ev,
  (VTBL_ENTRY)&_ZN5S41C73v19Ev,
  (VTBL_ENTRY)&_ZN5S41C73v20Ev,
  (VTBL_ENTRY)&_ZN5S41C73v21Ev,
  (VTBL_ENTRY)&_ZN5S41C73v22Ev,
  (VTBL_ENTRY)&_ZN5S41C73v23Ev,
  (VTBL_ENTRY)&_ZN5S41C73v24Ev,
  (VTBL_ENTRY)&_ZN5S41C73v25Ev,
  (VTBL_ENTRY)&_ZN5S41C73v26Ev,
  (VTBL_ENTRY)&_ZN5S41C73v27Ev,
  (VTBL_ENTRY)&_ZN5S41C73v28Ev,
  (VTBL_ENTRY)&_ZN5S41C73v29Ev,
  (VTBL_ENTRY)&_ZN5S41C73v30Ev,
  (VTBL_ENTRY)&_ZN5S41C73v31Ev,
  (VTBL_ENTRY)&_ZN5S41C73v32Ev,
  (VTBL_ENTRY)&_ZN5S41C73v33Ev,
  (VTBL_ENTRY)&_ZN5S41C73v34Ev,
  (VTBL_ENTRY)&_ZN5S41C73v35Ev,
  (VTBL_ENTRY)&_ZN5S41C73v36Ev,
  (VTBL_ENTRY)&_ZN5S41C73v37Ev,
  (VTBL_ENTRY)&_ZN5S41C73v38Ev,
  (VTBL_ENTRY)&_ZN5S41C73v39Ev,
  (VTBL_ENTRY)&_ZN5S41C73v40Ev,
  (VTBL_ENTRY)&_ZN5S41C73v41Ev,
  (VTBL_ENTRY)&_ZN5S41C73v42Ev,
  (VTBL_ENTRY)&_ZN5S41C73v43Ev,
  (VTBL_ENTRY)&_ZN5S41C73v44Ev,
  (VTBL_ENTRY)&_ZN5S41C73v45Ev,
  (VTBL_ENTRY)&_ZN5S41C73v46Ev,
  (VTBL_ENTRY)&_ZN5S41C73v47Ev,
  (VTBL_ENTRY)&_ZN5S41C73v48Ev,
  (VTBL_ENTRY)&_ZN5S41C73v49Ev,
  (VTBL_ENTRY)&_ZN5S41C73v50Ev,
  (VTBL_ENTRY)&_ZN5S41C73v51Ev,
  (VTBL_ENTRY)&_ZN5S41C73v52Ev,
  (VTBL_ENTRY)&_ZN5S41C73v53Ev,
  (VTBL_ENTRY)&_ZN5S41C73v54Ev,
  (VTBL_ENTRY)&_ZN5S41C73v55Ev,
  (VTBL_ENTRY)&_ZN5S41C73v56Ev,
  (VTBL_ENTRY)&_ZN5S41C73v57Ev,
  (VTBL_ENTRY)&_ZN5S41C73v58Ev,
  (VTBL_ENTRY)&_ZN5S41C73v59Ev,
  (VTBL_ENTRY)&_ZN5S41C73v60Ev,
  (VTBL_ENTRY)&_ZN5S41C73v61Ev,
  (VTBL_ENTRY)&_ZN5S41C73v62Ev,
  (VTBL_ENTRY)&_ZN5S41C73v63Ev,
  (VTBL_ENTRY)&_ZN5S41C73v64Ev,
  (VTBL_ENTRY)&_ZN5S41C73v65Ev,
  (VTBL_ENTRY)&_ZN5S41C73v66Ev,
  (VTBL_ENTRY)&_ZN5S41C73v67Ev,
  (VTBL_ENTRY)&_ZN5S41C73v68Ev,
  (VTBL_ENTRY)&_ZN5S41C73v69Ev,
  (VTBL_ENTRY)&_ZN5S41C73v70Ev,
  (VTBL_ENTRY)&_ZN5S41C73v71Ev,
  (VTBL_ENTRY)&_ZN5S41C73v72Ev,
  (VTBL_ENTRY)&_ZN5S41C73v73Ev,
  (VTBL_ENTRY)&_ZN5S41C73v74Ev,
  (VTBL_ENTRY)&_ZN5S41C73v75Ev,
  (VTBL_ENTRY)&_ZN5S41C73v76Ev,
  (VTBL_ENTRY)&_ZN5S41C73v77Ev,
  (VTBL_ENTRY)&_ZN5S41C73v78Ev,
  (VTBL_ENTRY)&_ZN5S41C73v79Ev,
  (VTBL_ENTRY)&_ZN5S41C73v80Ev,
  (VTBL_ENTRY)&_ZN5S41C73v81Ev,
  (VTBL_ENTRY)&_ZN5S41C73v82Ev,
  (VTBL_ENTRY)&_ZN5S41C73v83Ev,
  (VTBL_ENTRY)&_ZN5S41C73v84Ev,
  (VTBL_ENTRY)&_ZN5S41C73v85Ev,
  (VTBL_ENTRY)&_ZN5S41C73v86Ev,
  (VTBL_ENTRY)&_ZN5S41C73v87Ev,
  (VTBL_ENTRY)&_ZN5S41C73v88Ev,
  (VTBL_ENTRY)&_ZN5S41C73v89Ev,
  (VTBL_ENTRY)&_ZN5S41C73v90Ev,
  (VTBL_ENTRY)&_ZN5S41C73v91Ev,
  (VTBL_ENTRY)&_ZN5S41C73v92Ev,
  (VTBL_ENTRY)&_ZN5S41C73v93Ev,
  (VTBL_ENTRY)&_ZN5S41C73v94Ev,
  (VTBL_ENTRY)&_ZN5S41C73v95Ev,
  (VTBL_ENTRY)&_ZN5S41C73v96Ev,
  (VTBL_ENTRY)&_ZN5S41C73v97Ev,
  (VTBL_ENTRY)&_ZN5S41C73v98Ev,
  (VTBL_ENTRY)&_ZN5S41C73v99Ev,
  (VTBL_ENTRY)&_ZN5S41C74v100Ev,
  (VTBL_ENTRY)&_ZN5S41C74v101Ev,
  (VTBL_ENTRY)&_ZN5S41C74v102Ev,
  (VTBL_ENTRY)&_ZN5S41C74v103Ev,
  (VTBL_ENTRY)&_ZN5S41C74v104Ev,
  (VTBL_ENTRY)&_ZN5S41C74v105Ev,
  (VTBL_ENTRY)&_ZN5S41C74v106Ev,
  (VTBL_ENTRY)&_ZN5S41C74v107Ev,
  (VTBL_ENTRY)&_ZN5S41C74v108Ev,
  (VTBL_ENTRY)&_ZN5S41C74v109Ev,
  (VTBL_ENTRY)&_ZN5S41C74v110Ev,
  (VTBL_ENTRY)&_ZN5S41C74v111Ev,
  (VTBL_ENTRY)&_ZN5S41C54v112Ev,
  (VTBL_ENTRY)&_ZN5S41C54v113Ev,
  (VTBL_ENTRY)&_ZN5S41C54v114Ev,
  (VTBL_ENTRY)&_ZN5S41C54v115Ev,
  (VTBL_ENTRY)&_ZN5S41C54v116Ev,
  (VTBL_ENTRY)&_ZN5S41C54v117Ev,
  (VTBL_ENTRY)&_ZN5S41C54v118Ev,
  (VTBL_ENTRY)&_ZN5S41C54v119Ev,
  (VTBL_ENTRY)&_ZN5S41C54v120Ev,
  (VTBL_ENTRY)&_ZN5S41C54v121Ev,
  (VTBL_ENTRY)&_ZN5S41C54v122Ev,
  (VTBL_ENTRY)&_ZN5S41C54v123Ev,
  (VTBL_ENTRY)&_ZN5S41C54v124Ev,
  (VTBL_ENTRY)&_ZN5S41C54v125Ev,
  (VTBL_ENTRY)&_ZN5S41C54v126Ev,
  (VTBL_ENTRY)&_ZN5S41C54v127Ev,
  (VTBL_ENTRY)&_ZN5S41C54v128Ev,
  (VTBL_ENTRY)&_ZN5S41C54v129Ev,
  (VTBL_ENTRY)&_ZN5S41C54v130Ev,
  (VTBL_ENTRY)&_ZN5S41C54v131Ev,
  (VTBL_ENTRY)&_ZN5S41C54v132Ev,
  (VTBL_ENTRY)&_ZN5S41C54v133Ev,
  (VTBL_ENTRY)&_ZN5S41C54v134Ev,
  (VTBL_ENTRY)&_ZN5S41C54v135Ev,
  (VTBL_ENTRY)&_ZN5S41C54v136Ev,
  (VTBL_ENTRY)&_ZN5S41C54v137Ev,
  (VTBL_ENTRY)&_ZN5S41C44v138Ev,
  (VTBL_ENTRY)&_ZN5S41C44v139Ev,
  (VTBL_ENTRY)&_ZN5S41C44v140Ev,
  (VTBL_ENTRY)&_ZN5S41C44v141Ev,
  (VTBL_ENTRY)&_ZN5S41C44v142Ev,
  (VTBL_ENTRY)&_ZN5S41C44v143Ev,
  (VTBL_ENTRY)&_ZN5S41C44v144Ev,
  (VTBL_ENTRY)&_ZN5S41C44v145Ev,
  (VTBL_ENTRY)&_ZN5S41C44v146Ev,
  (VTBL_ENTRY)&_ZN5S41C44v147Ev,
  (VTBL_ENTRY)&_ZN5S41C44v148Ev,
  (VTBL_ENTRY)&_ZN5S41C44v149Ev,
  (VTBL_ENTRY)&_ZN5S41C44v150Ev,
  (VTBL_ENTRY)&_ZN5S41C44v151Ev,
  (VTBL_ENTRY)&_ZN5S41C44v152Ev,
  (VTBL_ENTRY)&_ZN5S41C44v153Ev,
  (VTBL_ENTRY)&_ZN5S41C44v154Ev,
  (VTBL_ENTRY)&_ZN5S41C44v155Ev,
  (VTBL_ENTRY)&_ZN5S41C34v156Ev,
  (VTBL_ENTRY)&_ZN5S41C34v157Ev,
  (VTBL_ENTRY)&_ZN5S41C34v158Ev,
  (VTBL_ENTRY)&_ZN5S41C34v159Ev,
  (VTBL_ENTRY)&_ZN5S41C34v160Ev,
  (VTBL_ENTRY)&_ZN5S41C34v161Ev,
  (VTBL_ENTRY)&_ZN5S41C34v162Ev,
  (VTBL_ENTRY)&_ZN5S41C34v163Ev,
  (VTBL_ENTRY)&_ZN5S41C34v164Ev,
  (VTBL_ENTRY)&_ZN5S41C34v165Ev,
  (VTBL_ENTRY)&_ZN5S41C34v166Ev,
  (VTBL_ENTRY)&_ZN5S41C34v167Ev,
  (VTBL_ENTRY)&_ZN5S41C34v168Ev,
  (VTBL_ENTRY)&_ZN5S41C34v169Ev,
  (VTBL_ENTRY)&_ZN5S41C34v170Ev,
  (VTBL_ENTRY)&_ZN5S41C34v171Ev,
  (VTBL_ENTRY)&_ZN5S41C34v172Ev,
  (VTBL_ENTRY)&_ZN5S41C34v173Ev,
  (VTBL_ENTRY)&_ZN5S41C34v174Ev,
  (VTBL_ENTRY)&_ZN5S41C34v175Ev,
  (VTBL_ENTRY)&_ZN5S41C34v176Ev,
  (VTBL_ENTRY)&_ZN5S41C34v177Ev,
  (VTBL_ENTRY)&_ZN5S41C34v178Ev,
  (VTBL_ENTRY)&_ZN5S41C34v179Ev,
  (VTBL_ENTRY)&_ZN5S41C34v180Ev,
  (VTBL_ENTRY)&_ZN5S41C34v181Ev,
  (VTBL_ENTRY)&_ZN5S41C12v1Ev,
  (VTBL_ENTRY)&_ZN5S41C12v2Ev,
  (VTBL_ENTRY)&_ZN5S41C12v3Ev,
  (VTBL_ENTRY)&_ZN5S41C12v4Ev,
};
extern VTBL_ENTRY _ZTI5S41C1[];
extern  VTBL_ENTRY _ZTV5S41C1[];
Class_Descriptor cd_S41C1 = {  "S41C1", // class name
  bases_S41C1, 7,
  &(vtc_S41C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI5S41C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S41C1),185, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S125C6  : S1C11_nt {
  virtual void  v3(); // _ZN6S125C62v3Ev
  virtual void  v4(); // _ZN6S125C62v4Ev
  virtual void  v5(); // _ZN6S125C62v5Ev
  virtual void  v6(); // _ZN6S125C62v6Ev
  virtual void  v7(); // _ZN6S125C62v7Ev
  virtual void  v8(); // _ZN6S125C62v8Ev
  virtual void  v9(); // _ZN6S125C62v9Ev
  virtual void  v10(); // _ZN6S125C63v10Ev
  virtual void  v11(); // _ZN6S125C63v11Ev
  virtual void  v12(); // _ZN6S125C63v12Ev
  virtual void  v13(); // _ZN6S125C63v13Ev
  virtual void  v14(); // _ZN6S125C63v14Ev
  virtual void  v15(); // _ZN6S125C63v15Ev
  virtual void  v16(); // _ZN6S125C63v16Ev
  virtual void  v17(); // _ZN6S125C63v17Ev
  virtual void  v18(); // _ZN6S125C63v18Ev
  virtual void  v19(); // _ZN6S125C63v19Ev
  virtual void  v20(); // _ZN6S125C63v20Ev
  virtual void  v21(); // _ZN6S125C63v21Ev
  virtual void  v22(); // _ZN6S125C63v22Ev
  virtual void  v23(); // _ZN6S125C63v23Ev
  virtual void  v24(); // _ZN6S125C63v24Ev
  virtual void  v25(); // _ZN6S125C63v25Ev
  virtual void  v26(); // _ZN6S125C63v26Ev
  virtual void  v27(); // _ZN6S125C63v27Ev
  virtual void  v28(); // _ZN6S125C63v28Ev
  virtual void  v29(); // _ZN6S125C63v29Ev
  virtual void  v30(); // _ZN6S125C63v30Ev
  virtual void  v31(); // _ZN6S125C63v31Ev
  virtual void  v32(); // _ZN6S125C63v32Ev
  virtual void  v33(); // _ZN6S125C63v33Ev
  virtual void  v34(); // _ZN6S125C63v34Ev
  virtual void  v35(); // _ZN6S125C63v35Ev
  virtual void  v36(); // _ZN6S125C63v36Ev
  virtual void  v37(); // _ZN6S125C63v37Ev
  virtual void  v38(); // _ZN6S125C63v38Ev
  virtual void  v39(); // _ZN6S125C63v39Ev
  virtual void  v40(); // _ZN6S125C63v40Ev
  virtual void  v41(); // _ZN6S125C63v41Ev
  virtual void  v42(); // _ZN6S125C63v42Ev
  virtual void  v43(); // _ZN6S125C63v43Ev
  virtual void  v44(); // _ZN6S125C63v44Ev
  virtual void  v45(); // _ZN6S125C63v45Ev
  virtual void  v46(); // _ZN6S125C63v46Ev
  virtual void  v47(); // _ZN6S125C63v47Ev
  virtual void  v48(); // _ZN6S125C63v48Ev
  virtual void  v49(); // _ZN6S125C63v49Ev
  virtual void  v50(); // _ZN6S125C63v50Ev
  virtual void  v51(); // _ZN6S125C63v51Ev
  virtual void  v52(); // _ZN6S125C63v52Ev
  virtual void  v53(); // _ZN6S125C63v53Ev
  virtual void  v54(); // _ZN6S125C63v54Ev
  virtual void  v55(); // _ZN6S125C63v55Ev
  virtual void  v56(); // _ZN6S125C63v56Ev
  virtual void  v57(); // _ZN6S125C63v57Ev
  virtual void  v58(); // _ZN6S125C63v58Ev
  virtual void  v59(); // _ZN6S125C63v59Ev
  virtual void  v60(); // _ZN6S125C63v60Ev
  virtual void  v61(); // _ZN6S125C63v61Ev
  virtual void  v62(); // _ZN6S125C63v62Ev
  virtual void  v63(); // _ZN6S125C63v63Ev
  virtual void  v64(); // _ZN6S125C63v64Ev
  virtual void  v65(); // _ZN6S125C63v65Ev
  virtual void  v66(); // _ZN6S125C63v66Ev
  virtual void  v67(); // _ZN6S125C63v67Ev
  virtual void  v68(); // _ZN6S125C63v68Ev
  virtual void  v69(); // _ZN6S125C63v69Ev
  virtual void  v70(); // _ZN6S125C63v70Ev
  virtual void  v71(); // _ZN6S125C63v71Ev
  virtual void  v72(); // _ZN6S125C63v72Ev
  virtual void  v73(); // _ZN6S125C63v73Ev
  virtual void  v74(); // _ZN6S125C63v74Ev
  virtual void  v75(); // _ZN6S125C63v75Ev
  virtual void  v76(); // _ZN6S125C63v76Ev
  virtual void  v77(); // _ZN6S125C63v77Ev
  virtual void  v78(); // _ZN6S125C63v78Ev
  virtual void  v79(); // _ZN6S125C63v79Ev
  virtual void  v80(); // _ZN6S125C63v80Ev
  virtual void  v81(); // _ZN6S125C63v81Ev
  virtual void  v82(); // _ZN6S125C63v82Ev
  virtual void  v83(); // _ZN6S125C63v83Ev
  virtual void  v84(); // _ZN6S125C63v84Ev
  virtual void  v85(); // _ZN6S125C63v85Ev
  virtual void  v86(); // _ZN6S125C63v86Ev
  virtual void  v87(); // _ZN6S125C63v87Ev
  virtual void  v88(); // _ZN6S125C63v88Ev
  virtual void  v89(); // _ZN6S125C63v89Ev
  virtual void  v90(); // _ZN6S125C63v90Ev
  virtual void  v91(); // _ZN6S125C63v91Ev
  virtual void  v92(); // _ZN6S125C63v92Ev
  virtual void  v93(); // _ZN6S125C63v93Ev
  virtual void  v94(); // _ZN6S125C63v94Ev
  virtual void  v95(); // _ZN6S125C63v95Ev
  virtual void  v96(); // _ZN6S125C63v96Ev
  virtual void  v97(); // _ZN6S125C63v97Ev
  virtual void  v98(); // _ZN6S125C63v98Ev
  virtual void  v99(); // _ZN6S125C63v99Ev
  virtual void  v100(); // _ZN6S125C64v100Ev
  virtual void  v101(); // _ZN6S125C64v101Ev
  virtual void  v102(); // _ZN6S125C64v102Ev
  virtual void  v103(); // _ZN6S125C64v103Ev
  virtual void  v104(); // _ZN6S125C64v104Ev
  virtual void  v105(); // _ZN6S125C64v105Ev
  virtual void  v106(); // _ZN6S125C64v106Ev
  virtual void  v107(); // _ZN6S125C64v107Ev
  virtual void  v108(); // _ZN6S125C64v108Ev
  virtual void  v109(); // _ZN6S125C64v109Ev
  ~S125C6(); // tgen
  S125C6(); // tgen
};
//SIG(-1 S125C6) C1{ BC2{ vd m Fp Fi} 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 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}


void  S125C6 ::v3(){vfunc_called(this, "_ZN6S125C62v3Ev");}
void  S125C6 ::v4(){vfunc_called(this, "_ZN6S125C62v4Ev");}
void  S125C6 ::v5(){vfunc_called(this, "_ZN6S125C62v5Ev");}
void  S125C6 ::v6(){vfunc_called(this, "_ZN6S125C62v6Ev");}
void  S125C6 ::v7(){vfunc_called(this, "_ZN6S125C62v7Ev");}
void  S125C6 ::v8(){vfunc_called(this, "_ZN6S125C62v8Ev");}
void  S125C6 ::v9(){vfunc_called(this, "_ZN6S125C62v9Ev");}
void  S125C6 ::v10(){vfunc_called(this, "_ZN6S125C63v10Ev");}
void  S125C6 ::v11(){vfunc_called(this, "_ZN6S125C63v11Ev");}
void  S125C6 ::v12(){vfunc_called(this, "_ZN6S125C63v12Ev");}
void  S125C6 ::v13(){vfunc_called(this, "_ZN6S125C63v13Ev");}
void  S125C6 ::v14(){vfunc_called(this, "_ZN6S125C63v14Ev");}
void  S125C6 ::v15(){vfunc_called(this, "_ZN6S125C63v15Ev");}
void  S125C6 ::v16(){vfunc_called(this, "_ZN6S125C63v16Ev");}
void  S125C6 ::v17(){vfunc_called(this, "_ZN6S125C63v17Ev");}
void  S125C6 ::v18(){vfunc_called(this, "_ZN6S125C63v18Ev");}
void  S125C6 ::v19(){vfunc_called(this, "_ZN6S125C63v19Ev");}
void  S125C6 ::v20(){vfunc_called(this, "_ZN6S125C63v20Ev");}
void  S125C6 ::v21(){vfunc_called(this, "_ZN6S125C63v21Ev");}
void  S125C6 ::v22(){vfunc_called(this, "_ZN6S125C63v22Ev");}
void  S125C6 ::v23(){vfunc_called(this, "_ZN6S125C63v23Ev");}
void  S125C6 ::v24(){vfunc_called(this, "_ZN6S125C63v24Ev");}
void  S125C6 ::v25(){vfunc_called(this, "_ZN6S125C63v25Ev");}
void  S125C6 ::v26(){vfunc_called(this, "_ZN6S125C63v26Ev");}
void  S125C6 ::v27(){vfunc_called(this, "_ZN6S125C63v27Ev");}
void  S125C6 ::v28(){vfunc_called(this, "_ZN6S125C63v28Ev");}
void  S125C6 ::v29(){vfunc_called(this, "_ZN6S125C63v29Ev");}
void  S125C6 ::v30(){vfunc_called(this, "_ZN6S125C63v30Ev");}
void  S125C6 ::v31(){vfunc_called(this, "_ZN6S125C63v31Ev");}
void  S125C6 ::v32(){vfunc_called(this, "_ZN6S125C63v32Ev");}
void  S125C6 ::v33(){vfunc_called(this, "_ZN6S125C63v33Ev");}
void  S125C6 ::v34(){vfunc_called(this, "_ZN6S125C63v34Ev");}
void  S125C6 ::v35(){vfunc_called(this, "_ZN6S125C63v35Ev");}
void  S125C6 ::v36(){vfunc_called(this, "_ZN6S125C63v36Ev");}
void  S125C6 ::v37(){vfunc_called(this, "_ZN6S125C63v37Ev");}
void  S125C6 ::v38(){vfunc_called(this, "_ZN6S125C63v38Ev");}
void  S125C6 ::v39(){vfunc_called(this, "_ZN6S125C63v39Ev");}
void  S125C6 ::v40(){vfunc_called(this, "_ZN6S125C63v40Ev");}
void  S125C6 ::v41(){vfunc_called(this, "_ZN6S125C63v41Ev");}
void  S125C6 ::v42(){vfunc_called(this, "_ZN6S125C63v42Ev");}
void  S125C6 ::v43(){vfunc_called(this, "_ZN6S125C63v43Ev");}
void  S125C6 ::v44(){vfunc_called(this, "_ZN6S125C63v44Ev");}
void  S125C6 ::v45(){vfunc_called(this, "_ZN6S125C63v45Ev");}
void  S125C6 ::v46(){vfunc_called(this, "_ZN6S125C63v46Ev");}
void  S125C6 ::v47(){vfunc_called(this, "_ZN6S125C63v47Ev");}
void  S125C6 ::v48(){vfunc_called(this, "_ZN6S125C63v48Ev");}
void  S125C6 ::v49(){vfunc_called(this, "_ZN6S125C63v49Ev");}
void  S125C6 ::v50(){vfunc_called(this, "_ZN6S125C63v50Ev");}
void  S125C6 ::v51(){vfunc_called(this, "_ZN6S125C63v51Ev");}
void  S125C6 ::v52(){vfunc_called(this, "_ZN6S125C63v52Ev");}
void  S125C6 ::v53(){vfunc_called(this, "_ZN6S125C63v53Ev");}
void  S125C6 ::v54(){vfunc_called(this, "_ZN6S125C63v54Ev");}
void  S125C6 ::v55(){vfunc_called(this, "_ZN6S125C63v55Ev");}
void  S125C6 ::v56(){vfunc_called(this, "_ZN6S125C63v56Ev");}
void  S125C6 ::v57(){vfunc_called(this, "_ZN6S125C63v57Ev");}
void  S125C6 ::v58(){vfunc_called(this, "_ZN6S125C63v58Ev");}
void  S125C6 ::v59(){vfunc_called(this, "_ZN6S125C63v59Ev");}
void  S125C6 ::v60(){vfunc_called(this, "_ZN6S125C63v60Ev");}
void  S125C6 ::v61(){vfunc_called(this, "_ZN6S125C63v61Ev");}
void  S125C6 ::v62(){vfunc_called(this, "_ZN6S125C63v62Ev");}
void  S125C6 ::v63(){vfunc_called(this, "_ZN6S125C63v63Ev");}
void  S125C6 ::v64(){vfunc_called(this, "_ZN6S125C63v64Ev");}
void  S125C6 ::v65(){vfunc_called(this, "_ZN6S125C63v65Ev");}
void  S125C6 ::v66(){vfunc_called(this, "_ZN6S125C63v66Ev");}
void  S125C6 ::v67(){vfunc_called(this, "_ZN6S125C63v67Ev");}
void  S125C6 ::v68(){vfunc_called(this, "_ZN6S125C63v68Ev");}
void  S125C6 ::v69(){vfunc_called(this, "_ZN6S125C63v69Ev");}
void  S125C6 ::v70(){vfunc_called(this, "_ZN6S125C63v70Ev");}
void  S125C6 ::v71(){vfunc_called(this, "_ZN6S125C63v71Ev");}
void  S125C6 ::v72(){vfunc_called(this, "_ZN6S125C63v72Ev");}
void  S125C6 ::v73(){vfunc_called(this, "_ZN6S125C63v73Ev");}
void  S125C6 ::v74(){vfunc_called(this, "_ZN6S125C63v74Ev");}
void  S125C6 ::v75(){vfunc_called(this, "_ZN6S125C63v75Ev");}
void  S125C6 ::v76(){vfunc_called(this, "_ZN6S125C63v76Ev");}
void  S125C6 ::v77(){vfunc_called(this, "_ZN6S125C63v77Ev");}
void  S125C6 ::v78(){vfunc_called(this, "_ZN6S125C63v78Ev");}
void  S125C6 ::v79(){vfunc_called(this, "_ZN6S125C63v79Ev");}
void  S125C6 ::v80(){vfunc_called(this, "_ZN6S125C63v80Ev");}
void  S125C6 ::v81(){vfunc_called(this, "_ZN6S125C63v81Ev");}
void  S125C6 ::v82(){vfunc_called(this, "_ZN6S125C63v82Ev");}
void  S125C6 ::v83(){vfunc_called(this, "_ZN6S125C63v83Ev");}
void  S125C6 ::v84(){vfunc_called(this, "_ZN6S125C63v84Ev");}
void  S125C6 ::v85(){vfunc_called(this, "_ZN6S125C63v85Ev");}
void  S125C6 ::v86(){vfunc_called(this, "_ZN6S125C63v86Ev");}
void  S125C6 ::v87(){vfunc_called(this, "_ZN6S125C63v87Ev");}
void  S125C6 ::v88(){vfunc_called(this, "_ZN6S125C63v88Ev");}
void  S125C6 ::v89(){vfunc_called(this, "_ZN6S125C63v89Ev");}
void  S125C6 ::v90(){vfunc_called(this, "_ZN6S125C63v90Ev");}
void  S125C6 ::v91(){vfunc_called(this, "_ZN6S125C63v91Ev");}
void  S125C6 ::v92(){vfunc_called(this, "_ZN6S125C63v92Ev");}
void  S125C6 ::v93(){vfunc_called(this, "_ZN6S125C63v93Ev");}
void  S125C6 ::v94(){vfunc_called(this, "_ZN6S125C63v94Ev");}
void  S125C6 ::v95(){vfunc_called(this, "_ZN6S125C63v95Ev");}
void  S125C6 ::v96(){vfunc_called(this, "_ZN6S125C63v96Ev");}
void  S125C6 ::v97(){vfunc_called(this, "_ZN6S125C63v97Ev");}
void  S125C6 ::v98(){vfunc_called(this, "_ZN6S125C63v98Ev");}
void  S125C6 ::v99(){vfunc_called(this, "_ZN6S125C63v99Ev");}
void  S125C6 ::v100(){vfunc_called(this, "_ZN6S125C64v100Ev");}
void  S125C6 ::v101(){vfunc_called(this, "_ZN6S125C64v101Ev");}
void  S125C6 ::v102(){vfunc_called(this, "_ZN6S125C64v102Ev");}
void  S125C6 ::v103(){vfunc_called(this, "_ZN6S125C64v103Ev");}
void  S125C6 ::v104(){vfunc_called(this, "_ZN6S125C64v104Ev");}
void  S125C6 ::v105(){vfunc_called(this, "_ZN6S125C64v105Ev");}
void  S125C6 ::v106(){vfunc_called(this, "_ZN6S125C64v106Ev");}
void  S125C6 ::v107(){vfunc_called(this, "_ZN6S125C64v107Ev");}
void  S125C6 ::v108(){vfunc_called(this, "_ZN6S125C64v108Ev");}
void  S125C6 ::v109(){vfunc_called(this, "_ZN6S125C64v109Ev");}
S125C6 ::~S125C6(){ note_dtor("S125C6", this);} // tgen
S125C6 ::S125C6(){ note_ctor("S125C6", this);} // tgen

static void Test_S125C6()
{
  extern Class_Descriptor cd_S125C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S125C6, buf);
    S125C6 *dp, &lv = *(dp=new (buf) S125C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S125C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S125C6)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S125C6");
    test_class_info(&lv, &cd_S125C6);
    dp->~S125C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS125C6(Test_S125C6, "S125C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S125C6C1Ev();
extern void _ZN6S125C6D1Ev();
Name_Map name_map_S125C6[] = {
  NSPAIR(_ZN6S125C6C1Ev),
  NSPAIR(_ZN6S125C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S125C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI6S125C6[];
extern void _ZN6S125C6D1Ev();
extern void _ZN6S125C6D0Ev();
extern void _ZN6S125C62v3Ev();
extern void _ZN6S125C62v4Ev();
extern void _ZN6S125C62v5Ev();
extern void _ZN6S125C62v6Ev();
extern void _ZN6S125C62v7Ev();
extern void _ZN6S125C62v8Ev();
extern void _ZN6S125C62v9Ev();
extern void _ZN6S125C63v10Ev();
extern void _ZN6S125C63v11Ev();
extern void _ZN6S125C63v12Ev();
extern void _ZN6S125C63v13Ev();
extern void _ZN6S125C63v14Ev();
extern void _ZN6S125C63v15Ev();
extern void _ZN6S125C63v16Ev();
extern void _ZN6S125C63v17Ev();
extern void _ZN6S125C63v18Ev();
extern void _ZN6S125C63v19Ev();
extern void _ZN6S125C63v20Ev();
extern void _ZN6S125C63v21Ev();
extern void _ZN6S125C63v22Ev();
extern void _ZN6S125C63v23Ev();
extern void _ZN6S125C63v24Ev();
extern void _ZN6S125C63v25Ev();
extern void _ZN6S125C63v26Ev();
extern void _ZN6S125C63v27Ev();
extern void _ZN6S125C63v28Ev();
extern void _ZN6S125C63v29Ev();
extern void _ZN6S125C63v30Ev();
extern void _ZN6S125C63v31Ev();
extern void _ZN6S125C63v32Ev();
extern void _ZN6S125C63v33Ev();
extern void _ZN6S125C63v34Ev();
extern void _ZN6S125C63v35Ev();
extern void _ZN6S125C63v36Ev();
extern void _ZN6S125C63v37Ev();
extern void _ZN6S125C63v38Ev();
extern void _ZN6S125C63v39Ev();
extern void _ZN6S125C63v40Ev();
extern void _ZN6S125C63v41Ev();
extern void _ZN6S125C63v42Ev();
extern void _ZN6S125C63v43Ev();
extern void _ZN6S125C63v44Ev();
extern void _ZN6S125C63v45Ev();
extern void _ZN6S125C63v46Ev();
extern void _ZN6S125C63v47Ev();
extern void _ZN6S125C63v48Ev();
extern void _ZN6S125C63v49Ev();
extern void _ZN6S125C63v50Ev();
extern void _ZN6S125C63v51Ev();
extern void _ZN6S125C63v52Ev();
extern void _ZN6S125C63v53Ev();
extern void _ZN6S125C63v54Ev();
extern void _ZN6S125C63v55Ev();
extern void _ZN6S125C63v56Ev();
extern void _ZN6S125C63v57Ev();
extern void _ZN6S125C63v58Ev();
extern void _ZN6S125C63v59Ev();
extern void _ZN6S125C63v60Ev();
extern void _ZN6S125C63v61Ev();
extern void _ZN6S125C63v62Ev();
extern void _ZN6S125C63v63Ev();
extern void _ZN6S125C63v64Ev();
extern void _ZN6S125C63v65Ev();
extern void _ZN6S125C63v66Ev();
extern void _ZN6S125C63v67Ev();
extern void _ZN6S125C63v68Ev();
extern void _ZN6S125C63v69Ev();
extern void _ZN6S125C63v70Ev();
extern void _ZN6S125C63v71Ev();
extern void _ZN6S125C63v72Ev();
extern void _ZN6S125C63v73Ev();
extern void _ZN6S125C63v74Ev();
extern void _ZN6S125C63v75Ev();
extern void _ZN6S125C63v76Ev();
extern void _ZN6S125C63v77Ev();
extern void _ZN6S125C63v78Ev();
extern void _ZN6S125C63v79Ev();
extern void _ZN6S125C63v80Ev();
extern void _ZN6S125C63v81Ev();
extern void _ZN6S125C63v82Ev();
extern void _ZN6S125C63v83Ev();
extern void _ZN6S125C63v84Ev();
extern void _ZN6S125C63v85Ev();
extern void _ZN6S125C63v86Ev();
extern void _ZN6S125C63v87Ev();
extern void _ZN6S125C63v88Ev();
extern void _ZN6S125C63v89Ev();
extern void _ZN6S125C63v90Ev();
extern void _ZN6S125C63v91Ev();
extern void _ZN6S125C63v92Ev();
extern void _ZN6S125C63v93Ev();
extern void _ZN6S125C63v94Ev();
extern void _ZN6S125C63v95Ev();
extern void _ZN6S125C63v96Ev();
extern void _ZN6S125C63v97Ev();
extern void _ZN6S125C63v98Ev();
extern void _ZN6S125C63v99Ev();
extern void _ZN6S125C64v100Ev();
extern void _ZN6S125C64v101Ev();
extern void _ZN6S125C64v102Ev();
extern void _ZN6S125C64v103Ev();
extern void _ZN6S125C64v104Ev();
extern void _ZN6S125C64v105Ev();
extern void _ZN6S125C64v106Ev();
extern void _ZN6S125C64v107Ev();
extern void _ZN6S125C64v108Ev();
extern void _ZN6S125C64v109Ev();
static  VTBL_ENTRY vtc_S125C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S125C6[0]),
  (VTBL_ENTRY)&_ZN6S125C6D1Ev,
  (VTBL_ENTRY)&_ZN6S125C6D0Ev,
  (VTBL_ENTRY)&_ZN6S125C62v3Ev,
  (VTBL_ENTRY)&_ZN6S125C62v4Ev,
  (VTBL_ENTRY)&_ZN6S125C62v5Ev,
  (VTBL_ENTRY)&_ZN6S125C62v6Ev,
  (VTBL_ENTRY)&_ZN6S125C62v7Ev,
  (VTBL_ENTRY)&_ZN6S125C62v8Ev,
  (VTBL_ENTRY)&_ZN6S125C62v9Ev,
  (VTBL_ENTRY)&_ZN6S125C63v10Ev,
  (VTBL_ENTRY)&_ZN6S125C63v11Ev,
  (VTBL_ENTRY)&_ZN6S125C63v12Ev,
  (VTBL_ENTRY)&_ZN6S125C63v13Ev,
  (VTBL_ENTRY)&_ZN6S125C63v14Ev,
  (VTBL_ENTRY)&_ZN6S125C63v15Ev,
  (VTBL_ENTRY)&_ZN6S125C63v16Ev,
  (VTBL_ENTRY)&_ZN6S125C63v17Ev,
  (VTBL_ENTRY)&_ZN6S125C63v18Ev,
  (VTBL_ENTRY)&_ZN6S125C63v19Ev,
  (VTBL_ENTRY)&_ZN6S125C63v20Ev,
  (VTBL_ENTRY)&_ZN6S125C63v21Ev,
  (VTBL_ENTRY)&_ZN6S125C63v22Ev,
  (VTBL_ENTRY)&_ZN6S125C63v23Ev,
  (VTBL_ENTRY)&_ZN6S125C63v24Ev,
  (VTBL_ENTRY)&_ZN6S125C63v25Ev,
  (VTBL_ENTRY)&_ZN6S125C63v26Ev,
  (VTBL_ENTRY)&_ZN6S125C63v27Ev,
  (VTBL_ENTRY)&_ZN6S125C63v28Ev,
  (VTBL_ENTRY)&_ZN6S125C63v29Ev,
  (VTBL_ENTRY)&_ZN6S125C63v30Ev,
  (VTBL_ENTRY)&_ZN6S125C63v31Ev,
  (VTBL_ENTRY)&_ZN6S125C63v32Ev,
  (VTBL_ENTRY)&_ZN6S125C63v33Ev,
  (VTBL_ENTRY)&_ZN6S125C63v34Ev,
  (VTBL_ENTRY)&_ZN6S125C63v35Ev,
  (VTBL_ENTRY)&_ZN6S125C63v36Ev,
  (VTBL_ENTRY)&_ZN6S125C63v37Ev,
  (VTBL_ENTRY)&_ZN6S125C63v38Ev,
  (VTBL_ENTRY)&_ZN6S125C63v39Ev,
  (VTBL_ENTRY)&_ZN6S125C63v40Ev,
  (VTBL_ENTRY)&_ZN6S125C63v41Ev,
  (VTBL_ENTRY)&_ZN6S125C63v42Ev,
  (VTBL_ENTRY)&_ZN6S125C63v43Ev,
  (VTBL_ENTRY)&_ZN6S125C63v44Ev,
  (VTBL_ENTRY)&_ZN6S125C63v45Ev,
  (VTBL_ENTRY)&_ZN6S125C63v46Ev,
  (VTBL_ENTRY)&_ZN6S125C63v47Ev,
  (VTBL_ENTRY)&_ZN6S125C63v48Ev,
  (VTBL_ENTRY)&_ZN6S125C63v49Ev,
  (VTBL_ENTRY)&_ZN6S125C63v50Ev,
  (VTBL_ENTRY)&_ZN6S125C63v51Ev,
  (VTBL_ENTRY)&_ZN6S125C63v52Ev,
  (VTBL_ENTRY)&_ZN6S125C63v53Ev,
  (VTBL_ENTRY)&_ZN6S125C63v54Ev,
  (VTBL_ENTRY)&_ZN6S125C63v55Ev,
  (VTBL_ENTRY)&_ZN6S125C63v56Ev,
  (VTBL_ENTRY)&_ZN6S125C63v57Ev,
  (VTBL_ENTRY)&_ZN6S125C63v58Ev,
  (VTBL_ENTRY)&_ZN6S125C63v59Ev,
  (VTBL_ENTRY)&_ZN6S125C63v60Ev,
  (VTBL_ENTRY)&_ZN6S125C63v61Ev,
  (VTBL_ENTRY)&_ZN6S125C63v62Ev,
  (VTBL_ENTRY)&_ZN6S125C63v63Ev,
  (VTBL_ENTRY)&_ZN6S125C63v64Ev,
  (VTBL_ENTRY)&_ZN6S125C63v65Ev,
  (VTBL_ENTRY)&_ZN6S125C63v66Ev,
  (VTBL_ENTRY)&_ZN6S125C63v67Ev,
  (VTBL_ENTRY)&_ZN6S125C63v68Ev,
  (VTBL_ENTRY)&_ZN6S125C63v69Ev,
  (VTBL_ENTRY)&_ZN6S125C63v70Ev,
  (VTBL_ENTRY)&_ZN6S125C63v71Ev,
  (VTBL_ENTRY)&_ZN6S125C63v72Ev,
  (VTBL_ENTRY)&_ZN6S125C63v73Ev,
  (VTBL_ENTRY)&_ZN6S125C63v74Ev,
  (VTBL_ENTRY)&_ZN6S125C63v75Ev,
  (VTBL_ENTRY)&_ZN6S125C63v76Ev,
  (VTBL_ENTRY)&_ZN6S125C63v77Ev,
  (VTBL_ENTRY)&_ZN6S125C63v78Ev,
  (VTBL_ENTRY)&_ZN6S125C63v79Ev,
  (VTBL_ENTRY)&_ZN6S125C63v80Ev,
  (VTBL_ENTRY)&_ZN6S125C63v81Ev,
  (VTBL_ENTRY)&_ZN6S125C63v82Ev,
  (VTBL_ENTRY)&_ZN6S125C63v83Ev,
  (VTBL_ENTRY)&_ZN6S125C63v84Ev,
  (VTBL_ENTRY)&_ZN6S125C63v85Ev,
  (VTBL_ENTRY)&_ZN6S125C63v86Ev,
  (VTBL_ENTRY)&_ZN6S125C63v87Ev,
  (VTBL_ENTRY)&_ZN6S125C63v88Ev,
  (VTBL_ENTRY)&_ZN6S125C63v89Ev,
  (VTBL_ENTRY)&_ZN6S125C63v90Ev,
  (VTBL_ENTRY)&_ZN6S125C63v91Ev,
  (VTBL_ENTRY)&_ZN6S125C63v92Ev,
  (VTBL_ENTRY)&_ZN6S125C63v93Ev,
  (VTBL_ENTRY)&_ZN6S125C63v94Ev,
  (VTBL_ENTRY)&_ZN6S125C63v95Ev,
  (VTBL_ENTRY)&_ZN6S125C63v96Ev,
  (VTBL_ENTRY)&_ZN6S125C63v97Ev,
  (VTBL_ENTRY)&_ZN6S125C63v98Ev,
  (VTBL_ENTRY)&_ZN6S125C63v99Ev,
  (VTBL_ENTRY)&_ZN6S125C64v100Ev,
  (VTBL_ENTRY)&_ZN6S125C64v101Ev,
  (VTBL_ENTRY)&_ZN6S125C64v102Ev,
  (VTBL_ENTRY)&_ZN6S125C64v103Ev,
  (VTBL_ENTRY)&_ZN6S125C64v104Ev,
  (VTBL_ENTRY)&_ZN6S125C64v105Ev,
  (VTBL_ENTRY)&_ZN6S125C64v106Ev,
  (VTBL_ENTRY)&_ZN6S125C64v107Ev,
  (VTBL_ENTRY)&_ZN6S125C64v108Ev,
  (VTBL_ENTRY)&_ZN6S125C64v109Ev,
};
extern VTBL_ENTRY _ZTI6S125C6[];
extern  VTBL_ENTRY _ZTV6S125C6[];
Class_Descriptor cd_S125C6 = {  "S125C6", // class name
  bases_S125C6, 1,
  &(vtc_S125C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S125C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S125C6),111, //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  S125C5  : S125C6 {
  ~S125C5(); // tgen
  S125C5(); // tgen
};
//SIG(-1 S125C5) C1{ BC2{ BC3{ vd m Fp Fi} 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 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}}


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

static void Test_S125C5()
{
  extern Class_Descriptor cd_S125C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S125C5, buf);
    S125C5 *dp, &lv = *(dp=new (buf) S125C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S125C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S125C5)");
    check_base_class_offset(lv, (S1C11_nt*)(S125C6*), 0, "S125C5");
    check_base_class_offset(lv, (S125C6*), 0, "S125C5");
    test_class_info(&lv, &cd_S125C5);
    dp->~S125C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS125C5(Test_S125C5, "S125C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S125C5C1Ev();
extern void _ZN6S125C5D1Ev();
Name_Map name_map_S125C5[] = {
  NSPAIR(_ZN6S125C5C1Ev),
  NSPAIR(_ZN6S125C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S125C6;
extern VTBL_ENTRY _ZTI6S125C6[];
extern  VTBL_ENTRY _ZTV6S125C6[];
static Base_Class bases_S125C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S125C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S125C5[];
extern void _ZN6S125C5D1Ev();
extern void _ZN6S125C5D0Ev();
extern void _ZN6S125C62v3Ev();
extern void _ZN6S125C62v4Ev();
extern void _ZN6S125C62v5Ev();
extern void _ZN6S125C62v6Ev();
extern void _ZN6S125C62v7Ev();
extern void _ZN6S125C62v8Ev();
extern void _ZN6S125C62v9Ev();
extern void _ZN6S125C63v10Ev();
extern void _ZN6S125C63v11Ev();
extern void _ZN6S125C63v12Ev();
extern void _ZN6S125C63v13Ev();
extern void _ZN6S125C63v14Ev();
extern void _ZN6S125C63v15Ev();
extern void _ZN6S125C63v16Ev();
extern void _ZN6S125C63v17Ev();
extern void _ZN6S125C63v18Ev();
extern void _ZN6S125C63v19Ev();
extern void _ZN6S125C63v20Ev();
extern void _ZN6S125C63v21Ev();
extern void _ZN6S125C63v22Ev();
extern void _ZN6S125C63v23Ev();
extern void _ZN6S125C63v24Ev();
extern void _ZN6S125C63v25Ev();
extern void _ZN6S125C63v26Ev();
extern void _ZN6S125C63v27Ev();
extern void _ZN6S125C63v28Ev();
extern void _ZN6S125C63v29Ev();
extern void _ZN6S125C63v30Ev();
extern void _ZN6S125C63v31Ev();
extern void _ZN6S125C63v32Ev();
extern void _ZN6S125C63v33Ev();
extern void _ZN6S125C63v34Ev();
extern void _ZN6S125C63v35Ev();
extern void _ZN6S125C63v36Ev();
extern void _ZN6S125C63v37Ev();
extern void _ZN6S125C63v38Ev();
extern void _ZN6S125C63v39Ev();
extern void _ZN6S125C63v40Ev();
extern void _ZN6S125C63v41Ev();
extern void _ZN6S125C63v42Ev();
extern void _ZN6S125C63v43Ev();
extern void _ZN6S125C63v44Ev();
extern void _ZN6S125C63v45Ev();
extern void _ZN6S125C63v46Ev();
extern void _ZN6S125C63v47Ev();
extern void _ZN6S125C63v48Ev();
extern void _ZN6S125C63v49Ev();
extern void _ZN6S125C63v50Ev();
extern void _ZN6S125C63v51Ev();
extern void _ZN6S125C63v52Ev();
extern void _ZN6S125C63v53Ev();
extern void _ZN6S125C63v54Ev();
extern void _ZN6S125C63v55Ev();
extern void _ZN6S125C63v56Ev();
extern void _ZN6S125C63v57Ev();
extern void _ZN6S125C63v58Ev();
extern void _ZN6S125C63v59Ev();
extern void _ZN6S125C63v60Ev();
extern void _ZN6S125C63v61Ev();
extern void _ZN6S125C63v62Ev();
extern void _ZN6S125C63v63Ev();
extern void _ZN6S125C63v64Ev();
extern void _ZN6S125C63v65Ev();
extern void _ZN6S125C63v66Ev();
extern void _ZN6S125C63v67Ev();
extern void _ZN6S125C63v68Ev();
extern void _ZN6S125C63v69Ev();
extern void _ZN6S125C63v70Ev();
extern void _ZN6S125C63v71Ev();
extern void _ZN6S125C63v72Ev();
extern void _ZN6S125C63v73Ev();
extern void _ZN6S125C63v74Ev();
extern void _ZN6S125C63v75Ev();
extern void _ZN6S125C63v76Ev();
extern void _ZN6S125C63v77Ev();
extern void _ZN6S125C63v78Ev();
extern void _ZN6S125C63v79Ev();
extern void _ZN6S125C63v80Ev();
extern void _ZN6S125C63v81Ev();
extern void _ZN6S125C63v82Ev();
extern void _ZN6S125C63v83Ev();
extern void _ZN6S125C63v84Ev();
extern void _ZN6S125C63v85Ev();
extern void _ZN6S125C63v86Ev();
extern void _ZN6S125C63v87Ev();
extern void _ZN6S125C63v88Ev();
extern void _ZN6S125C63v89Ev();
extern void _ZN6S125C63v90Ev();
extern void _ZN6S125C63v91Ev();
extern void _ZN6S125C63v92Ev();
extern void _ZN6S125C63v93Ev();
extern void _ZN6S125C63v94Ev();
extern void _ZN6S125C63v95Ev();
extern void _ZN6S125C63v96Ev();
extern void _ZN6S125C63v97Ev();
extern void _ZN6S125C63v98Ev();
extern void _ZN6S125C63v99Ev();
extern void _ZN6S125C64v100Ev();
extern void _ZN6S125C64v101Ev();
extern void _ZN6S125C64v102Ev();
extern void _ZN6S125C64v103Ev();
extern void _ZN6S125C64v104Ev();
extern void _ZN6S125C64v105Ev();
extern void _ZN6S125C64v106Ev();
extern void _ZN6S125C64v107Ev();
extern void _ZN6S125C64v108Ev();
extern void _ZN6S125C64v109Ev();
static  VTBL_ENTRY vtc_S125C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S125C5[0]),
  (VTBL_ENTRY)&_ZN6S125C5D1Ev,
  (VTBL_ENTRY)&_ZN6S125C5D0Ev,
  (VTBL_ENTRY)&_ZN6S125C62v3Ev,
  (VTBL_ENTRY)&_ZN6S125C62v4Ev,
  (VTBL_ENTRY)&_ZN6S125C62v5Ev,
  (VTBL_ENTRY)&_ZN6S125C62v6Ev,
  (VTBL_ENTRY)&_ZN6S125C62v7Ev,
  (VTBL_ENTRY)&_ZN6S125C62v8Ev,
  (VTBL_ENTRY)&_ZN6S125C62v9Ev,
  (VTBL_ENTRY)&_ZN6S125C63v10Ev,
  (VTBL_ENTRY)&_ZN6S125C63v11Ev,
  (VTBL_ENTRY)&_ZN6S125C63v12Ev,
  (VTBL_ENTRY)&_ZN6S125C63v13Ev,
  (VTBL_ENTRY)&_ZN6S125C63v14Ev,
  (VTBL_ENTRY)&_ZN6S125C63v15Ev,
  (VTBL_ENTRY)&_ZN6S125C63v16Ev,
  (VTBL_ENTRY)&_ZN6S125C63v17Ev,
  (VTBL_ENTRY)&_ZN6S125C63v18Ev,
  (VTBL_ENTRY)&_ZN6S125C63v19Ev,
  (VTBL_ENTRY)&_ZN6S125C63v20Ev,
  (VTBL_ENTRY)&_ZN6S125C63v21Ev,
  (VTBL_ENTRY)&_ZN6S125C63v22Ev,
  (VTBL_ENTRY)&_ZN6S125C63v23Ev,
  (VTBL_ENTRY)&_ZN6S125C63v24Ev,
  (VTBL_ENTRY)&_ZN6S125C63v25Ev,
  (VTBL_ENTRY)&_ZN6S125C63v26Ev,
  (VTBL_ENTRY)&_ZN6S125C63v27Ev,
  (VTBL_ENTRY)&_ZN6S125C63v28Ev,
  (VTBL_ENTRY)&_ZN6S125C63v29Ev,
  (VTBL_ENTRY)&_ZN6S125C63v30Ev,
  (VTBL_ENTRY)&_ZN6S125C63v31Ev,
  (VTBL_ENTRY)&_ZN6S125C63v32Ev,
  (VTBL_ENTRY)&_ZN6S125C63v33Ev,
  (VTBL_ENTRY)&_ZN6S125C63v34Ev,
  (VTBL_ENTRY)&_ZN6S125C63v35Ev,
  (VTBL_ENTRY)&_ZN6S125C63v36Ev,
  (VTBL_ENTRY)&_ZN6S125C63v37Ev,
  (VTBL_ENTRY)&_ZN6S125C63v38Ev,
  (VTBL_ENTRY)&_ZN6S125C63v39Ev,
  (VTBL_ENTRY)&_ZN6S125C63v40Ev,
  (VTBL_ENTRY)&_ZN6S125C63v41Ev,
  (VTBL_ENTRY)&_ZN6S125C63v42Ev,
  (VTBL_ENTRY)&_ZN6S125C63v43Ev,
  (VTBL_ENTRY)&_ZN6S125C63v44Ev,
  (VTBL_ENTRY)&_ZN6S125C63v45Ev,
  (VTBL_ENTRY)&_ZN6S125C63v46Ev,
  (VTBL_ENTRY)&_ZN6S125C63v47Ev,
  (VTBL_ENTRY)&_ZN6S125C63v48Ev,
  (VTBL_ENTRY)&_ZN6S125C63v49Ev,
  (VTBL_ENTRY)&_ZN6S125C63v50Ev,
  (VTBL_ENTRY)&_ZN6S125C63v51Ev,
  (VTBL_ENTRY)&_ZN6S125C63v52Ev,
  (VTBL_ENTRY)&_ZN6S125C63v53Ev,
  (VTBL_ENTRY)&_ZN6S125C63v54Ev,
  (VTBL_ENTRY)&_ZN6S125C63v55Ev,
  (VTBL_ENTRY)&_ZN6S125C63v56Ev,
  (VTBL_ENTRY)&_ZN6S125C63v57Ev,
  (VTBL_ENTRY)&_ZN6S125C63v58Ev,
  (VTBL_ENTRY)&_ZN6S125C63v59Ev,
  (VTBL_ENTRY)&_ZN6S125C63v60Ev,
  (VTBL_ENTRY)&_ZN6S125C63v61Ev,
  (VTBL_ENTRY)&_ZN6S125C63v62Ev,
  (VTBL_ENTRY)&_ZN6S125C63v63Ev,
  (VTBL_ENTRY)&_ZN6S125C63v64Ev,
  (VTBL_ENTRY)&_ZN6S125C63v65Ev,
  (VTBL_ENTRY)&_ZN6S125C63v66Ev,
  (VTBL_ENTRY)&_ZN6S125C63v67Ev,
  (VTBL_ENTRY)&_ZN6S125C63v68Ev,
  (VTBL_ENTRY)&_ZN6S125C63v69Ev,
  (VTBL_ENTRY)&_ZN6S125C63v70Ev,
  (VTBL_ENTRY)&_ZN6S125C63v71Ev,
  (VTBL_ENTRY)&_ZN6S125C63v72Ev,
  (VTBL_ENTRY)&_ZN6S125C63v73Ev,
  (VTBL_ENTRY)&_ZN6S125C63v74Ev,
  (VTBL_ENTRY)&_ZN6S125C63v75Ev,
  (VTBL_ENTRY)&_ZN6S125C63v76Ev,
  (VTBL_ENTRY)&_ZN6S125C63v77Ev,
  (VTBL_ENTRY)&_ZN6S125C63v78Ev,
  (VTBL_ENTRY)&_ZN6S125C63v79Ev,
  (VTBL_ENTRY)&_ZN6S125C63v80Ev,
  (VTBL_ENTRY)&_ZN6S125C63v81Ev,
  (VTBL_ENTRY)&_ZN6S125C63v82Ev,
  (VTBL_ENTRY)&_ZN6S125C63v83Ev,
  (VTBL_ENTRY)&_ZN6S125C63v84Ev,
  (VTBL_ENTRY)&_ZN6S125C63v85Ev,
  (VTBL_ENTRY)&_ZN6S125C63v86Ev,
  (VTBL_ENTRY)&_ZN6S125C63v87Ev,
  (VTBL_ENTRY)&_ZN6S125C63v88Ev,
  (VTBL_ENTRY)&_ZN6S125C63v89Ev,
  (VTBL_ENTRY)&_ZN6S125C63v90Ev,
  (VTBL_ENTRY)&_ZN6S125C63v91Ev,
  (VTBL_ENTRY)&_ZN6S125C63v92Ev,
  (VTBL_ENTRY)&_ZN6S125C63v93Ev,
  (VTBL_ENTRY)&_ZN6S125C63v94Ev,
  (VTBL_ENTRY)&_ZN6S125C63v95Ev,
  (VTBL_ENTRY)&_ZN6S125C63v96Ev,
  (VTBL_ENTRY)&_ZN6S125C63v97Ev,
  (VTBL_ENTRY)&_ZN6S125C63v98Ev,
  (VTBL_ENTRY)&_ZN6S125C63v99Ev,
  (VTBL_ENTRY)&_ZN6S125C64v100Ev,
  (VTBL_ENTRY)&_ZN6S125C64v101Ev,
  (VTBL_ENTRY)&_ZN6S125C64v102Ev,
  (VTBL_ENTRY)&_ZN6S125C64v103Ev,
  (VTBL_ENTRY)&_ZN6S125C64v104Ev,
  (VTBL_ENTRY)&_ZN6S125C64v105Ev,
  (VTBL_ENTRY)&_ZN6S125C64v106Ev,
  (VTBL_ENTRY)&_ZN6S125C64v107Ev,
  (VTBL_ENTRY)&_ZN6S125C64v108Ev,
  (VTBL_ENTRY)&_ZN6S125C64v109Ev,
};
extern VTBL_ENTRY _ZTI6S125C5[];
extern  VTBL_ENTRY _ZTV6S125C5[];
Class_Descriptor cd_S125C5 = {  "S125C5", // class name
  bases_S125C5, 2,
  &(vtc_S125C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S125C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S125C5),111, //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  S125C4  : S125C5 {
  virtual void  v110(); // _ZN6S125C44v110Ev
  virtual void  v111(); // _ZN6S125C44v111Ev
  virtual void  v112(); // _ZN6S125C44v112Ev
  virtual void  v113(); // _ZN6S125C44v113Ev
  virtual void  v114(); // _ZN6S125C44v114Ev
  virtual void  v115(); // _ZN6S125C44v115Ev
  virtual void  v116(); // _ZN6S125C44v116Ev
  virtual void  v117(); // _ZN6S125C44v117Ev
  virtual void  v118(); // _ZN6S125C44v118Ev
  virtual void  v119(); // _ZN6S125C44v119Ev
  virtual void  v120(); // _ZN6S125C44v120Ev
  virtual void  v121(); // _ZN6S125C44v121Ev
  virtual void  v122(); // _ZN6S125C44v122Ev
  virtual void  v123(); // _ZN6S125C44v123Ev
  virtual void  v124(); // _ZN6S125C44v124Ev
  virtual void  v125(); // _ZN6S125C44v125Ev
  virtual void  v126(); // _ZN6S125C44v126Ev
  virtual void  v127(); // _ZN6S125C44v127Ev
  virtual void  v128(); // _ZN6S125C44v128Ev
  virtual void  v129(); // _ZN6S125C44v129Ev
  virtual void  v130(); // _ZN6S125C44v130Ev
  virtual void  v131(); // _ZN6S125C44v131Ev
  virtual void  v132(); // _ZN6S125C44v132Ev
  virtual void  v133(); // _ZN6S125C44v133Ev
  virtual void  v134(); // _ZN6S125C44v134Ev
  virtual void  v135(); // _ZN6S125C44v135Ev
  ~S125C4(); // tgen
  S125C4(); // tgen
};
//SIG(-1 S125C4) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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 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}} 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}


void  S125C4 ::v110(){vfunc_called(this, "_ZN6S125C44v110Ev");}
void  S125C4 ::v111(){vfunc_called(this, "_ZN6S125C44v111Ev");}
void  S125C4 ::v112(){vfunc_called(this, "_ZN6S125C44v112Ev");}
void  S125C4 ::v113(){vfunc_called(this, "_ZN6S125C44v113Ev");}
void  S125C4 ::v114(){vfunc_called(this, "_ZN6S125C44v114Ev");}
void  S125C4 ::v115(){vfunc_called(this, "_ZN6S125C44v115Ev");}
void  S125C4 ::v116(){vfunc_called(this, "_ZN6S125C44v116Ev");}
void  S125C4 ::v117(){vfunc_called(this, "_ZN6S125C44v117Ev");}
void  S125C4 ::v118(){vfunc_called(this, "_ZN6S125C44v118Ev");}
void  S125C4 ::v119(){vfunc_called(this, "_ZN6S125C44v119Ev");}
void  S125C4 ::v120(){vfunc_called(this, "_ZN6S125C44v120Ev");}
void  S125C4 ::v121(){vfunc_called(this, "_ZN6S125C44v121Ev");}
void  S125C4 ::v122(){vfunc_called(this, "_ZN6S125C44v122Ev");}
void  S125C4 ::v123(){vfunc_called(this, "_ZN6S125C44v123Ev");}
void  S125C4 ::v124(){vfunc_called(this, "_ZN6S125C44v124Ev");}
void  S125C4 ::v125(){vfunc_called(this, "_ZN6S125C44v125Ev");}
void  S125C4 ::v126(){vfunc_called(this, "_ZN6S125C44v126Ev");}
void  S125C4 ::v127(){vfunc_called(this, "_ZN6S125C44v127Ev");}
void  S125C4 ::v128(){vfunc_called(this, "_ZN6S125C44v128Ev");}
void  S125C4 ::v129(){vfunc_called(this, "_ZN6S125C44v129Ev");}
void  S125C4 ::v130(){vfunc_called(this, "_ZN6S125C44v130Ev");}
void  S125C4 ::v131(){vfunc_called(this, "_ZN6S125C44v131Ev");}
void  S125C4 ::v132(){vfunc_called(this, "_ZN6S125C44v132Ev");}
void  S125C4 ::v133(){vfunc_called(this, "_ZN6S125C44v133Ev");}
void  S125C4 ::v134(){vfunc_called(this, "_ZN6S125C44v134Ev");}
void  S125C4 ::v135(){vfunc_called(this, "_ZN6S125C44v135Ev");}
S125C4 ::~S125C4(){ note_dtor("S125C4", this);} // tgen
S125C4 ::S125C4(){ note_ctor("S125C4", this);} // tgen

static void Test_S125C4()
{
  extern Class_Descriptor cd_S125C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S125C4, buf);
    S125C4 *dp, &lv = *(dp=new (buf) S125C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S125C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S125C4)");
    check_base_class_offset(lv, (S1C11_nt*)(S125C6*)(S125C5*), 0, "S125C4");
    check_base_class_offset(lv, (S125C6*)(S125C5*), 0, "S125C4");
    check_base_class_offset(lv, (S125C5*), 0, "S125C4");
    test_class_info(&lv, &cd_S125C4);
    dp->~S125C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS125C4(Test_S125C4, "S125C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S125C4C1Ev();
extern void _ZN6S125C4D1Ev();
Name_Map name_map_S125C4[] = {
  NSPAIR(_ZN6S125C4C1Ev),
  NSPAIR(_ZN6S125C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S125C6;
extern VTBL_ENTRY _ZTI6S125C6[];
extern  VTBL_ENTRY _ZTV6S125C6[];
extern Class_Descriptor cd_S125C5;
extern VTBL_ENTRY _ZTI6S125C5[];
extern  VTBL_ENTRY _ZTV6S125C5[];
static Base_Class bases_S125C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S125C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S125C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S125C4[];
extern void _ZN6S125C4D1Ev();
extern void _ZN6S125C4D0Ev();
extern void _ZN6S125C62v3Ev();
extern void _ZN6S125C62v4Ev();
extern void _ZN6S125C62v5Ev();
extern void _ZN6S125C62v6Ev();
extern void _ZN6S125C62v7Ev();
extern void _ZN6S125C62v8Ev();
extern void _ZN6S125C62v9Ev();
extern void _ZN6S125C63v10Ev();
extern void _ZN6S125C63v11Ev();
extern void _ZN6S125C63v12Ev();
extern void _ZN6S125C63v13Ev();
extern void _ZN6S125C63v14Ev();
extern void _ZN6S125C63v15Ev();
extern void _ZN6S125C63v16Ev();
extern void _ZN6S125C63v17Ev();
extern void _ZN6S125C63v18Ev();
extern void _ZN6S125C63v19Ev();
extern void _ZN6S125C63v20Ev();
extern void _ZN6S125C63v21Ev();
extern void _ZN6S125C63v22Ev();
extern void _ZN6S125C63v23Ev();
extern void _ZN6S125C63v24Ev();
extern void _ZN6S125C63v25Ev();
extern void _ZN6S125C63v26Ev();
extern void _ZN6S125C63v27Ev();
extern void _ZN6S125C63v28Ev();
extern void _ZN6S125C63v29Ev();
extern void _ZN6S125C63v30Ev();
extern void _ZN6S125C63v31Ev();
extern void _ZN6S125C63v32Ev();
extern void _ZN6S125C63v33Ev();
extern void _ZN6S125C63v34Ev();
extern void _ZN6S125C63v35Ev();
extern void _ZN6S125C63v36Ev();
extern void _ZN6S125C63v37Ev();
extern void _ZN6S125C63v38Ev();
extern void _ZN6S125C63v39Ev();
extern void _ZN6S125C63v40Ev();
extern void _ZN6S125C63v41Ev();
extern void _ZN6S125C63v42Ev();
extern void _ZN6S125C63v43Ev();
extern void _ZN6S125C63v44Ev();
extern void _ZN6S125C63v45Ev();
extern void _ZN6S125C63v46Ev();
extern void _ZN6S125C63v47Ev();
extern void _ZN6S125C63v48Ev();
extern void _ZN6S125C63v49Ev();
extern void _ZN6S125C63v50Ev();
extern void _ZN6S125C63v51Ev();
extern void _ZN6S125C63v52Ev();
extern void _ZN6S125C63v53Ev();
extern void _ZN6S125C63v54Ev();
extern void _ZN6S125C63v55Ev();
extern void _ZN6S125C63v56Ev();
extern void _ZN6S125C63v57Ev();
extern void _ZN6S125C63v58Ev();
extern void _ZN6S125C63v59Ev();
extern void _ZN6S125C63v60Ev();
extern void _ZN6S125C63v61Ev();
extern void _ZN6S125C63v62Ev();
extern void _ZN6S125C63v63Ev();
extern void _ZN6S125C63v64Ev();
extern void _ZN6S125C63v65Ev();
extern void _ZN6S125C63v66Ev();
extern void _ZN6S125C63v67Ev();
extern void _ZN6S125C63v68Ev();
extern void _ZN6S125C63v69Ev();
extern void _ZN6S125C63v70Ev();
extern void _ZN6S125C63v71Ev();
extern void _ZN6S125C63v72Ev();
extern void _ZN6S125C63v73Ev();
extern void _ZN6S125C63v74Ev();
extern void _ZN6S125C63v75Ev();
extern void _ZN6S125C63v76Ev();
extern void _ZN6S125C63v77Ev();
extern void _ZN6S125C63v78Ev();
extern void _ZN6S125C63v79Ev();
extern void _ZN6S125C63v80Ev();
extern void _ZN6S125C63v81Ev();
extern void _ZN6S125C63v82Ev();
extern void _ZN6S125C63v83Ev();
extern void _ZN6S125C63v84Ev();
extern void _ZN6S125C63v85Ev();
extern void _ZN6S125C63v86Ev();
extern void _ZN6S125C63v87Ev();
extern void _ZN6S125C63v88Ev();
extern void _ZN6S125C63v89Ev();
extern void _ZN6S125C63v90Ev();
extern void _ZN6S125C63v91Ev();
extern void _ZN6S125C63v92Ev();
extern void _ZN6S125C63v93Ev();
extern void _ZN6S125C63v94Ev();
extern void _ZN6S125C63v95Ev();
extern void _ZN6S125C63v96Ev();
extern void _ZN6S125C63v97Ev();
extern void _ZN6S125C63v98Ev();
extern void _ZN6S125C63v99Ev();
extern void _ZN6S125C64v100Ev();
extern void _ZN6S125C64v101Ev();
extern void _ZN6S125C64v102Ev();
extern void _ZN6S125C64v103Ev();
extern void _ZN6S125C64v104Ev();
extern void _ZN6S125C64v105Ev();
extern void _ZN6S125C64v106Ev();
extern void _ZN6S125C64v107Ev();
extern void _ZN6S125C64v108Ev();
extern void _ZN6S125C64v109Ev();
extern void _ZN6S125C44v110Ev();
extern void _ZN6S125C44v111Ev();
extern void _ZN6S125C44v112Ev();
extern void _ZN6S125C44v113Ev();
extern void _ZN6S125C44v114Ev();
extern void _ZN6S125C44v115Ev();
extern void _ZN6S125C44v116Ev();
extern void _ZN6S125C44v117Ev();
extern void _ZN6S125C44v118Ev();
extern void _ZN6S125C44v119Ev();
extern void _ZN6S125C44v120Ev();
extern void _ZN6S125C44v121Ev();
extern void _ZN6S125C44v122Ev();
extern void _ZN6S125C44v123Ev();
extern void _ZN6S125C44v124Ev();
extern void _ZN6S125C44v125Ev();
extern void _ZN6S125C44v126Ev();
extern void _ZN6S125C44v127Ev();
extern void _ZN6S125C44v128Ev();
extern void _ZN6S125C44v129Ev();
extern void _ZN6S125C44v130Ev();
extern void _ZN6S125C44v131Ev();
extern void _ZN6S125C44v132Ev();
extern void _ZN6S125C44v133Ev();
extern void _ZN6S125C44v134Ev();
extern void _ZN6S125C44v135Ev();
static  VTBL_ENTRY vtc_S125C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S125C4[0]),
  (VTBL_ENTRY)&_ZN6S125C4D1Ev,
  (VTBL_ENTRY)&_ZN6S125C4D0Ev,
  (VTBL_ENTRY)&_ZN6S125C62v3Ev,
  (VTBL_ENTRY)&_ZN6S125C62v4Ev,
  (VTBL_ENTRY)&_ZN6S125C62v5Ev,
  (VTBL_ENTRY)&_ZN6S125C62v6Ev,
  (VTBL_ENTRY)&_ZN6S125C62v7Ev,
  (VTBL_ENTRY)&_ZN6S125C62v8Ev,
  (VTBL_ENTRY)&_ZN6S125C62v9Ev,
  (VTBL_ENTRY)&_ZN6S125C63v10Ev,
  (VTBL_ENTRY)&_ZN6S125C63v11Ev,
  (VTBL_ENTRY)&_ZN6S125C63v12Ev,
  (VTBL_ENTRY)&_ZN6S125C63v13Ev,
  (VTBL_ENTRY)&_ZN6S125C63v14Ev,
  (VTBL_ENTRY)&_ZN6S125C63v15Ev,
  (VTBL_ENTRY)&_ZN6S125C63v16Ev,
  (VTBL_ENTRY)&_ZN6S125C63v17Ev,
  (VTBL_ENTRY)&_ZN6S125C63v18Ev,
  (VTBL_ENTRY)&_ZN6S125C63v19Ev,
  (VTBL_ENTRY)&_ZN6S125C63v20Ev,
  (VTBL_ENTRY)&_ZN6S125C63v21Ev,
  (VTBL_ENTRY)&_ZN6S125C63v22Ev,
  (VTBL_ENTRY)&_ZN6S125C63v23Ev,
  (VTBL_ENTRY)&_ZN6S125C63v24Ev,
  (VTBL_ENTRY)&_ZN6S125C63v25Ev,
  (VTBL_ENTRY)&_ZN6S125C63v26Ev,
  (VTBL_ENTRY)&_ZN6S125C63v27Ev,
  (VTBL_ENTRY)&_ZN6S125C63v28Ev,
  (VTBL_ENTRY)&_ZN6S125C63v29Ev,
  (VTBL_ENTRY)&_ZN6S125C63v30Ev,
  (VTBL_ENTRY)&_ZN6S125C63v31Ev,
  (VTBL_ENTRY)&_ZN6S125C63v32Ev,
  (VTBL_ENTRY)&_ZN6S125C63v33Ev,
  (VTBL_ENTRY)&_ZN6S125C63v34Ev,
  (VTBL_ENTRY)&_ZN6S125C63v35Ev,
  (VTBL_ENTRY)&_ZN6S125C63v36Ev,
  (VTBL_ENTRY)&_ZN6S125C63v37Ev,
  (VTBL_ENTRY)&_ZN6S125C63v38Ev,
  (VTBL_ENTRY)&_ZN6S125C63v39Ev,
  (VTBL_ENTRY)&_ZN6S125C63v40Ev,
  (VTBL_ENTRY)&_ZN6S125C63v41Ev,
  (VTBL_ENTRY)&_ZN6S125C63v42Ev,
  (VTBL_ENTRY)&_ZN6S125C63v43Ev,
  (VTBL_ENTRY)&_ZN6S125C63v44Ev,
  (VTBL_ENTRY)&_ZN6S125C63v45Ev,
  (VTBL_ENTRY)&_ZN6S125C63v46Ev,
  (VTBL_ENTRY)&_ZN6S125C63v47Ev,
  (VTBL_ENTRY)&_ZN6S125C63v48Ev,
  (VTBL_ENTRY)&_ZN6S125C63v49Ev,
  (VTBL_ENTRY)&_ZN6S125C63v50Ev,
  (VTBL_ENTRY)&_ZN6S125C63v51Ev,
  (VTBL_ENTRY)&_ZN6S125C63v52Ev,
  (VTBL_ENTRY)&_ZN6S125C63v53Ev,
  (VTBL_ENTRY)&_ZN6S125C63v54Ev,
  (VTBL_ENTRY)&_ZN6S125C63v55Ev,
  (VTBL_ENTRY)&_ZN6S125C63v56Ev,
  (VTBL_ENTRY)&_ZN6S125C63v57Ev,
  (VTBL_ENTRY)&_ZN6S125C63v58Ev,
  (VTBL_ENTRY)&_ZN6S125C63v59Ev,
  (VTBL_ENTRY)&_ZN6S125C63v60Ev,
  (VTBL_ENTRY)&_ZN6S125C63v61Ev,
  (VTBL_ENTRY)&_ZN6S125C63v62Ev,
  (VTBL_ENTRY)&_ZN6S125C63v63Ev,
  (VTBL_ENTRY)&_ZN6S125C63v64Ev,
  (VTBL_ENTRY)&_ZN6S125C63v65Ev,
  (VTBL_ENTRY)&_ZN6S125C63v66Ev,
  (VTBL_ENTRY)&_ZN6S125C63v67Ev,
  (VTBL_ENTRY)&_ZN6S125C63v68Ev,
  (VTBL_ENTRY)&_ZN6S125C63v69Ev,
  (VTBL_ENTRY)&_ZN6S125C63v70Ev,
  (VTBL_ENTRY)&_ZN6S125C63v71Ev,
  (VTBL_ENTRY)&_ZN6S125C63v72Ev,
  (VTBL_ENTRY)&_ZN6S125C63v73Ev,
  (VTBL_ENTRY)&_ZN6S125C63v74Ev,
  (VTBL_ENTRY)&_ZN6S125C63v75Ev,
  (VTBL_ENTRY)&_ZN6S125C63v76Ev,
  (VTBL_ENTRY)&_ZN6S125C63v77Ev,
  (VTBL_ENTRY)&_ZN6S125C63v78Ev,
  (VTBL_ENTRY)&_ZN6S125C63v79Ev,
  (VTBL_ENTRY)&_ZN6S125C63v80Ev,
  (VTBL_ENTRY)&_ZN6S125C63v81Ev,
  (VTBL_ENTRY)&_ZN6S125C63v82Ev,
  (VTBL_ENTRY)&_ZN6S125C63v83Ev,
  (VTBL_ENTRY)&_ZN6S125C63v84Ev,
  (VTBL_ENTRY)&_ZN6S125C63v85Ev,
  (VTBL_ENTRY)&_ZN6S125C63v86Ev,
  (VTBL_ENTRY)&_ZN6S125C63v87Ev,
  (VTBL_ENTRY)&_ZN6S125C63v88Ev,
  (VTBL_ENTRY)&_ZN6S125C63v89Ev,
  (VTBL_ENTRY)&_ZN6S125C63v90Ev,
  (VTBL_ENTRY)&_ZN6S125C63v91Ev,
  (VTBL_ENTRY)&_ZN6S125C63v92Ev,
  (VTBL_ENTRY)&_ZN6S125C63v93Ev,
  (VTBL_ENTRY)&_ZN6S125C63v94Ev,
  (VTBL_ENTRY)&_ZN6S125C63v95Ev,
  (VTBL_ENTRY)&_ZN6S125C63v96Ev,
  (VTBL_ENTRY)&_ZN6S125C63v97Ev,
  (VTBL_ENTRY)&_ZN6S125C63v98Ev,
  (VTBL_ENTRY)&_ZN6S125C63v99Ev,
  (VTBL_ENTRY)&_ZN6S125C64v100Ev,
  (VTBL_ENTRY)&_ZN6S125C64v101Ev,
  (VTBL_ENTRY)&_ZN6S125C64v102Ev,
  (VTBL_ENTRY)&_ZN6S125C64v103Ev,
  (VTBL_ENTRY)&_ZN6S125C64v104Ev,
  (VTBL_ENTRY)&_ZN6S125C64v105Ev,
  (VTBL_ENTRY)&_ZN6S125C64v106Ev,
  (VTBL_ENTRY)&_ZN6S125C64v107Ev,
  (VTBL_ENTRY)&_ZN6S125C64v108Ev,
  (VTBL_ENTRY)&_ZN6S125C64v109Ev,
  (VTBL_ENTRY)&_ZN6S125C44v110Ev,
  (VTBL_ENTRY)&_ZN6S125C44v111Ev,
  (VTBL_ENTRY)&_ZN6S125C44v112Ev,
  (VTBL_ENTRY)&_ZN6S125C44v113Ev,
  (VTBL_ENTRY)&_ZN6S125C44v114Ev,
  (VTBL_ENTRY)&_ZN6S125C44v115Ev,
  (VTBL_ENTRY)&_ZN6S125C44v116Ev,
  (VTBL_ENTRY)&_ZN6S125C44v117Ev,
  (VTBL_ENTRY)&_ZN6S125C44v118Ev,
  (VTBL_ENTRY)&_ZN6S125C44v119Ev,
  (VTBL_ENTRY)&_ZN6S125C44v120Ev,
  (VTBL_ENTRY)&_ZN6S125C44v121Ev,
  (VTBL_ENTRY)&_ZN6S125C44v122Ev,
  (VTBL_ENTRY)&_ZN6S125C44v123Ev,
  (VTBL_ENTRY)&_ZN6S125C44v124Ev,
  (VTBL_ENTRY)&_ZN6S125C44v125Ev,
  (VTBL_ENTRY)&_ZN6S125C44v126Ev,
  (VTBL_ENTRY)&_ZN6S125C44v127Ev,
  (VTBL_ENTRY)&_ZN6S125C44v128Ev,
  (VTBL_ENTRY)&_ZN6S125C44v129Ev,
  (VTBL_ENTRY)&_ZN6S125C44v130Ev,
  (VTBL_ENTRY)&_ZN6S125C44v131Ev,
  (VTBL_ENTRY)&_ZN6S125C44v132Ev,
  (VTBL_ENTRY)&_ZN6S125C44v133Ev,
  (VTBL_ENTRY)&_ZN6S125C44v134Ev,
  (VTBL_ENTRY)&_ZN6S125C44v135Ev,
};
extern VTBL_ENTRY _ZTI6S125C4[];
extern  VTBL_ENTRY _ZTV6S125C4[];
Class_Descriptor cd_S125C4 = {  "S125C4", // class name
  bases_S125C4, 3,
  &(vtc_S125C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S125C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S125C4),137, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S125C3  : S125C4 {
  virtual void  v136(); // _ZN6S125C34v136Ev
  virtual void  v137(); // _ZN6S125C34v137Ev
  virtual void  v138(); // _ZN6S125C34v138Ev
  virtual void  v139(); // _ZN6S125C34v139Ev
  virtual void  v140(); // _ZN6S125C34v140Ev
  virtual void  v141(); // _ZN6S125C34v141Ev
  virtual void  v142(); // _ZN6S125C34v142Ev
  virtual void  v143(); // _ZN6S125C34v143Ev
  virtual void  v144(); // _ZN6S125C34v144Ev
  virtual void  v145(); // _ZN6S125C34v145Ev
  virtual void  v146(); // _ZN6S125C34v146Ev
  virtual void  v147(); // _ZN6S125C34v147Ev
  virtual void  v148(); // _ZN6S125C34v148Ev
  virtual void  v149(); // _ZN6S125C34v149Ev
  virtual void  v150(); // _ZN6S125C34v150Ev
  virtual void  v151(); // _ZN6S125C34v151Ev
  virtual void  v152(); // _ZN6S125C34v152Ev
  virtual void  v153(); // _ZN6S125C34v153Ev
  ~S125C3(); // tgen
  S125C3(); // tgen
};
//SIG(-1 S125C3) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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 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 v149 v150 v151} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S125C3 ::v136(){vfunc_called(this, "_ZN6S125C34v136Ev");}
void  S125C3 ::v137(){vfunc_called(this, "_ZN6S125C34v137Ev");}
void  S125C3 ::v138(){vfunc_called(this, "_ZN6S125C34v138Ev");}
void  S125C3 ::v139(){vfunc_called(this, "_ZN6S125C34v139Ev");}
void  S125C3 ::v140(){vfunc_called(this, "_ZN6S125C34v140Ev");}
void  S125C3 ::v141(){vfunc_called(this, "_ZN6S125C34v141Ev");}
void  S125C3 ::v142(){vfunc_called(this, "_ZN6S125C34v142Ev");}
void  S125C3 ::v143(){vfunc_called(this, "_ZN6S125C34v143Ev");}
void  S125C3 ::v144(){vfunc_called(this, "_ZN6S125C34v144Ev");}
void  S125C3 ::v145(){vfunc_called(this, "_ZN6S125C34v145Ev");}
void  S125C3 ::v146(){vfunc_called(this, "_ZN6S125C34v146Ev");}
void  S125C3 ::v147(){vfunc_called(this, "_ZN6S125C34v147Ev");}
void  S125C3 ::v148(){vfunc_called(this, "_ZN6S125C34v148Ev");}
void  S125C3 ::v149(){vfunc_called(this, "_ZN6S125C34v149Ev");}
void  S125C3 ::v150(){vfunc_called(this, "_ZN6S125C34v150Ev");}
void  S125C3 ::v151(){vfunc_called(this, "_ZN6S125C34v151Ev");}
void  S125C3 ::v152(){vfunc_called(this, "_ZN6S125C34v152Ev");}
void  S125C3 ::v153(){vfunc_called(this, "_ZN6S125C34v153Ev");}
S125C3 ::~S125C3(){ note_dtor("S125C3", this);} // tgen
S125C3 ::S125C3(){ note_ctor("S125C3", this);} // tgen

static void Test_S125C3()
{
  extern Class_Descriptor cd_S125C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S125C3, buf);
    S125C3 *dp, &lv = *(dp=new (buf) S125C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S125C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S125C3)");
    check_base_class_offset(lv, (S1C11_nt*)(S125C6*)(S125C5*)(S125C4*), 0, "S125C3");
    check_base_class_offset(lv, (S125C6*)(S125C5*)(S125C4*), 0, "S125C3");
    check_base_class_offset(lv, (S125C5*)(S125C4*), 0, "S125C3");
    check_base_class_offset(lv, (S125C4*), 0, "S125C3");
    test_class_info(&lv, &cd_S125C3);
    dp->~S125C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS125C3(Test_S125C3, "S125C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S125C3C1Ev();
extern void _ZN6S125C3D1Ev();
Name_Map name_map_S125C3[] = {
  NSPAIR(_ZN6S125C3C1Ev),
  NSPAIR(_ZN6S125C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S125C6;
extern VTBL_ENTRY _ZTI6S125C6[];
extern  VTBL_ENTRY _ZTV6S125C6[];
extern Class_Descriptor cd_S125C5;
extern VTBL_ENTRY _ZTI6S125C5[];
extern  VTBL_ENTRY _ZTV6S125C5[];
extern Class_Descriptor cd_S125C4;
extern VTBL_ENTRY _ZTI6S125C4[];
extern  VTBL_ENTRY _ZTV6S125C4[];
static Base_Class bases_S125C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S125C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S125C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S125C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S125C3[];
extern void _ZN6S125C3D1Ev();
extern void _ZN6S125C3D0Ev();
extern void _ZN6S125C62v3Ev();
extern void _ZN6S125C62v4Ev();
extern void _ZN6S125C62v5Ev();
extern void _ZN6S125C62v6Ev();
extern void _ZN6S125C62v7Ev();
extern void _ZN6S125C62v8Ev();
extern void _ZN6S125C62v9Ev();
extern void _ZN6S125C63v10Ev();
extern void _ZN6S125C63v11Ev();
extern void _ZN6S125C63v12Ev();
extern void _ZN6S125C63v13Ev();
extern void _ZN6S125C63v14Ev();
extern void _ZN6S125C63v15Ev();
extern void _ZN6S125C63v16Ev();
extern void _ZN6S125C63v17Ev();
extern void _ZN6S125C63v18Ev();
extern void _ZN6S125C63v19Ev();
extern void _ZN6S125C63v20Ev();
extern void _ZN6S125C63v21Ev();
extern void _ZN6S125C63v22Ev();
extern void _ZN6S125C63v23Ev();
extern void _ZN6S125C63v24Ev();
extern void _ZN6S125C63v25Ev();
extern void _ZN6S125C63v26Ev();
extern void _ZN6S125C63v27Ev();
extern void _ZN6S125C63v28Ev();
extern void _ZN6S125C63v29Ev();
extern void _ZN6S125C63v30Ev();
extern void _ZN6S125C63v31Ev();
extern void _ZN6S125C63v32Ev();
extern void _ZN6S125C63v33Ev();
extern void _ZN6S125C63v34Ev();
extern void _ZN6S125C63v35Ev();
extern void _ZN6S125C63v36Ev();
extern void _ZN6S125C63v37Ev();
extern void _ZN6S125C63v38Ev();
extern void _ZN6S125C63v39Ev();
extern void _ZN6S125C63v40Ev();
extern void _ZN6S125C63v41Ev();
extern void _ZN6S125C63v42Ev();
extern void _ZN6S125C63v43Ev();
extern void _ZN6S125C63v44Ev();
extern void _ZN6S125C63v45Ev();
extern void _ZN6S125C63v46Ev();
extern void _ZN6S125C63v47Ev();
extern void _ZN6S125C63v48Ev();
extern void _ZN6S125C63v49Ev();
extern void _ZN6S125C63v50Ev();
extern void _ZN6S125C63v51Ev();
extern void _ZN6S125C63v52Ev();
extern void _ZN6S125C63v53Ev();
extern void _ZN6S125C63v54Ev();
extern void _ZN6S125C63v55Ev();
extern void _ZN6S125C63v56Ev();
extern void _ZN6S125C63v57Ev();
extern void _ZN6S125C63v58Ev();
extern void _ZN6S125C63v59Ev();
extern void _ZN6S125C63v60Ev();
extern void _ZN6S125C63v61Ev();
extern void _ZN6S125C63v62Ev();
extern void _ZN6S125C63v63Ev();
extern void _ZN6S125C63v64Ev();
extern void _ZN6S125C63v65Ev();
extern void _ZN6S125C63v66Ev();
extern void _ZN6S125C63v67Ev();
extern void _ZN6S125C63v68Ev();
extern void _ZN6S125C63v69Ev();
extern void _ZN6S125C63v70Ev();
extern void _ZN6S125C63v71Ev();
extern void _ZN6S125C63v72Ev();
extern void _ZN6S125C63v73Ev();
extern void _ZN6S125C63v74Ev();
extern void _ZN6S125C63v75Ev();
extern void _ZN6S125C63v76Ev();
extern void _ZN6S125C63v77Ev();
extern void _ZN6S125C63v78Ev();
extern void _ZN6S125C63v79Ev();
extern void _ZN6S125C63v80Ev();
extern void _ZN6S125C63v81Ev();
extern void _ZN6S125C63v82Ev();
extern void _ZN6S125C63v83Ev();
extern void _ZN6S125C63v84Ev();
extern void _ZN6S125C63v85Ev();
extern void _ZN6S125C63v86Ev();
extern void _ZN6S125C63v87Ev();
extern void _ZN6S125C63v88Ev();
extern void _ZN6S125C63v89Ev();
extern void _ZN6S125C63v90Ev();
extern void _ZN6S125C63v91Ev();
extern void _ZN6S125C63v92Ev();
extern void _ZN6S125C63v93Ev();
extern void _ZN6S125C63v94Ev();
extern void _ZN6S125C63v95Ev();
extern void _ZN6S125C63v96Ev();
extern void _ZN6S125C63v97Ev();
extern void _ZN6S125C63v98Ev();
extern void _ZN6S125C63v99Ev();
extern void _ZN6S125C64v100Ev();
extern void _ZN6S125C64v101Ev();
extern void _ZN6S125C64v102Ev();
extern void _ZN6S125C64v103Ev();
extern void _ZN6S125C64v104Ev();
extern void _ZN6S125C64v105Ev();
extern void _ZN6S125C64v106Ev();
extern void _ZN6S125C64v107Ev();
extern void _ZN6S125C64v108Ev();
extern void _ZN6S125C64v109Ev();
extern void _ZN6S125C44v110Ev();
extern void _ZN6S125C44v111Ev();
extern void _ZN6S125C44v112Ev();
extern void _ZN6S125C44v113Ev();
extern void _ZN6S125C44v114Ev();
extern void _ZN6S125C44v115Ev();
extern void _ZN6S125C44v116Ev();
extern void _ZN6S125C44v117Ev();
extern void _ZN6S125C44v118Ev();
extern void _ZN6S125C44v119Ev();
extern void _ZN6S125C44v120Ev();
extern void _ZN6S125C44v121Ev();
extern void _ZN6S125C44v122Ev();
extern void _ZN6S125C44v123Ev();
extern void _ZN6S125C44v124Ev();
extern void _ZN6S125C44v125Ev();
extern void _ZN6S125C44v126Ev();
extern void _ZN6S125C44v127Ev();
extern void _ZN6S125C44v128Ev();
extern void _ZN6S125C44v129Ev();
extern void _ZN6S125C44v130Ev();
extern void _ZN6S125C44v131Ev();
extern void _ZN6S125C44v132Ev();
extern void _ZN6S125C44v133Ev();
extern void _ZN6S125C44v134Ev();
extern void _ZN6S125C44v135Ev();
extern void _ZN6S125C34v136Ev();
extern void _ZN6S125C34v137Ev();
extern void _ZN6S125C34v138Ev();
extern void _ZN6S125C34v139Ev();
extern void _ZN6S125C34v140Ev();
extern void _ZN6S125C34v141Ev();
extern void _ZN6S125C34v142Ev();
extern void _ZN6S125C34v143Ev();
extern void _ZN6S125C34v144Ev();
extern void _ZN6S125C34v145Ev();
extern void _ZN6S125C34v146Ev();
extern void _ZN6S125C34v147Ev();
extern void _ZN6S125C34v148Ev();
extern void _ZN6S125C34v149Ev();
extern void _ZN6S125C34v150Ev();
extern void _ZN6S125C34v151Ev();
extern void _ZN6S125C34v152Ev();
extern void _ZN6S125C34v153Ev();
static  VTBL_ENTRY vtc_S125C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S125C3[0]),
  (VTBL_ENTRY)&_ZN6S125C3D1Ev,
  (VTBL_ENTRY)&_ZN6S125C3D0Ev,
  (VTBL_ENTRY)&_ZN6S125C62v3Ev,
  (VTBL_ENTRY)&_ZN6S125C62v4Ev,
  (VTBL_ENTRY)&_ZN6S125C62v5Ev,
  (VTBL_ENTRY)&_ZN6S125C62v6Ev,
  (VTBL_ENTRY)&_ZN6S125C62v7Ev,
  (VTBL_ENTRY)&_ZN6S125C62v8Ev,
  (VTBL_ENTRY)&_ZN6S125C62v9Ev,
  (VTBL_ENTRY)&_ZN6S125C63v10Ev,
  (VTBL_ENTRY)&_ZN6S125C63v11Ev,
  (VTBL_ENTRY)&_ZN6S125C63v12Ev,
  (VTBL_ENTRY)&_ZN6S125C63v13Ev,
  (VTBL_ENTRY)&_ZN6S125C63v14Ev,
  (VTBL_ENTRY)&_ZN6S125C63v15Ev,
  (VTBL_ENTRY)&_ZN6S125C63v16Ev,
  (VTBL_ENTRY)&_ZN6S125C63v17Ev,
  (VTBL_ENTRY)&_ZN6S125C63v18Ev,
  (VTBL_ENTRY)&_ZN6S125C63v19Ev,
  (VTBL_ENTRY)&_ZN6S125C63v20Ev,
  (VTBL_ENTRY)&_ZN6S125C63v21Ev,
  (VTBL_ENTRY)&_ZN6S125C63v22Ev,
  (VTBL_ENTRY)&_ZN6S125C63v23Ev,
  (VTBL_ENTRY)&_ZN6S125C63v24Ev,
  (VTBL_ENTRY)&_ZN6S125C63v25Ev,
  (VTBL_ENTRY)&_ZN6S125C63v26Ev,
  (VTBL_ENTRY)&_ZN6S125C63v27Ev,
  (VTBL_ENTRY)&_ZN6S125C63v28Ev,
  (VTBL_ENTRY)&_ZN6S125C63v29Ev,
  (VTBL_ENTRY)&_ZN6S125C63v30Ev,
  (VTBL_ENTRY)&_ZN6S125C63v31Ev,
  (VTBL_ENTRY)&_ZN6S125C63v32Ev,
  (VTBL_ENTRY)&_ZN6S125C63v33Ev,
  (VTBL_ENTRY)&_ZN6S125C63v34Ev,
  (VTBL_ENTRY)&_ZN6S125C63v35Ev,
  (VTBL_ENTRY)&_ZN6S125C63v36Ev,
  (VTBL_ENTRY)&_ZN6S125C63v37Ev,
  (VTBL_ENTRY)&_ZN6S125C63v38Ev,
  (VTBL_ENTRY)&_ZN6S125C63v39Ev,
  (VTBL_ENTRY)&_ZN6S125C63v40Ev,
  (VTBL_ENTRY)&_ZN6S125C63v41Ev,
  (VTBL_ENTRY)&_ZN6S125C63v42Ev,
  (VTBL_ENTRY)&_ZN6S125C63v43Ev,
  (VTBL_ENTRY)&_ZN6S125C63v44Ev,
  (VTBL_ENTRY)&_ZN6S125C63v45Ev,
  (VTBL_ENTRY)&_ZN6S125C63v46Ev,
  (VTBL_ENTRY)&_ZN6S125C63v47Ev,
  (VTBL_ENTRY)&_ZN6S125C63v48Ev,
  (VTBL_ENTRY)&_ZN6S125C63v49Ev,
  (VTBL_ENTRY)&_ZN6S125C63v50Ev,
  (VTBL_ENTRY)&_ZN6S125C63v51Ev,
  (VTBL_ENTRY)&_ZN6S125C63v52Ev,
  (VTBL_ENTRY)&_ZN6S125C63v53Ev,
  (VTBL_ENTRY)&_ZN6S125C63v54Ev,
  (VTBL_ENTRY)&_ZN6S125C63v55Ev,
  (VTBL_ENTRY)&_ZN6S125C63v56Ev,
  (VTBL_ENTRY)&_ZN6S125C63v57Ev,
  (VTBL_ENTRY)&_ZN6S125C63v58Ev,
  (VTBL_ENTRY)&_ZN6S125C63v59Ev,
  (VTBL_ENTRY)&_ZN6S125C63v60Ev,
  (VTBL_ENTRY)&_ZN6S125C63v61Ev,
  (VTBL_ENTRY)&_ZN6S125C63v62Ev,
  (VTBL_ENTRY)&_ZN6S125C63v63Ev,
  (VTBL_ENTRY)&_ZN6S125C63v64Ev,
  (VTBL_ENTRY)&_ZN6S125C63v65Ev,
  (VTBL_ENTRY)&_ZN6S125C63v66Ev,
  (VTBL_ENTRY)&_ZN6S125C63v67Ev,
  (VTBL_ENTRY)&_ZN6S125C63v68Ev,
  (VTBL_ENTRY)&_ZN6S125C63v69Ev,
  (VTBL_ENTRY)&_ZN6S125C63v70Ev,
  (VTBL_ENTRY)&_ZN6S125C63v71Ev,
  (VTBL_ENTRY)&_ZN6S125C63v72Ev,
  (VTBL_ENTRY)&_ZN6S125C63v73Ev,
  (VTBL_ENTRY)&_ZN6S125C63v74Ev,
  (VTBL_ENTRY)&_ZN6S125C63v75Ev,
  (VTBL_ENTRY)&_ZN6S125C63v76Ev,
  (VTBL_ENTRY)&_ZN6S125C63v77Ev,
  (VTBL_ENTRY)&_ZN6S125C63v78Ev,
  (VTBL_ENTRY)&_ZN6S125C63v79Ev,
  (VTBL_ENTRY)&_ZN6S125C63v80Ev,
  (VTBL_ENTRY)&_ZN6S125C63v81Ev,
  (VTBL_ENTRY)&_ZN6S125C63v82Ev,
  (VTBL_ENTRY)&_ZN6S125C63v83Ev,
  (VTBL_ENTRY)&_ZN6S125C63v84Ev,
  (VTBL_ENTRY)&_ZN6S125C63v85Ev,
  (VTBL_ENTRY)&_ZN6S125C63v86Ev,
  (VTBL_ENTRY)&_ZN6S125C63v87Ev,
  (VTBL_ENTRY)&_ZN6S125C63v88Ev,
  (VTBL_ENTRY)&_ZN6S125C63v89Ev,
  (VTBL_ENTRY)&_ZN6S125C63v90Ev,
  (VTBL_ENTRY)&_ZN6S125C63v91Ev,
  (VTBL_ENTRY)&_ZN6S125C63v92Ev,
  (VTBL_ENTRY)&_ZN6S125C63v93Ev,
  (VTBL_ENTRY)&_ZN6S125C63v94Ev,
  (VTBL_ENTRY)&_ZN6S125C63v95Ev,
  (VTBL_ENTRY)&_ZN6S125C63v96Ev,
  (VTBL_ENTRY)&_ZN6S125C63v97Ev,
  (VTBL_ENTRY)&_ZN6S125C63v98Ev,
  (VTBL_ENTRY)&_ZN6S125C63v99Ev,
  (VTBL_ENTRY)&_ZN6S125C64v100Ev,
  (VTBL_ENTRY)&_ZN6S125C64v101Ev,
  (VTBL_ENTRY)&_ZN6S125C64v102Ev,
  (VTBL_ENTRY)&_ZN6S125C64v103Ev,
  (VTBL_ENTRY)&_ZN6S125C64v104Ev,
  (VTBL_ENTRY)&_ZN6S125C64v105Ev,
  (VTBL_ENTRY)&_ZN6S125C64v106Ev,
  (VTBL_ENTRY)&_ZN6S125C64v107Ev,
  (VTBL_ENTRY)&_ZN6S125C64v108Ev,
  (VTBL_ENTRY)&_ZN6S125C64v109Ev,
  (VTBL_ENTRY)&_ZN6S125C44v110Ev,
  (VTBL_ENTRY)&_ZN6S125C44v111Ev,
  (VTBL_ENTRY)&_ZN6S125C44v112Ev,
  (VTBL_ENTRY)&_ZN6S125C44v113Ev,
  (VTBL_ENTRY)&_ZN6S125C44v114Ev,
  (VTBL_ENTRY)&_ZN6S125C44v115Ev,
  (VTBL_ENTRY)&_ZN6S125C44v116Ev,
  (VTBL_ENTRY)&_ZN6S125C44v117Ev,
  (VTBL_ENTRY)&_ZN6S125C44v118Ev,
  (VTBL_ENTRY)&_ZN6S125C44v119Ev,
  (VTBL_ENTRY)&_ZN6S125C44v120Ev,
  (VTBL_ENTRY)&_ZN6S125C44v121Ev,
  (VTBL_ENTRY)&_ZN6S125C44v122Ev,
  (VTBL_ENTRY)&_ZN6S125C44v123Ev,
  (VTBL_ENTRY)&_ZN6S125C44v124Ev,
  (VTBL_ENTRY)&_ZN6S125C44v125Ev,
  (VTBL_ENTRY)&_ZN6S125C44v126Ev,
  (VTBL_ENTRY)&_ZN6S125C44v127Ev,
  (VTBL_ENTRY)&_ZN6S125C44v128Ev,
  (VTBL_ENTRY)&_ZN6S125C44v129Ev,
  (VTBL_ENTRY)&_ZN6S125C44v130Ev,
  (VTBL_ENTRY)&_ZN6S125C44v131Ev,
  (VTBL_ENTRY)&_ZN6S125C44v132Ev,
  (VTBL_ENTRY)&_ZN6S125C44v133Ev,
  (VTBL_ENTRY)&_ZN6S125C44v134Ev,
  (VTBL_ENTRY)&_ZN6S125C44v135Ev,
  (VTBL_ENTRY)&_ZN6S125C34v136Ev,
  (VTBL_ENTRY)&_ZN6S125C34v137Ev,
  (VTBL_ENTRY)&_ZN6S125C34v138Ev,
  (VTBL_ENTRY)&_ZN6S125C34v139Ev,
  (VTBL_ENTRY)&_ZN6S125C34v140Ev,
  (VTBL_ENTRY)&_ZN6S125C34v141Ev,
  (VTBL_ENTRY)&_ZN6S125C34v142Ev,
  (VTBL_ENTRY)&_ZN6S125C34v143Ev,
  (VTBL_ENTRY)&_ZN6S125C34v144Ev,
  (VTBL_ENTRY)&_ZN6S125C34v145Ev,
  (VTBL_ENTRY)&_ZN6S125C34v146Ev,
  (VTBL_ENTRY)&_ZN6S125C34v147Ev,
  (VTBL_ENTRY)&_ZN6S125C34v148Ev,
  (VTBL_ENTRY)&_ZN6S125C34v149Ev,
  (VTBL_ENTRY)&_ZN6S125C34v150Ev,
  (VTBL_ENTRY)&_ZN6S125C34v151Ev,
  (VTBL_ENTRY)&_ZN6S125C34v152Ev,
  (VTBL_ENTRY)&_ZN6S125C34v153Ev,
};
extern VTBL_ENTRY _ZTI6S125C3[];
extern  VTBL_ENTRY _ZTV6S125C3[];
Class_Descriptor cd_S125C3 = {  "S125C3", // class name
  bases_S125C3, 4,
  &(vtc_S125C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S125C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S125C3),155, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S125C2  : S125C3 {
  virtual void  v154(); // _ZN6S125C24v154Ev
  virtual void  v155(); // _ZN6S125C24v155Ev
  virtual void  v156(); // _ZN6S125C24v156Ev
  virtual void  v157(); // _ZN6S125C24v157Ev
  virtual void  v158(); // _ZN6S125C24v158Ev
  virtual void  v159(); // _ZN6S125C24v159Ev
  virtual void  v160(); // _ZN6S125C24v160Ev
  virtual void  v161(); // _ZN6S125C24v161Ev
  virtual void  v162(); // _ZN6S125C24v162Ev
  virtual void  v163(); // _ZN6S125C24v163Ev
  virtual void  v164(); // _ZN6S125C24v164Ev
  virtual void  v165(); // _ZN6S125C24v165Ev
  virtual void  v166(); // _ZN6S125C24v166Ev
  virtual void  v167(); // _ZN6S125C24v167Ev
  virtual void  v168(); // _ZN6S125C24v168Ev
  virtual void  v169(); // _ZN6S125C24v169Ev
  virtual void  v170(); // _ZN6S125C24v170Ev
  virtual void  v171(); // _ZN6S125C24v171Ev
  virtual void  v172(); // _ZN6S125C24v172Ev
  virtual void  v173(); // _ZN6S125C24v173Ev
  virtual void  v174(); // _ZN6S125C24v174Ev
  virtual void  v175(); // _ZN6S125C24v175Ev
  virtual void  v176(); // _ZN6S125C24v176Ev
  virtual void  v177(); // _ZN6S125C24v177Ev
  virtual void  v178(); // _ZN6S125C24v178Ev
  virtual void  v179(); // _ZN6S125C24v179Ev
  ~S125C2(); // tgen
  S125C2(); // tgen
};
//SIG(-1 S125C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m Fp Fi} 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 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 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} 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}


void  S125C2 ::v154(){vfunc_called(this, "_ZN6S125C24v154Ev");}
void  S125C2 ::v155(){vfunc_called(this, "_ZN6S125C24v155Ev");}
void  S125C2 ::v156(){vfunc_called(this, "_ZN6S125C24v156Ev");}
void  S125C2 ::v157(){vfunc_called(this, "_ZN6S125C24v157Ev");}
void  S125C2 ::v158(){vfunc_called(this, "_ZN6S125C24v158Ev");}
void  S125C2 ::v159(){vfunc_called(this, "_ZN6S125C24v159Ev");}
void  S125C2 ::v160(){vfunc_called(this, "_ZN6S125C24v160Ev");}
void  S125C2 ::v161(){vfunc_called(this, "_ZN6S125C24v161Ev");}
void  S125C2 ::v162(){vfunc_called(this, "_ZN6S125C24v162Ev");}
void  S125C2 ::v163(){vfunc_called(this, "_ZN6S125C24v163Ev");}
void  S125C2 ::v164(){vfunc_called(this, "_ZN6S125C24v164Ev");}
void  S125C2 ::v165(){vfunc_called(this, "_ZN6S125C24v165Ev");}
void  S125C2 ::v166(){vfunc_called(this, "_ZN6S125C24v166Ev");}
void  S125C2 ::v167(){vfunc_called(this, "_ZN6S125C24v167Ev");}
void  S125C2 ::v168(){vfunc_called(this, "_ZN6S125C24v168Ev");}
void  S125C2 ::v169(){vfunc_called(this, "_ZN6S125C24v169Ev");}
void  S125C2 ::v170(){vfunc_called(this, "_ZN6S125C24v170Ev");}
void  S125C2 ::v171(){vfunc_called(this, "_ZN6S125C24v171Ev");}
void  S125C2 ::v172(){vfunc_called(this, "_ZN6S125C24v172Ev");}
void  S125C2 ::v173(){vfunc_called(this, "_ZN6S125C24v173Ev");}
void  S125C2 ::v174(){vfunc_called(this, "_ZN6S125C24v174Ev");}
void  S125C2 ::v175(){vfunc_called(this, "_ZN6S125C24v175Ev");}
void  S125C2 ::v176(){vfunc_called(this, "_ZN6S125C24v176Ev");}
void  S125C2 ::v177(){vfunc_called(this, "_ZN6S125C24v177Ev");}
void  S125C2 ::v178(){vfunc_called(this, "_ZN6S125C24v178Ev");}
void  S125C2 ::v179(){vfunc_called(this, "_ZN6S125C24v179Ev");}
S125C2 ::~S125C2(){ note_dtor("S125C2", this);} // tgen
S125C2 ::S125C2(){ note_ctor("S125C2", this);} // tgen

static void Test_S125C2()
{
  extern Class_Descriptor cd_S125C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S125C2, buf);
    S125C2 *dp, &lv = *(dp=new (buf) S125C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S125C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S125C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S125C6*)(S125C5*)(S125C4*)(S125C3*), 0, "S125C2");
    check_base_class_offset(lv, (S125C6*)(S125C5*)(S125C4*)(S125C3*), 0, "S125C2");
    check_base_class_offset(lv, (S125C5*)(S125C4*)(S125C3*), 0, "S125C2");
    check_base_class_offset(lv, (S125C4*)(S125C3*), 0, "S125C2");
    check_base_class_offset(lv, (S125C3*), 0, "S125C2");
    test_class_info(&lv, &cd_S125C2);
    dp->~S125C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS125C2(Test_S125C2, "S125C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S125C2C1Ev();
extern void _ZN6S125C2D1Ev();
Name_Map name_map_S125C2[] = {
  NSPAIR(_ZN6S125C2C1Ev),
  NSPAIR(_ZN6S125C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S125C6;
extern VTBL_ENTRY _ZTI6S125C6[];
extern  VTBL_ENTRY _ZTV6S125C6[];
extern Class_Descriptor cd_S125C5;
extern VTBL_ENTRY _ZTI6S125C5[];
extern  VTBL_ENTRY _ZTV6S125C5[];
extern Class_Descriptor cd_S125C4;
extern VTBL_ENTRY _ZTI6S125C4[];
extern  VTBL_ENTRY _ZTV6S125C4[];
extern Class_Descriptor cd_S125C3;
extern VTBL_ENTRY _ZTI6S125C3[];
extern  VTBL_ENTRY _ZTV6S125C3[];
static Base_Class bases_S125C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S125C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S125C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S125C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S125C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S125C2[];
extern void _ZN6S125C2D1Ev();
extern void _ZN6S125C2D0Ev();
extern void _ZN6S125C62v3Ev();
extern void _ZN6S125C62v4Ev();
extern void _ZN6S125C62v5Ev();
extern void _ZN6S125C62v6Ev();
extern void _ZN6S125C62v7Ev();
extern void _ZN6S125C62v8Ev();
extern void _ZN6S125C62v9Ev();
extern void _ZN6S125C63v10Ev();
extern void _ZN6S125C63v11Ev();
extern void _ZN6S125C63v12Ev();
extern void _ZN6S125C63v13Ev();
extern void _ZN6S125C63v14Ev();
extern void _ZN6S125C63v15Ev();
extern void _ZN6S125C63v16Ev();
extern void _ZN6S125C63v17Ev();
extern void _ZN6S125C63v18Ev();
extern void _ZN6S125C63v19Ev();
extern void _ZN6S125C63v20Ev();
extern void _ZN6S125C63v21Ev();
extern void _ZN6S125C63v22Ev();
extern void _ZN6S125C63v23Ev();
extern void _ZN6S125C63v24Ev();
extern void _ZN6S125C63v25Ev();
extern void _ZN6S125C63v26Ev();
extern void _ZN6S125C63v27Ev();
extern void _ZN6S125C63v28Ev();
extern void _ZN6S125C63v29Ev();
extern void _ZN6S125C63v30Ev();
extern void _ZN6S125C63v31Ev();
extern void _ZN6S125C63v32Ev();
extern void _ZN6S125C63v33Ev();
extern void _ZN6S125C63v34Ev();
extern void _ZN6S125C63v35Ev();
extern void _ZN6S125C63v36Ev();
extern void _ZN6S125C63v37Ev();
extern void _ZN6S125C63v38Ev();
extern void _ZN6S125C63v39Ev();
extern void _ZN6S125C63v40Ev();
extern void _ZN6S125C63v41Ev();
extern void _ZN6S125C63v42Ev();
extern void _ZN6S125C63v43Ev();
extern void _ZN6S125C63v44Ev();
extern void _ZN6S125C63v45Ev();
extern void _ZN6S125C63v46Ev();
extern void _ZN6S125C63v47Ev();
extern void _ZN6S125C63v48Ev();
extern void _ZN6S125C63v49Ev();
extern void _ZN6S125C63v50Ev();
extern void _ZN6S125C63v51Ev();
extern void _ZN6S125C63v52Ev();
extern void _ZN6S125C63v53Ev();
extern void _ZN6S125C63v54Ev();
extern void _ZN6S125C63v55Ev();
extern void _ZN6S125C63v56Ev();
extern void _ZN6S125C63v57Ev();
extern void _ZN6S125C63v58Ev();
extern void _ZN6S125C63v59Ev();
extern void _ZN6S125C63v60Ev();
extern void _ZN6S125C63v61Ev();
extern void _ZN6S125C63v62Ev();
extern void _ZN6S125C63v63Ev();
extern void _ZN6S125C63v64Ev();
extern void _ZN6S125C63v65Ev();
extern void _ZN6S125C63v66Ev();
extern void _ZN6S125C63v67Ev();
extern void _ZN6S125C63v68Ev();
extern void _ZN6S125C63v69Ev();
extern void _ZN6S125C63v70Ev();
extern void _ZN6S125C63v71Ev();
extern void _ZN6S125C63v72Ev();
extern void _ZN6S125C63v73Ev();
extern void _ZN6S125C63v74Ev();
extern void _ZN6S125C63v75Ev();
extern void _ZN6S125C63v76Ev();
extern void _ZN6S125C63v77Ev();
extern void _ZN6S125C63v78Ev();
extern void _ZN6S125C63v79Ev();
extern void _ZN6S125C63v80Ev();
extern void _ZN6S125C63v81Ev();
extern void _ZN6S125C63v82Ev();
extern void _ZN6S125C63v83Ev();
extern void _ZN6S125C63v84Ev();
extern void _ZN6S125C63v85Ev();
extern void _ZN6S125C63v86Ev();
extern void _ZN6S125C63v87Ev();
extern void _ZN6S125C63v88Ev();
extern void _ZN6S125C63v89Ev();
extern void _ZN6S125C63v90Ev();
extern void _ZN6S125C63v91Ev();
extern void _ZN6S125C63v92Ev();
extern void _ZN6S125C63v93Ev();
extern void _ZN6S125C63v94Ev();
extern void _ZN6S125C63v95Ev();
extern void _ZN6S125C63v96Ev();
extern void _ZN6S125C63v97Ev();
extern void _ZN6S125C63v98Ev();
extern void _ZN6S125C63v99Ev();
extern void _ZN6S125C64v100Ev();
extern void _ZN6S125C64v101Ev();
extern void _ZN6S125C64v102Ev();
extern void _ZN6S125C64v103Ev();
extern void _ZN6S125C64v104Ev();
extern void _ZN6S125C64v105Ev();
extern void _ZN6S125C64v106Ev();
extern void _ZN6S125C64v107Ev();
extern void _ZN6S125C64v108Ev();
extern void _ZN6S125C64v109Ev();
extern void _ZN6S125C44v110Ev();
extern void _ZN6S125C44v111Ev();
extern void _ZN6S125C44v112Ev();
extern void _ZN6S125C44v113Ev();
extern void _ZN6S125C44v114Ev();
extern void _ZN6S125C44v115Ev();
extern void _ZN6S125C44v116Ev();
extern void _ZN6S125C44v117Ev();
extern void _ZN6S125C44v118Ev();
extern void _ZN6S125C44v119Ev();
extern void _ZN6S125C44v120Ev();
extern void _ZN6S125C44v121Ev();
extern void _ZN6S125C44v122Ev();
extern void _ZN6S125C44v123Ev();
extern void _ZN6S125C44v124Ev();
extern void _ZN6S125C44v125Ev();
extern void _ZN6S125C44v126Ev();
extern void _ZN6S125C44v127Ev();
extern void _ZN6S125C44v128Ev();
extern void _ZN6S125C44v129Ev();
extern void _ZN6S125C44v130Ev();
extern void _ZN6S125C44v131Ev();
extern void _ZN6S125C44v132Ev();
extern void _ZN6S125C44v133Ev();
extern void _ZN6S125C44v134Ev();
extern void _ZN6S125C44v135Ev();
extern void _ZN6S125C34v136Ev();
extern void _ZN6S125C34v137Ev();
extern void _ZN6S125C34v138Ev();
extern void _ZN6S125C34v139Ev();
extern void _ZN6S125C34v140Ev();
extern void _ZN6S125C34v141Ev();
extern void _ZN6S125C34v142Ev();
extern void _ZN6S125C34v143Ev();
extern void _ZN6S125C34v144Ev();
extern void _ZN6S125C34v145Ev();
extern void _ZN6S125C34v146Ev();
extern void _ZN6S125C34v147Ev();
extern void _ZN6S125C34v148Ev();
extern void _ZN6S125C34v149Ev();
extern void _ZN6S125C34v150Ev();
extern void _ZN6S125C34v151Ev();
extern void _ZN6S125C34v152Ev();
extern void _ZN6S125C34v153Ev();
extern void _ZN6S125C24v154Ev();
extern void _ZN6S125C24v155Ev();
extern void _ZN6S125C24v156Ev();
extern void _ZN6S125C24v157Ev();
extern void _ZN6S125C24v158Ev();
extern void _ZN6S125C24v159Ev();
extern void _ZN6S125C24v160Ev();
extern void _ZN6S125C24v161Ev();
extern void _ZN6S125C24v162Ev();
extern void _ZN6S125C24v163Ev();
extern void _ZN6S125C24v164Ev();
extern void _ZN6S125C24v165Ev();
extern void _ZN6S125C24v166Ev();
extern void _ZN6S125C24v167Ev();
extern void _ZN6S125C24v168Ev();
extern void _ZN6S125C24v169Ev();
extern void _ZN6S125C24v170Ev();
extern void _ZN6S125C24v171Ev();
extern void _ZN6S125C24v172Ev();
extern void _ZN6S125C24v173Ev();
extern void _ZN6S125C24v174Ev();
extern void _ZN6S125C24v175Ev();
extern void _ZN6S125C24v176Ev();
extern void _ZN6S125C24v177Ev();
extern void _ZN6S125C24v178Ev();
extern void _ZN6S125C24v179Ev();
static  VTBL_ENTRY vtc_S125C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S125C2[0]),
  (VTBL_ENTRY)&_ZN6S125C2D1Ev,
  (VTBL_ENTRY)&_ZN6S125C2D0Ev,
  (VTBL_ENTRY)&_ZN6S125C62v3Ev,
  (VTBL_ENTRY)&_ZN6S125C62v4Ev,
  (VTBL_ENTRY)&_ZN6S125C62v5Ev,
  (VTBL_ENTRY)&_ZN6S125C62v6Ev,
  (VTBL_ENTRY)&_ZN6S125C62v7Ev,
  (VTBL_ENTRY)&_ZN6S125C62v8Ev,
  (VTBL_ENTRY)&_ZN6S125C62v9Ev,
  (VTBL_ENTRY)&_ZN6S125C63v10Ev,
  (VTBL_ENTRY)&_ZN6S125C63v11Ev,
  (VTBL_ENTRY)&_ZN6S125C63v12Ev,
  (VTBL_ENTRY)&_ZN6S125C63v13Ev,
  (VTBL_ENTRY)&_ZN6S125C63v14Ev,
  (VTBL_ENTRY)&_ZN6S125C63v15Ev,
  (VTBL_ENTRY)&_ZN6S125C63v16Ev,
  (VTBL_ENTRY)&_ZN6S125C63v17Ev,
  (VTBL_ENTRY)&_ZN6S125C63v18Ev,
  (VTBL_ENTRY)&_ZN6S125C63v19Ev,
  (VTBL_ENTRY)&_ZN6S125C63v20Ev,
  (VTBL_ENTRY)&_ZN6S125C63v21Ev,
  (VTBL_ENTRY)&_ZN6S125C63v22Ev,
  (VTBL_ENTRY)&_ZN6S125C63v23Ev,
  (VTBL_ENTRY)&_ZN6S125C63v24Ev,
  (VTBL_ENTRY)&_ZN6S125C63v25Ev,
  (VTBL_ENTRY)&_ZN6S125C63v26Ev,
  (VTBL_ENTRY)&_ZN6S125C63v27Ev,
  (VTBL_ENTRY)&_ZN6S125C63v28Ev,
  (VTBL_ENTRY)&_ZN6S125C63v29Ev,
  (VTBL_ENTRY)&_ZN6S125C63v30Ev,
  (VTBL_ENTRY)&_ZN6S125C63v31Ev,
  (VTBL_ENTRY)&_ZN6S125C63v32Ev,
  (VTBL_ENTRY)&_ZN6S125C63v33Ev,
  (VTBL_ENTRY)&_ZN6S125C63v34Ev,
  (VTBL_ENTRY)&_ZN6S125C63v35Ev,
  (VTBL_ENTRY)&_ZN6S125C63v36Ev,
  (VTBL_ENTRY)&_ZN6S125C63v37Ev,
  (VTBL_ENTRY)&_ZN6S125C63v38Ev,
  (VTBL_ENTRY)&_ZN6S125C63v39Ev,
  (VTBL_ENTRY)&_ZN6S125C63v40Ev,
  (VTBL_ENTRY)&_ZN6S125C63v41Ev,
  (VTBL_ENTRY)&_ZN6S125C63v42Ev,
  (VTBL_ENTRY)&_ZN6S125C63v43Ev,
  (VTBL_ENTRY)&_ZN6S125C63v44Ev,
  (VTBL_ENTRY)&_ZN6S125C63v45Ev,
  (VTBL_ENTRY)&_ZN6S125C63v46Ev,
  (VTBL_ENTRY)&_ZN6S125C63v47Ev,
  (VTBL_ENTRY)&_ZN6S125C63v48Ev,
  (VTBL_ENTRY)&_ZN6S125C63v49Ev,
  (VTBL_ENTRY)&_ZN6S125C63v50Ev,
  (VTBL_ENTRY)&_ZN6S125C63v51Ev,
  (VTBL_ENTRY)&_ZN6S125C63v52Ev,
  (VTBL_ENTRY)&_ZN6S125C63v53Ev,
  (VTBL_ENTRY)&_ZN6S125C63v54Ev,
  (VTBL_ENTRY)&_ZN6S125C63v55Ev,
  (VTBL_ENTRY)&_ZN6S125C63v56Ev,
  (VTBL_ENTRY)&_ZN6S125C63v57Ev,
  (VTBL_ENTRY)&_ZN6S125C63v58Ev,
  (VTBL_ENTRY)&_ZN6S125C63v59Ev,
  (VTBL_ENTRY)&_ZN6S125C63v60Ev,
  (VTBL_ENTRY)&_ZN6S125C63v61Ev,
  (VTBL_ENTRY)&_ZN6S125C63v62Ev,
  (VTBL_ENTRY)&_ZN6S125C63v63Ev,
  (VTBL_ENTRY)&_ZN6S125C63v64Ev,
  (VTBL_ENTRY)&_ZN6S125C63v65Ev,
  (VTBL_ENTRY)&_ZN6S125C63v66Ev,
  (VTBL_ENTRY)&_ZN6S125C63v67Ev,
  (VTBL_ENTRY)&_ZN6S125C63v68Ev,
  (VTBL_ENTRY)&_ZN6S125C63v69Ev,
  (VTBL_ENTRY)&_ZN6S125C63v70Ev,
  (VTBL_ENTRY)&_ZN6S125C63v71Ev,
  (VTBL_ENTRY)&_ZN6S125C63v72Ev,
  (VTBL_ENTRY)&_ZN6S125C63v73Ev,
  (VTBL_ENTRY)&_ZN6S125C63v74Ev,
  (VTBL_ENTRY)&_ZN6S125C63v75Ev,
  (VTBL_ENTRY)&_ZN6S125C63v76Ev,
  (VTBL_ENTRY)&_ZN6S125C63v77Ev,
  (VTBL_ENTRY)&_ZN6S125C63v78Ev,
  (VTBL_ENTRY)&_ZN6S125C63v79Ev,
  (VTBL_ENTRY)&_ZN6S125C63v80Ev,
  (VTBL_ENTRY)&_ZN6S125C63v81Ev,
  (VTBL_ENTRY)&_ZN6S125C63v82Ev,
  (VTBL_ENTRY)&_ZN6S125C63v83Ev,
  (VTBL_ENTRY)&_ZN6S125C63v84Ev,
  (VTBL_ENTRY)&_ZN6S125C63v85Ev,
  (VTBL_ENTRY)&_ZN6S125C63v86Ev,
  (VTBL_ENTRY)&_ZN6S125C63v87Ev,
  (VTBL_ENTRY)&_ZN6S125C63v88Ev,
  (VTBL_ENTRY)&_ZN6S125C63v89Ev,
  (VTBL_ENTRY)&_ZN6S125C63v90Ev,
  (VTBL_ENTRY)&_ZN6S125C63v91Ev,
  (VTBL_ENTRY)&_ZN6S125C63v92Ev,
  (VTBL_ENTRY)&_ZN6S125C63v93Ev,
  (VTBL_ENTRY)&_ZN6S125C63v94Ev,
  (VTBL_ENTRY)&_ZN6S125C63v95Ev,
  (VTBL_ENTRY)&_ZN6S125C63v96Ev,
  (VTBL_ENTRY)&_ZN6S125C63v97Ev,
  (VTBL_ENTRY)&_ZN6S125C63v98Ev,
  (VTBL_ENTRY)&_ZN6S125C63v99Ev,
  (VTBL_ENTRY)&_ZN6S125C64v100Ev,
  (VTBL_ENTRY)&_ZN6S125C64v101Ev,
  (VTBL_ENTRY)&_ZN6S125C64v102Ev,
  (VTBL_ENTRY)&_ZN6S125C64v103Ev,
  (VTBL_ENTRY)&_ZN6S125C64v104Ev,
  (VTBL_ENTRY)&_ZN6S125C64v105Ev,
  (VTBL_ENTRY)&_ZN6S125C64v106Ev,
  (VTBL_ENTRY)&_ZN6S125C64v107Ev,
  (VTBL_ENTRY)&_ZN6S125C64v108Ev,
  (VTBL_ENTRY)&_ZN6S125C64v109Ev,
  (VTBL_ENTRY)&_ZN6S125C44v110Ev,
  (VTBL_ENTRY)&_ZN6S125C44v111Ev,
  (VTBL_ENTRY)&_ZN6S125C44v112Ev,
  (VTBL_ENTRY)&_ZN6S125C44v113Ev,
  (VTBL_ENTRY)&_ZN6S125C44v114Ev,
  (VTBL_ENTRY)&_ZN6S125C44v115Ev,
  (VTBL_ENTRY)&_ZN6S125C44v116Ev,
  (VTBL_ENTRY)&_ZN6S125C44v117Ev,
  (VTBL_ENTRY)&_ZN6S125C44v118Ev,
  (VTBL_ENTRY)&_ZN6S125C44v119Ev,
  (VTBL_ENTRY)&_ZN6S125C44v120Ev,
  (VTBL_ENTRY)&_ZN6S125C44v121Ev,
  (VTBL_ENTRY)&_ZN6S125C44v122Ev,
  (VTBL_ENTRY)&_ZN6S125C44v123Ev,
  (VTBL_ENTRY)&_ZN6S125C44v124Ev,
  (VTBL_ENTRY)&_ZN6S125C44v125Ev,
  (VTBL_ENTRY)&_ZN6S125C44v126Ev,
  (VTBL_ENTRY)&_ZN6S125C44v127Ev,
  (VTBL_ENTRY)&_ZN6S125C44v128Ev,
  (VTBL_ENTRY)&_ZN6S125C44v129Ev,
  (VTBL_ENTRY)&_ZN6S125C44v130Ev,
  (VTBL_ENTRY)&_ZN6S125C44v131Ev,
  (VTBL_ENTRY)&_ZN6S125C44v132Ev,
  (VTBL_ENTRY)&_ZN6S125C44v133Ev,
  (VTBL_ENTRY)&_ZN6S125C44v134Ev,
  (VTBL_ENTRY)&_ZN6S125C44v135Ev,
  (VTBL_ENTRY)&_ZN6S125C34v136Ev,
  (VTBL_ENTRY)&_ZN6S125C34v137Ev,
  (VTBL_ENTRY)&_ZN6S125C34v138Ev,
  (VTBL_ENTRY)&_ZN6S125C34v139Ev,
  (VTBL_ENTRY)&_ZN6S125C34v140Ev,
  (VTBL_ENTRY)&_ZN6S125C34v141Ev,
  (VTBL_ENTRY)&_ZN6S125C34v142Ev,
  (VTBL_ENTRY)&_ZN6S125C34v143Ev,
  (VTBL_ENTRY)&_ZN6S125C34v144Ev,
  (VTBL_ENTRY)&_ZN6S125C34v145Ev,
  (VTBL_ENTRY)&_ZN6S125C34v146Ev,
  (VTBL_ENTRY)&_ZN6S125C34v147Ev,
  (VTBL_ENTRY)&_ZN6S125C34v148Ev,
  (VTBL_ENTRY)&_ZN6S125C34v149Ev,
  (VTBL_ENTRY)&_ZN6S125C34v150Ev,
  (VTBL_ENTRY)&_ZN6S125C34v151Ev,
  (VTBL_ENTRY)&_ZN6S125C34v152Ev,
  (VTBL_ENTRY)&_ZN6S125C34v153Ev,
  (VTBL_ENTRY)&_ZN6S125C24v154Ev,
  (VTBL_ENTRY)&_ZN6S125C24v155Ev,
  (VTBL_ENTRY)&_ZN6S125C24v156Ev,
  (VTBL_ENTRY)&_ZN6S125C24v157Ev,
  (VTBL_ENTRY)&_ZN6S125C24v158Ev,
  (VTBL_ENTRY)&_ZN6S125C24v159Ev,
  (VTBL_ENTRY)&_ZN6S125C24v160Ev,
  (VTBL_ENTRY)&_ZN6S125C24v161Ev,
  (VTBL_ENTRY)&_ZN6S125C24v162Ev,
  (VTBL_ENTRY)&_ZN6S125C24v163Ev,
  (VTBL_ENTRY)&_ZN6S125C24v164Ev,
  (VTBL_ENTRY)&_ZN6S125C24v165Ev,
  (VTBL_ENTRY)&_ZN6S125C24v166Ev,
  (VTBL_ENTRY)&_ZN6S125C24v167Ev,
  (VTBL_ENTRY)&_ZN6S125C24v168Ev,
  (VTBL_ENTRY)&_ZN6S125C24v169Ev,
  (VTBL_ENTRY)&_ZN6S125C24v170Ev,
  (VTBL_ENTRY)&_ZN6S125C24v171Ev,
  (VTBL_ENTRY)&_ZN6S125C24v172Ev,
  (VTBL_ENTRY)&_ZN6S125C24v173Ev,
  (VTBL_ENTRY)&_ZN6S125C24v174Ev,
  (VTBL_ENTRY)&_ZN6S125C24v175Ev,
  (VTBL_ENTRY)&_ZN6S125C24v176Ev,
  (VTBL_ENTRY)&_ZN6S125C24v177Ev,
  (VTBL_ENTRY)&_ZN6S125C24v178Ev,
  (VTBL_ENTRY)&_ZN6S125C24v179Ev,
};
extern VTBL_ENTRY _ZTI6S125C2[];
extern  VTBL_ENTRY _ZTV6S125C2[];
Class_Descriptor cd_S125C2 = {  "S125C2", // class name
  bases_S125C2, 5,
  &(vtc_S125C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S125C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S125C2),181, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S125C1  : S125C2 {
  virtual void  v1(); // _ZN6S125C12v1Ev
  virtual void  v2(); // _ZN6S125C12v2Ev
  ~S125C1(); // tgen
  S125C1(); // tgen
};
//SIG(1 S125C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd m Fp Fi} 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 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 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} v1 v2}


void  S125C1 ::v1(){vfunc_called(this, "_ZN6S125C12v1Ev");}
void  S125C1 ::v2(){vfunc_called(this, "_ZN6S125C12v2Ev");}
S125C1 ::~S125C1(){ note_dtor("S125C1", this);} // tgen
S125C1 ::S125C1(){ note_ctor("S125C1", this);} // tgen

static void Test_S125C1()
{
  extern Class_Descriptor cd_S125C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S125C1, buf);
    S125C1 *dp, &lv = *(dp=new (buf) S125C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S125C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S125C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S125C6*)(S125C5*)(S125C4*)(S125C3*)(S125C2*), 0, "S125C1");
    check_base_class_offset(lv, (S125C6*)(S125C5*)(S125C4*)(S125C3*)(S125C2*), 0, "S125C1");
    check_base_class_offset(lv, (S125C5*)(S125C4*)(S125C3*)(S125C2*), 0, "S125C1");
    check_base_class_offset(lv, (S125C4*)(S125C3*)(S125C2*), 0, "S125C1");
    check_base_class_offset(lv, (S125C3*)(S125C2*), 0, "S125C1");
    check_base_class_offset(lv, (S125C2*), 0, "S125C1");
    test_class_info(&lv, &cd_S125C1);
    dp->~S125C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS125C1(Test_S125C1, "S125C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S125C1C1Ev();
extern void _ZN6S125C1D1Ev();
Name_Map name_map_S125C1[] = {
  NSPAIR(_ZN6S125C1C1Ev),
  NSPAIR(_ZN6S125C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S125C6;
extern VTBL_ENTRY _ZTI6S125C6[];
extern  VTBL_ENTRY _ZTV6S125C6[];
extern Class_Descriptor cd_S125C5;
extern VTBL_ENTRY _ZTI6S125C5[];
extern  VTBL_ENTRY _ZTV6S125C5[];
extern Class_Descriptor cd_S125C4;
extern VTBL_ENTRY _ZTI6S125C4[];
extern  VTBL_ENTRY _ZTV6S125C4[];
extern Class_Descriptor cd_S125C3;
extern VTBL_ENTRY _ZTI6S125C3[];
extern  VTBL_ENTRY _ZTV6S125C3[];
extern Class_Descriptor cd_S125C2;
extern VTBL_ENTRY _ZTI6S125C2[];
extern  VTBL_ENTRY _ZTV6S125C2[];
static Base_Class bases_S125C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S125C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S125C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S125C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S125C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S125C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S125C1[];
extern void _ZN6S125C1D1Ev();
extern void _ZN6S125C1D0Ev();
extern void _ZN6S125C62v3Ev();
extern void _ZN6S125C62v4Ev();
extern void _ZN6S125C62v5Ev();
extern void _ZN6S125C62v6Ev();
extern void _ZN6S125C62v7Ev();
extern void _ZN6S125C62v8Ev();
extern void _ZN6S125C62v9Ev();
extern void _ZN6S125C63v10Ev();
extern void _ZN6S125C63v11Ev();
extern void _ZN6S125C63v12Ev();
extern void _ZN6S125C63v13Ev();
extern void _ZN6S125C63v14Ev();
extern void _ZN6S125C63v15Ev();
extern void _ZN6S125C63v16Ev();
extern void _ZN6S125C63v17Ev();
extern void _ZN6S125C63v18Ev();
extern void _ZN6S125C63v19Ev();
extern void _ZN6S125C63v20Ev();
extern void _ZN6S125C63v21Ev();
extern void _ZN6S125C63v22Ev();
extern void _ZN6S125C63v23Ev();
extern void _ZN6S125C63v24Ev();
extern void _ZN6S125C63v25Ev();
extern void _ZN6S125C63v26Ev();
extern void _ZN6S125C63v27Ev();
extern void _ZN6S125C63v28Ev();
extern void _ZN6S125C63v29Ev();
extern void _ZN6S125C63v30Ev();
extern void _ZN6S125C63v31Ev();
extern void _ZN6S125C63v32Ev();
extern void _ZN6S125C63v33Ev();
extern void _ZN6S125C63v34Ev();
extern void _ZN6S125C63v35Ev();
extern void _ZN6S125C63v36Ev();
extern void _ZN6S125C63v37Ev();
extern void _ZN6S125C63v38Ev();
extern void _ZN6S125C63v39Ev();
extern void _ZN6S125C63v40Ev();
extern void _ZN6S125C63v41Ev();
extern void _ZN6S125C63v42Ev();
extern void _ZN6S125C63v43Ev();
extern void _ZN6S125C63v44Ev();
extern void _ZN6S125C63v45Ev();
extern void _ZN6S125C63v46Ev();
extern void _ZN6S125C63v47Ev();
extern void _ZN6S125C63v48Ev();
extern void _ZN6S125C63v49Ev();
extern void _ZN6S125C63v50Ev();
extern void _ZN6S125C63v51Ev();
extern void _ZN6S125C63v52Ev();
extern void _ZN6S125C63v53Ev();
extern void _ZN6S125C63v54Ev();
extern void _ZN6S125C63v55Ev();
extern void _ZN6S125C63v56Ev();
extern void _ZN6S125C63v57Ev();
extern void _ZN6S125C63v58Ev();
extern void _ZN6S125C63v59Ev();
extern void _ZN6S125C63v60Ev();
extern void _ZN6S125C63v61Ev();
extern void _ZN6S125C63v62Ev();
extern void _ZN6S125C63v63Ev();
extern void _ZN6S125C63v64Ev();
extern void _ZN6S125C63v65Ev();
extern void _ZN6S125C63v66Ev();
extern void _ZN6S125C63v67Ev();
extern void _ZN6S125C63v68Ev();
extern void _ZN6S125C63v69Ev();
extern void _ZN6S125C63v70Ev();
extern void _ZN6S125C63v71Ev();
extern void _ZN6S125C63v72Ev();
extern void _ZN6S125C63v73Ev();
extern void _ZN6S125C63v74Ev();
extern void _ZN6S125C63v75Ev();
extern void _ZN6S125C63v76Ev();
extern void _ZN6S125C63v77Ev();
extern void _ZN6S125C63v78Ev();
extern void _ZN6S125C63v79Ev();
extern void _ZN6S125C63v80Ev();
extern void _ZN6S125C63v81Ev();
extern void _ZN6S125C63v82Ev();
extern void _ZN6S125C63v83Ev();
extern void _ZN6S125C63v84Ev();
extern void _ZN6S125C63v85Ev();
extern void _ZN6S125C63v86Ev();
extern void _ZN6S125C63v87Ev();
extern void _ZN6S125C63v88Ev();
extern void _ZN6S125C63v89Ev();
extern void _ZN6S125C63v90Ev();
extern void _ZN6S125C63v91Ev();
extern void _ZN6S125C63v92Ev();
extern void _ZN6S125C63v93Ev();
extern void _ZN6S125C63v94Ev();
extern void _ZN6S125C63v95Ev();
extern void _ZN6S125C63v96Ev();
extern void _ZN6S125C63v97Ev();
extern void _ZN6S125C63v98Ev();
extern void _ZN6S125C63v99Ev();
extern void _ZN6S125C64v100Ev();
extern void _ZN6S125C64v101Ev();
extern void _ZN6S125C64v102Ev();
extern void _ZN6S125C64v103Ev();
extern void _ZN6S125C64v104Ev();
extern void _ZN6S125C64v105Ev();
extern void _ZN6S125C64v106Ev();
extern void _ZN6S125C64v107Ev();
extern void _ZN6S125C64v108Ev();
extern void _ZN6S125C64v109Ev();
extern void _ZN6S125C44v110Ev();
extern void _ZN6S125C44v111Ev();
extern void _ZN6S125C44v112Ev();
extern void _ZN6S125C44v113Ev();
extern void _ZN6S125C44v114Ev();
extern void _ZN6S125C44v115Ev();
extern void _ZN6S125C44v116Ev();
extern void _ZN6S125C44v117Ev();
extern void _ZN6S125C44v118Ev();
extern void _ZN6S125C44v119Ev();
extern void _ZN6S125C44v120Ev();
extern void _ZN6S125C44v121Ev();
extern void _ZN6S125C44v122Ev();
extern void _ZN6S125C44v123Ev();
extern void _ZN6S125C44v124Ev();
extern void _ZN6S125C44v125Ev();
extern void _ZN6S125C44v126Ev();
extern void _ZN6S125C44v127Ev();
extern void _ZN6S125C44v128Ev();
extern void _ZN6S125C44v129Ev();
extern void _ZN6S125C44v130Ev();
extern void _ZN6S125C44v131Ev();
extern void _ZN6S125C44v132Ev();
extern void _ZN6S125C44v133Ev();
extern void _ZN6S125C44v134Ev();
extern void _ZN6S125C44v135Ev();
extern void _ZN6S125C34v136Ev();
extern void _ZN6S125C34v137Ev();
extern void _ZN6S125C34v138Ev();
extern void _ZN6S125C34v139Ev();
extern void _ZN6S125C34v140Ev();
extern void _ZN6S125C34v141Ev();
extern void _ZN6S125C34v142Ev();
extern void _ZN6S125C34v143Ev();
extern void _ZN6S125C34v144Ev();
extern void _ZN6S125C34v145Ev();
extern void _ZN6S125C34v146Ev();
extern void _ZN6S125C34v147Ev();
extern void _ZN6S125C34v148Ev();
extern void _ZN6S125C34v149Ev();
extern void _ZN6S125C34v150Ev();
extern void _ZN6S125C34v151Ev();
extern void _ZN6S125C34v152Ev();
extern void _ZN6S125C34v153Ev();
extern void _ZN6S125C24v154Ev();
extern void _ZN6S125C24v155Ev();
extern void _ZN6S125C24v156Ev();
extern void _ZN6S125C24v157Ev();
extern void _ZN6S125C24v158Ev();
extern void _ZN6S125C24v159Ev();
extern void _ZN6S125C24v160Ev();
extern void _ZN6S125C24v161Ev();
extern void _ZN6S125C24v162Ev();
extern void _ZN6S125C24v163Ev();
extern void _ZN6S125C24v164Ev();
extern void _ZN6S125C24v165Ev();
extern void _ZN6S125C24v166Ev();
extern void _ZN6S125C24v167Ev();
extern void _ZN6S125C24v168Ev();
extern void _ZN6S125C24v169Ev();
extern void _ZN6S125C24v170Ev();
extern void _ZN6S125C24v171Ev();
extern void _ZN6S125C24v172Ev();
extern void _ZN6S125C24v173Ev();
extern void _ZN6S125C24v174Ev();
extern void _ZN6S125C24v175Ev();
extern void _ZN6S125C24v176Ev();
extern void _ZN6S125C24v177Ev();
extern void _ZN6S125C24v178Ev();
extern void _ZN6S125C24v179Ev();
extern void _ZN6S125C12v1Ev();
extern void _ZN6S125C12v2Ev();
static  VTBL_ENTRY vtc_S125C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S125C1[0]),
  (VTBL_ENTRY)&_ZN6S125C1D1Ev,
  (VTBL_ENTRY)&_ZN6S125C1D0Ev,
  (VTBL_ENTRY)&_ZN6S125C62v3Ev,
  (VTBL_ENTRY)&_ZN6S125C62v4Ev,
  (VTBL_ENTRY)&_ZN6S125C62v5Ev,
  (VTBL_ENTRY)&_ZN6S125C62v6Ev,
  (VTBL_ENTRY)&_ZN6S125C62v7Ev,
  (VTBL_ENTRY)&_ZN6S125C62v8Ev,
  (VTBL_ENTRY)&_ZN6S125C62v9Ev,
  (VTBL_ENTRY)&_ZN6S125C63v10Ev,
  (VTBL_ENTRY)&_ZN6S125C63v11Ev,
  (VTBL_ENTRY)&_ZN6S125C63v12Ev,
  (VTBL_ENTRY)&_ZN6S125C63v13Ev,
  (VTBL_ENTRY)&_ZN6S125C63v14Ev,
  (VTBL_ENTRY)&_ZN6S125C63v15Ev,
  (VTBL_ENTRY)&_ZN6S125C63v16Ev,
  (VTBL_ENTRY)&_ZN6S125C63v17Ev,
  (VTBL_ENTRY)&_ZN6S125C63v18Ev,
  (VTBL_ENTRY)&_ZN6S125C63v19Ev,
  (VTBL_ENTRY)&_ZN6S125C63v20Ev,
  (VTBL_ENTRY)&_ZN6S125C63v21Ev,
  (VTBL_ENTRY)&_ZN6S125C63v22Ev,
  (VTBL_ENTRY)&_ZN6S125C63v23Ev,
  (VTBL_ENTRY)&_ZN6S125C63v24Ev,
  (VTBL_ENTRY)&_ZN6S125C63v25Ev,
  (VTBL_ENTRY)&_ZN6S125C63v26Ev,
  (VTBL_ENTRY)&_ZN6S125C63v27Ev,
  (VTBL_ENTRY)&_ZN6S125C63v28Ev,
  (VTBL_ENTRY)&_ZN6S125C63v29Ev,
  (VTBL_ENTRY)&_ZN6S125C63v30Ev,
  (VTBL_ENTRY)&_ZN6S125C63v31Ev,
  (VTBL_ENTRY)&_ZN6S125C63v32Ev,
  (VTBL_ENTRY)&_ZN6S125C63v33Ev,
  (VTBL_ENTRY)&_ZN6S125C63v34Ev,
  (VTBL_ENTRY)&_ZN6S125C63v35Ev,
  (VTBL_ENTRY)&_ZN6S125C63v36Ev,
  (VTBL_ENTRY)&_ZN6S125C63v37Ev,
  (VTBL_ENTRY)&_ZN6S125C63v38Ev,
  (VTBL_ENTRY)&_ZN6S125C63v39Ev,
  (VTBL_ENTRY)&_ZN6S125C63v40Ev,
  (VTBL_ENTRY)&_ZN6S125C63v41Ev,
  (VTBL_ENTRY)&_ZN6S125C63v42Ev,
  (VTBL_ENTRY)&_ZN6S125C63v43Ev,
  (VTBL_ENTRY)&_ZN6S125C63v44Ev,
  (VTBL_ENTRY)&_ZN6S125C63v45Ev,
  (VTBL_ENTRY)&_ZN6S125C63v46Ev,
  (VTBL_ENTRY)&_ZN6S125C63v47Ev,
  (VTBL_ENTRY)&_ZN6S125C63v48Ev,
  (VTBL_ENTRY)&_ZN6S125C63v49Ev,
  (VTBL_ENTRY)&_ZN6S125C63v50Ev,
  (VTBL_ENTRY)&_ZN6S125C63v51Ev,
  (VTBL_ENTRY)&_ZN6S125C63v52Ev,
  (VTBL_ENTRY)&_ZN6S125C63v53Ev,
  (VTBL_ENTRY)&_ZN6S125C63v54Ev,
  (VTBL_ENTRY)&_ZN6S125C63v55Ev,
  (VTBL_ENTRY)&_ZN6S125C63v56Ev,
  (VTBL_ENTRY)&_ZN6S125C63v57Ev,
  (VTBL_ENTRY)&_ZN6S125C63v58Ev,
  (VTBL_ENTRY)&_ZN6S125C63v59Ev,
  (VTBL_ENTRY)&_ZN6S125C63v60Ev,
  (VTBL_ENTRY)&_ZN6S125C63v61Ev,
  (VTBL_ENTRY)&_ZN6S125C63v62Ev,
  (VTBL_ENTRY)&_ZN6S125C63v63Ev,
  (VTBL_ENTRY)&_ZN6S125C63v64Ev,
  (VTBL_ENTRY)&_ZN6S125C63v65Ev,
  (VTBL_ENTRY)&_ZN6S125C63v66Ev,
  (VTBL_ENTRY)&_ZN6S125C63v67Ev,
  (VTBL_ENTRY)&_ZN6S125C63v68Ev,
  (VTBL_ENTRY)&_ZN6S125C63v69Ev,
  (VTBL_ENTRY)&_ZN6S125C63v70Ev,
  (VTBL_ENTRY)&_ZN6S125C63v71Ev,
  (VTBL_ENTRY)&_ZN6S125C63v72Ev,
  (VTBL_ENTRY)&_ZN6S125C63v73Ev,
  (VTBL_ENTRY)&_ZN6S125C63v74Ev,
  (VTBL_ENTRY)&_ZN6S125C63v75Ev,
  (VTBL_ENTRY)&_ZN6S125C63v76Ev,
  (VTBL_ENTRY)&_ZN6S125C63v77Ev,
  (VTBL_ENTRY)&_ZN6S125C63v78Ev,
  (VTBL_ENTRY)&_ZN6S125C63v79Ev,
  (VTBL_ENTRY)&_ZN6S125C63v80Ev,
  (VTBL_ENTRY)&_ZN6S125C63v81Ev,
  (VTBL_ENTRY)&_ZN6S125C63v82Ev,
  (VTBL_ENTRY)&_ZN6S125C63v83Ev,
  (VTBL_ENTRY)&_ZN6S125C63v84Ev,
  (VTBL_ENTRY)&_ZN6S125C63v85Ev,
  (VTBL_ENTRY)&_ZN6S125C63v86Ev,
  (VTBL_ENTRY)&_ZN6S125C63v87Ev,
  (VTBL_ENTRY)&_ZN6S125C63v88Ev,
  (VTBL_ENTRY)&_ZN6S125C63v89Ev,
  (VTBL_ENTRY)&_ZN6S125C63v90Ev,
  (VTBL_ENTRY)&_ZN6S125C63v91Ev,
  (VTBL_ENTRY)&_ZN6S125C63v92Ev,
  (VTBL_ENTRY)&_ZN6S125C63v93Ev,
  (VTBL_ENTRY)&_ZN6S125C63v94Ev,
  (VTBL_ENTRY)&_ZN6S125C63v95Ev,
  (VTBL_ENTRY)&_ZN6S125C63v96Ev,
  (VTBL_ENTRY)&_ZN6S125C63v97Ev,
  (VTBL_ENTRY)&_ZN6S125C63v98Ev,
  (VTBL_ENTRY)&_ZN6S125C63v99Ev,
  (VTBL_ENTRY)&_ZN6S125C64v100Ev,
  (VTBL_ENTRY)&_ZN6S125C64v101Ev,
  (VTBL_ENTRY)&_ZN6S125C64v102Ev,
  (VTBL_ENTRY)&_ZN6S125C64v103Ev,
  (VTBL_ENTRY)&_ZN6S125C64v104Ev,
  (VTBL_ENTRY)&_ZN6S125C64v105Ev,
  (VTBL_ENTRY)&_ZN6S125C64v106Ev,
  (VTBL_ENTRY)&_ZN6S125C64v107Ev,
  (VTBL_ENTRY)&_ZN6S125C64v108Ev,
  (VTBL_ENTRY)&_ZN6S125C64v109Ev,
  (VTBL_ENTRY)&_ZN6S125C44v110Ev,
  (VTBL_ENTRY)&_ZN6S125C44v111Ev,
  (VTBL_ENTRY)&_ZN6S125C44v112Ev,
  (VTBL_ENTRY)&_ZN6S125C44v113Ev,
  (VTBL_ENTRY)&_ZN6S125C44v114Ev,
  (VTBL_ENTRY)&_ZN6S125C44v115Ev,
  (VTBL_ENTRY)&_ZN6S125C44v116Ev,
  (VTBL_ENTRY)&_ZN6S125C44v117Ev,
  (VTBL_ENTRY)&_ZN6S125C44v118Ev,
  (VTBL_ENTRY)&_ZN6S125C44v119Ev,
  (VTBL_ENTRY)&_ZN6S125C44v120Ev,
  (VTBL_ENTRY)&_ZN6S125C44v121Ev,
  (VTBL_ENTRY)&_ZN6S125C44v122Ev,
  (VTBL_ENTRY)&_ZN6S125C44v123Ev,
  (VTBL_ENTRY)&_ZN6S125C44v124Ev,
  (VTBL_ENTRY)&_ZN6S125C44v125Ev,
  (VTBL_ENTRY)&_ZN6S125C44v126Ev,
  (VTBL_ENTRY)&_ZN6S125C44v127Ev,
  (VTBL_ENTRY)&_ZN6S125C44v128Ev,
  (VTBL_ENTRY)&_ZN6S125C44v129Ev,
  (VTBL_ENTRY)&_ZN6S125C44v130Ev,
  (VTBL_ENTRY)&_ZN6S125C44v131Ev,
  (VTBL_ENTRY)&_ZN6S125C44v132Ev,
  (VTBL_ENTRY)&_ZN6S125C44v133Ev,
  (VTBL_ENTRY)&_ZN6S125C44v134Ev,
  (VTBL_ENTRY)&_ZN6S125C44v135Ev,
  (VTBL_ENTRY)&_ZN6S125C34v136Ev,
  (VTBL_ENTRY)&_ZN6S125C34v137Ev,
  (VTBL_ENTRY)&_ZN6S125C34v138Ev,
  (VTBL_ENTRY)&_ZN6S125C34v139Ev,
  (VTBL_ENTRY)&_ZN6S125C34v140Ev,
  (VTBL_ENTRY)&_ZN6S125C34v141Ev,
  (VTBL_ENTRY)&_ZN6S125C34v142Ev,
  (VTBL_ENTRY)&_ZN6S125C34v143Ev,
  (VTBL_ENTRY)&_ZN6S125C34v144Ev,
  (VTBL_ENTRY)&_ZN6S125C34v145Ev,
  (VTBL_ENTRY)&_ZN6S125C34v146Ev,
  (VTBL_ENTRY)&_ZN6S125C34v147Ev,
  (VTBL_ENTRY)&_ZN6S125C34v148Ev,
  (VTBL_ENTRY)&_ZN6S125C34v149Ev,
  (VTBL_ENTRY)&_ZN6S125C34v150Ev,
  (VTBL_ENTRY)&_ZN6S125C34v151Ev,
  (VTBL_ENTRY)&_ZN6S125C34v152Ev,
  (VTBL_ENTRY)&_ZN6S125C34v153Ev,
  (VTBL_ENTRY)&_ZN6S125C24v154Ev,
  (VTBL_ENTRY)&_ZN6S125C24v155Ev,
  (VTBL_ENTRY)&_ZN6S125C24v156Ev,
  (VTBL_ENTRY)&_ZN6S125C24v157Ev,
  (VTBL_ENTRY)&_ZN6S125C24v158Ev,
  (VTBL_ENTRY)&_ZN6S125C24v159Ev,
  (VTBL_ENTRY)&_ZN6S125C24v160Ev,
  (VTBL_ENTRY)&_ZN6S125C24v161Ev,
  (VTBL_ENTRY)&_ZN6S125C24v162Ev,
  (VTBL_ENTRY)&_ZN6S125C24v163Ev,
  (VTBL_ENTRY)&_ZN6S125C24v164Ev,
  (VTBL_ENTRY)&_ZN6S125C24v165Ev,
  (VTBL_ENTRY)&_ZN6S125C24v166Ev,
  (VTBL_ENTRY)&_ZN6S125C24v167Ev,
  (VTBL_ENTRY)&_ZN6S125C24v168Ev,
  (VTBL_ENTRY)&_ZN6S125C24v169Ev,
  (VTBL_ENTRY)&_ZN6S125C24v170Ev,
  (VTBL_ENTRY)&_ZN6S125C24v171Ev,
  (VTBL_ENTRY)&_ZN6S125C24v172Ev,
  (VTBL_ENTRY)&_ZN6S125C24v173Ev,
  (VTBL_ENTRY)&_ZN6S125C24v174Ev,
  (VTBL_ENTRY)&_ZN6S125C24v175Ev,
  (VTBL_ENTRY)&_ZN6S125C24v176Ev,
  (VTBL_ENTRY)&_ZN6S125C24v177Ev,
  (VTBL_ENTRY)&_ZN6S125C24v178Ev,
  (VTBL_ENTRY)&_ZN6S125C24v179Ev,
  (VTBL_ENTRY)&_ZN6S125C12v1Ev,
  (VTBL_ENTRY)&_ZN6S125C12v2Ev,
};
extern VTBL_ENTRY _ZTI6S125C1[];
extern  VTBL_ENTRY _ZTV6S125C1[];
Class_Descriptor cd_S125C1 = {  "S125C1", // class name
  bases_S125C1, 6,
  &(vtc_S125C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S125C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S125C1),183, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S124C6  : S1C11_nt {
  virtual void  v2(); // _ZN6S124C62v2Ev
  virtual void  v3(); // _ZN6S124C62v3Ev
  virtual void  v4(); // _ZN6S124C62v4Ev
  virtual void  v5(); // _ZN6S124C62v5Ev
  virtual void  v6(); // _ZN6S124C62v6Ev
  virtual void  v7(); // _ZN6S124C62v7Ev
  virtual void  v8(); // _ZN6S124C62v8Ev
  virtual void  v9(); // _ZN6S124C62v9Ev
  virtual void  v10(); // _ZN6S124C63v10Ev
  virtual void  v11(); // _ZN6S124C63v11Ev
  virtual void  v12(); // _ZN6S124C63v12Ev
  virtual void  v13(); // _ZN6S124C63v13Ev
  virtual void  v14(); // _ZN6S124C63v14Ev
  virtual void  v15(); // _ZN6S124C63v15Ev
  virtual void  v16(); // _ZN6S124C63v16Ev
  virtual void  v17(); // _ZN6S124C63v17Ev
  virtual void  v18(); // _ZN6S124C63v18Ev
  virtual void  v19(); // _ZN6S124C63v19Ev
  virtual void  v20(); // _ZN6S124C63v20Ev
  virtual void  v21(); // _ZN6S124C63v21Ev
  virtual void  v22(); // _ZN6S124C63v22Ev
  virtual void  v23(); // _ZN6S124C63v23Ev
  virtual void  v24(); // _ZN6S124C63v24Ev
  virtual void  v25(); // _ZN6S124C63v25Ev
  virtual void  v26(); // _ZN6S124C63v26Ev
  virtual void  v27(); // _ZN6S124C63v27Ev
  virtual void  v28(); // _ZN6S124C63v28Ev
  virtual void  v29(); // _ZN6S124C63v29Ev
  virtual void  v30(); // _ZN6S124C63v30Ev
  virtual void  v31(); // _ZN6S124C63v31Ev
  virtual void  v32(); // _ZN6S124C63v32Ev
  virtual void  v33(); // _ZN6S124C63v33Ev
  virtual void  v34(); // _ZN6S124C63v34Ev
  virtual void  v35(); // _ZN6S124C63v35Ev
  virtual void  v36(); // _ZN6S124C63v36Ev
  virtual void  v37(); // _ZN6S124C63v37Ev
  virtual void  v38(); // _ZN6S124C63v38Ev
  virtual void  v39(); // _ZN6S124C63v39Ev
  virtual void  v40(); // _ZN6S124C63v40Ev
  virtual void  v41(); // _ZN6S124C63v41Ev
  virtual void  v42(); // _ZN6S124C63v42Ev
  virtual void  v43(); // _ZN6S124C63v43Ev
  virtual void  v44(); // _ZN6S124C63v44Ev
  virtual void  v45(); // _ZN6S124C63v45Ev
  virtual void  v46(); // _ZN6S124C63v46Ev
  virtual void  v47(); // _ZN6S124C63v47Ev
  virtual void  v48(); // _ZN6S124C63v48Ev
  virtual void  v49(); // _ZN6S124C63v49Ev
  virtual void  v50(); // _ZN6S124C63v50Ev
  virtual void  v51(); // _ZN6S124C63v51Ev
  virtual void  v52(); // _ZN6S124C63v52Ev
  virtual void  v53(); // _ZN6S124C63v53Ev
  virtual void  v54(); // _ZN6S124C63v54Ev
  virtual void  v55(); // _ZN6S124C63v55Ev
  virtual void  v56(); // _ZN6S124C63v56Ev
  virtual void  v57(); // _ZN6S124C63v57Ev
  virtual void  v58(); // _ZN6S124C63v58Ev
  virtual void  v59(); // _ZN6S124C63v59Ev
  virtual void  v60(); // _ZN6S124C63v60Ev
  virtual void  v61(); // _ZN6S124C63v61Ev
  virtual void  v62(); // _ZN6S124C63v62Ev
  virtual void  v63(); // _ZN6S124C63v63Ev
  virtual void  v64(); // _ZN6S124C63v64Ev
  virtual void  v65(); // _ZN6S124C63v65Ev
  virtual void  v66(); // _ZN6S124C63v66Ev
  virtual void  v67(); // _ZN6S124C63v67Ev
  virtual void  v68(); // _ZN6S124C63v68Ev
  virtual void  v69(); // _ZN6S124C63v69Ev
  virtual void  v70(); // _ZN6S124C63v70Ev
  virtual void  v71(); // _ZN6S124C63v71Ev
  virtual void  v72(); // _ZN6S124C63v72Ev
  virtual void  v73(); // _ZN6S124C63v73Ev
  virtual void  v74(); // _ZN6S124C63v74Ev
  virtual void  v75(); // _ZN6S124C63v75Ev
  virtual void  v76(); // _ZN6S124C63v76Ev
  virtual void  v77(); // _ZN6S124C63v77Ev
  virtual void  v78(); // _ZN6S124C63v78Ev
  virtual void  v79(); // _ZN6S124C63v79Ev
  virtual void  v80(); // _ZN6S124C63v80Ev
  virtual void  v81(); // _ZN6S124C63v81Ev
  virtual void  v82(); // _ZN6S124C63v82Ev
  virtual void  v83(); // _ZN6S124C63v83Ev
  virtual void  v84(); // _ZN6S124C63v84Ev
  virtual void  v85(); // _ZN6S124C63v85Ev
  virtual void  v86(); // _ZN6S124C63v86Ev
  virtual void  v87(); // _ZN6S124C63v87Ev
  virtual void  v88(); // _ZN6S124C63v88Ev
  virtual void  v89(); // _ZN6S124C63v89Ev
  virtual void  v90(); // _ZN6S124C63v90Ev
  virtual void  v91(); // _ZN6S124C63v91Ev
  virtual void  v92(); // _ZN6S124C63v92Ev
  virtual void  v93(); // _ZN6S124C63v93Ev
  virtual void  v94(); // _ZN6S124C63v94Ev
  virtual void  v95(); // _ZN6S124C63v95Ev
  virtual void  v96(); // _ZN6S124C63v96Ev
  virtual void  v97(); // _ZN6S124C63v97Ev
  virtual void  v98(); // _ZN6S124C63v98Ev
  virtual void  v99(); // _ZN6S124C63v99Ev
  virtual void  v100(); // _ZN6S124C64v100Ev
  virtual void  v101(); // _ZN6S124C64v101Ev
  virtual void  v102(); // _ZN6S124C64v102Ev
  virtual void  v103(); // _ZN6S124C64v103Ev
  virtual void  v104(); // _ZN6S124C64v104Ev
  virtual void  v105(); // _ZN6S124C64v105Ev
  virtual void  v106(); // _ZN6S124C64v106Ev
  virtual void  v107(); // _ZN6S124C64v107Ev
  virtual void  v108(); // _ZN6S124C64v108Ev
  ~S124C6(); // tgen
  S124C6(); // tgen
};
//SIG(-1 S124C6) C1{ BC2{ vd m Fp Fi} 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 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}


void  S124C6 ::v2(){vfunc_called(this, "_ZN6S124C62v2Ev");}
void  S124C6 ::v3(){vfunc_called(this, "_ZN6S124C62v3Ev");}
void  S124C6 ::v4(){vfunc_called(this, "_ZN6S124C62v4Ev");}
void  S124C6 ::v5(){vfunc_called(this, "_ZN6S124C62v5Ev");}
void  S124C6 ::v6(){vfunc_called(this, "_ZN6S124C62v6Ev");}
void  S124C6 ::v7(){vfunc_called(this, "_ZN6S124C62v7Ev");}
void  S124C6 ::v8(){vfunc_called(this, "_ZN6S124C62v8Ev");}
void  S124C6 ::v9(){vfunc_called(this, "_ZN6S124C62v9Ev");}
void  S124C6 ::v10(){vfunc_called(this, "_ZN6S124C63v10Ev");}
void  S124C6 ::v11(){vfunc_called(this, "_ZN6S124C63v11Ev");}
void  S124C6 ::v12(){vfunc_called(this, "_ZN6S124C63v12Ev");}
void  S124C6 ::v13(){vfunc_called(this, "_ZN6S124C63v13Ev");}
void  S124C6 ::v14(){vfunc_called(this, "_ZN6S124C63v14Ev");}
void  S124C6 ::v15(){vfunc_called(this, "_ZN6S124C63v15Ev");}
void  S124C6 ::v16(){vfunc_called(this, "_ZN6S124C63v16Ev");}
void  S124C6 ::v17(){vfunc_called(this, "_ZN6S124C63v17Ev");}
void  S124C6 ::v18(){vfunc_called(this, "_ZN6S124C63v18Ev");}
void  S124C6 ::v19(){vfunc_called(this, "_ZN6S124C63v19Ev");}
void  S124C6 ::v20(){vfunc_called(this, "_ZN6S124C63v20Ev");}
void  S124C6 ::v21(){vfunc_called(this, "_ZN6S124C63v21Ev");}
void  S124C6 ::v22(){vfunc_called(this, "_ZN6S124C63v22Ev");}
void  S124C6 ::v23(){vfunc_called(this, "_ZN6S124C63v23Ev");}
void  S124C6 ::v24(){vfunc_called(this, "_ZN6S124C63v24Ev");}
void  S124C6 ::v25(){vfunc_called(this, "_ZN6S124C63v25Ev");}
void  S124C6 ::v26(){vfunc_called(this, "_ZN6S124C63v26Ev");}
void  S124C6 ::v27(){vfunc_called(this, "_ZN6S124C63v27Ev");}
void  S124C6 ::v28(){vfunc_called(this, "_ZN6S124C63v28Ev");}
void  S124C6 ::v29(){vfunc_called(this, "_ZN6S124C63v29Ev");}
void  S124C6 ::v30(){vfunc_called(this, "_ZN6S124C63v30Ev");}
void  S124C6 ::v31(){vfunc_called(this, "_ZN6S124C63v31Ev");}
void  S124C6 ::v32(){vfunc_called(this, "_ZN6S124C63v32Ev");}
void  S124C6 ::v33(){vfunc_called(this, "_ZN6S124C63v33Ev");}
void  S124C6 ::v34(){vfunc_called(this, "_ZN6S124C63v34Ev");}
void  S124C6 ::v35(){vfunc_called(this, "_ZN6S124C63v35Ev");}
void  S124C6 ::v36(){vfunc_called(this, "_ZN6S124C63v36Ev");}
void  S124C6 ::v37(){vfunc_called(this, "_ZN6S124C63v37Ev");}
void  S124C6 ::v38(){vfunc_called(this, "_ZN6S124C63v38Ev");}
void  S124C6 ::v39(){vfunc_called(this, "_ZN6S124C63v39Ev");}
void  S124C6 ::v40(){vfunc_called(this, "_ZN6S124C63v40Ev");}
void  S124C6 ::v41(){vfunc_called(this, "_ZN6S124C63v41Ev");}
void  S124C6 ::v42(){vfunc_called(this, "_ZN6S124C63v42Ev");}
void  S124C6 ::v43(){vfunc_called(this, "_ZN6S124C63v43Ev");}
void  S124C6 ::v44(){vfunc_called(this, "_ZN6S124C63v44Ev");}
void  S124C6 ::v45(){vfunc_called(this, "_ZN6S124C63v45Ev");}
void  S124C6 ::v46(){vfunc_called(this, "_ZN6S124C63v46Ev");}
void  S124C6 ::v47(){vfunc_called(this, "_ZN6S124C63v47Ev");}
void  S124C6 ::v48(){vfunc_called(this, "_ZN6S124C63v48Ev");}
void  S124C6 ::v49(){vfunc_called(this, "_ZN6S124C63v49Ev");}
void  S124C6 ::v50(){vfunc_called(this, "_ZN6S124C63v50Ev");}
void  S124C6 ::v51(){vfunc_called(this, "_ZN6S124C63v51Ev");}
void  S124C6 ::v52(){vfunc_called(this, "_ZN6S124C63v52Ev");}
void  S124C6 ::v53(){vfunc_called(this, "_ZN6S124C63v53Ev");}
void  S124C6 ::v54(){vfunc_called(this, "_ZN6S124C63v54Ev");}
void  S124C6 ::v55(){vfunc_called(this, "_ZN6S124C63v55Ev");}
void  S124C6 ::v56(){vfunc_called(this, "_ZN6S124C63v56Ev");}
void  S124C6 ::v57(){vfunc_called(this, "_ZN6S124C63v57Ev");}
void  S124C6 ::v58(){vfunc_called(this, "_ZN6S124C63v58Ev");}
void  S124C6 ::v59(){vfunc_called(this, "_ZN6S124C63v59Ev");}
void  S124C6 ::v60(){vfunc_called(this, "_ZN6S124C63v60Ev");}
void  S124C6 ::v61(){vfunc_called(this, "_ZN6S124C63v61Ev");}
void  S124C6 ::v62(){vfunc_called(this, "_ZN6S124C63v62Ev");}
void  S124C6 ::v63(){vfunc_called(this, "_ZN6S124C63v63Ev");}
void  S124C6 ::v64(){vfunc_called(this, "_ZN6S124C63v64Ev");}
void  S124C6 ::v65(){vfunc_called(this, "_ZN6S124C63v65Ev");}
void  S124C6 ::v66(){vfunc_called(this, "_ZN6S124C63v66Ev");}
void  S124C6 ::v67(){vfunc_called(this, "_ZN6S124C63v67Ev");}
void  S124C6 ::v68(){vfunc_called(this, "_ZN6S124C63v68Ev");}
void  S124C6 ::v69(){vfunc_called(this, "_ZN6S124C63v69Ev");}
void  S124C6 ::v70(){vfunc_called(this, "_ZN6S124C63v70Ev");}
void  S124C6 ::v71(){vfunc_called(this, "_ZN6S124C63v71Ev");}
void  S124C6 ::v72(){vfunc_called(this, "_ZN6S124C63v72Ev");}
void  S124C6 ::v73(){vfunc_called(this, "_ZN6S124C63v73Ev");}
void  S124C6 ::v74(){vfunc_called(this, "_ZN6S124C63v74Ev");}
void  S124C6 ::v75(){vfunc_called(this, "_ZN6S124C63v75Ev");}
void  S124C6 ::v76(){vfunc_called(this, "_ZN6S124C63v76Ev");}
void  S124C6 ::v77(){vfunc_called(this, "_ZN6S124C63v77Ev");}
void  S124C6 ::v78(){vfunc_called(this, "_ZN6S124C63v78Ev");}
void  S124C6 ::v79(){vfunc_called(this, "_ZN6S124C63v79Ev");}
void  S124C6 ::v80(){vfunc_called(this, "_ZN6S124C63v80Ev");}
void  S124C6 ::v81(){vfunc_called(this, "_ZN6S124C63v81Ev");}
void  S124C6 ::v82(){vfunc_called(this, "_ZN6S124C63v82Ev");}
void  S124C6 ::v83(){vfunc_called(this, "_ZN6S124C63v83Ev");}
void  S124C6 ::v84(){vfunc_called(this, "_ZN6S124C63v84Ev");}
void  S124C6 ::v85(){vfunc_called(this, "_ZN6S124C63v85Ev");}
void  S124C6 ::v86(){vfunc_called(this, "_ZN6S124C63v86Ev");}
void  S124C6 ::v87(){vfunc_called(this, "_ZN6S124C63v87Ev");}
void  S124C6 ::v88(){vfunc_called(this, "_ZN6S124C63v88Ev");}
void  S124C6 ::v89(){vfunc_called(this, "_ZN6S124C63v89Ev");}
void  S124C6 ::v90(){vfunc_called(this, "_ZN6S124C63v90Ev");}
void  S124C6 ::v91(){vfunc_called(this, "_ZN6S124C63v91Ev");}
void  S124C6 ::v92(){vfunc_called(this, "_ZN6S124C63v92Ev");}
void  S124C6 ::v93(){vfunc_called(this, "_ZN6S124C63v93Ev");}
void  S124C6 ::v94(){vfunc_called(this, "_ZN6S124C63v94Ev");}
void  S124C6 ::v95(){vfunc_called(this, "_ZN6S124C63v95Ev");}
void  S124C6 ::v96(){vfunc_called(this, "_ZN6S124C63v96Ev");}
void  S124C6 ::v97(){vfunc_called(this, "_ZN6S124C63v97Ev");}
void  S124C6 ::v98(){vfunc_called(this, "_ZN6S124C63v98Ev");}
void  S124C6 ::v99(){vfunc_called(this, "_ZN6S124C63v99Ev");}
void  S124C6 ::v100(){vfunc_called(this, "_ZN6S124C64v100Ev");}
void  S124C6 ::v101(){vfunc_called(this, "_ZN6S124C64v101Ev");}
void  S124C6 ::v102(){vfunc_called(this, "_ZN6S124C64v102Ev");}
void  S124C6 ::v103(){vfunc_called(this, "_ZN6S124C64v103Ev");}
void  S124C6 ::v104(){vfunc_called(this, "_ZN6S124C64v104Ev");}
void  S124C6 ::v105(){vfunc_called(this, "_ZN6S124C64v105Ev");}
void  S124C6 ::v106(){vfunc_called(this, "_ZN6S124C64v106Ev");}
void  S124C6 ::v107(){vfunc_called(this, "_ZN6S124C64v107Ev");}
void  S124C6 ::v108(){vfunc_called(this, "_ZN6S124C64v108Ev");}
S124C6 ::~S124C6(){ note_dtor("S124C6", this);} // tgen
S124C6 ::S124C6(){ note_ctor("S124C6", this);} // tgen

static void Test_S124C6()
{
  extern Class_Descriptor cd_S124C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S124C6, buf);
    S124C6 *dp, &lv = *(dp=new (buf) S124C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S124C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S124C6)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S124C6");
    test_class_info(&lv, &cd_S124C6);
    dp->~S124C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS124C6(Test_S124C6, "S124C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S124C6C1Ev();
extern void _ZN6S124C6D1Ev();
Name_Map name_map_S124C6[] = {
  NSPAIR(_ZN6S124C6C1Ev),
  NSPAIR(_ZN6S124C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S124C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI6S124C6[];
extern void _ZN6S124C6D1Ev();
extern void _ZN6S124C6D0Ev();
extern void _ZN6S124C62v2Ev();
extern void _ZN6S124C62v3Ev();
extern void _ZN6S124C62v4Ev();
extern void _ZN6S124C62v5Ev();
extern void _ZN6S124C62v6Ev();
extern void _ZN6S124C62v7Ev();
extern void _ZN6S124C62v8Ev();
extern void _ZN6S124C62v9Ev();
extern void _ZN6S124C63v10Ev();
extern void _ZN6S124C63v11Ev();
extern void _ZN6S124C63v12Ev();
extern void _ZN6S124C63v13Ev();
extern void _ZN6S124C63v14Ev();
extern void _ZN6S124C63v15Ev();
extern void _ZN6S124C63v16Ev();
extern void _ZN6S124C63v17Ev();
extern void _ZN6S124C63v18Ev();
extern void _ZN6S124C63v19Ev();
extern void _ZN6S124C63v20Ev();
extern void _ZN6S124C63v21Ev();
extern void _ZN6S124C63v22Ev();
extern void _ZN6S124C63v23Ev();
extern void _ZN6S124C63v24Ev();
extern void _ZN6S124C63v25Ev();
extern void _ZN6S124C63v26Ev();
extern void _ZN6S124C63v27Ev();
extern void _ZN6S124C63v28Ev();
extern void _ZN6S124C63v29Ev();
extern void _ZN6S124C63v30Ev();
extern void _ZN6S124C63v31Ev();
extern void _ZN6S124C63v32Ev();
extern void _ZN6S124C63v33Ev();
extern void _ZN6S124C63v34Ev();
extern void _ZN6S124C63v35Ev();
extern void _ZN6S124C63v36Ev();
extern void _ZN6S124C63v37Ev();
extern void _ZN6S124C63v38Ev();
extern void _ZN6S124C63v39Ev();
extern void _ZN6S124C63v40Ev();
extern void _ZN6S124C63v41Ev();
extern void _ZN6S124C63v42Ev();
extern void _ZN6S124C63v43Ev();
extern void _ZN6S124C63v44Ev();
extern void _ZN6S124C63v45Ev();
extern void _ZN6S124C63v46Ev();
extern void _ZN6S124C63v47Ev();
extern void _ZN6S124C63v48Ev();
extern void _ZN6S124C63v49Ev();
extern void _ZN6S124C63v50Ev();
extern void _ZN6S124C63v51Ev();
extern void _ZN6S124C63v52Ev();
extern void _ZN6S124C63v53Ev();
extern void _ZN6S124C63v54Ev();
extern void _ZN6S124C63v55Ev();
extern void _ZN6S124C63v56Ev();
extern void _ZN6S124C63v57Ev();
extern void _ZN6S124C63v58Ev();
extern void _ZN6S124C63v59Ev();
extern void _ZN6S124C63v60Ev();
extern void _ZN6S124C63v61Ev();
extern void _ZN6S124C63v62Ev();
extern void _ZN6S124C63v63Ev();
extern void _ZN6S124C63v64Ev();
extern void _ZN6S124C63v65Ev();
extern void _ZN6S124C63v66Ev();
extern void _ZN6S124C63v67Ev();
extern void _ZN6S124C63v68Ev();
extern void _ZN6S124C63v69Ev();
extern void _ZN6S124C63v70Ev();
extern void _ZN6S124C63v71Ev();
extern void _ZN6S124C63v72Ev();
extern void _ZN6S124C63v73Ev();
extern void _ZN6S124C63v74Ev();
extern void _ZN6S124C63v75Ev();
extern void _ZN6S124C63v76Ev();
extern void _ZN6S124C63v77Ev();
extern void _ZN6S124C63v78Ev();
extern void _ZN6S124C63v79Ev();
extern void _ZN6S124C63v80Ev();
extern void _ZN6S124C63v81Ev();
extern void _ZN6S124C63v82Ev();
extern void _ZN6S124C63v83Ev();
extern void _ZN6S124C63v84Ev();
extern void _ZN6S124C63v85Ev();
extern void _ZN6S124C63v86Ev();
extern void _ZN6S124C63v87Ev();
extern void _ZN6S124C63v88Ev();
extern void _ZN6S124C63v89Ev();
extern void _ZN6S124C63v90Ev();
extern void _ZN6S124C63v91Ev();
extern void _ZN6S124C63v92Ev();
extern void _ZN6S124C63v93Ev();
extern void _ZN6S124C63v94Ev();
extern void _ZN6S124C63v95Ev();
extern void _ZN6S124C63v96Ev();
extern void _ZN6S124C63v97Ev();
extern void _ZN6S124C63v98Ev();
extern void _ZN6S124C63v99Ev();
extern void _ZN6S124C64v100Ev();
extern void _ZN6S124C64v101Ev();
extern void _ZN6S124C64v102Ev();
extern void _ZN6S124C64v103Ev();
extern void _ZN6S124C64v104Ev();
extern void _ZN6S124C64v105Ev();
extern void _ZN6S124C64v106Ev();
extern void _ZN6S124C64v107Ev();
extern void _ZN6S124C64v108Ev();
static  VTBL_ENTRY vtc_S124C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S124C6[0]),
  (VTBL_ENTRY)&_ZN6S124C6D1Ev,
  (VTBL_ENTRY)&_ZN6S124C6D0Ev,
  (VTBL_ENTRY)&_ZN6S124C62v2Ev,
  (VTBL_ENTRY)&_ZN6S124C62v3Ev,
  (VTBL_ENTRY)&_ZN6S124C62v4Ev,
  (VTBL_ENTRY)&_ZN6S124C62v5Ev,
  (VTBL_ENTRY)&_ZN6S124C62v6Ev,
  (VTBL_ENTRY)&_ZN6S124C62v7Ev,
  (VTBL_ENTRY)&_ZN6S124C62v8Ev,
  (VTBL_ENTRY)&_ZN6S124C62v9Ev,
  (VTBL_ENTRY)&_ZN6S124C63v10Ev,
  (VTBL_ENTRY)&_ZN6S124C63v11Ev,
  (VTBL_ENTRY)&_ZN6S124C63v12Ev,
  (VTBL_ENTRY)&_ZN6S124C63v13Ev,
  (VTBL_ENTRY)&_ZN6S124C63v14Ev,
  (VTBL_ENTRY)&_ZN6S124C63v15Ev,
  (VTBL_ENTRY)&_ZN6S124C63v16Ev,
  (VTBL_ENTRY)&_ZN6S124C63v17Ev,
  (VTBL_ENTRY)&_ZN6S124C63v18Ev,
  (VTBL_ENTRY)&_ZN6S124C63v19Ev,
  (VTBL_ENTRY)&_ZN6S124C63v20Ev,
  (VTBL_ENTRY)&_ZN6S124C63v21Ev,
  (VTBL_ENTRY)&_ZN6S124C63v22Ev,
  (VTBL_ENTRY)&_ZN6S124C63v23Ev,
  (VTBL_ENTRY)&_ZN6S124C63v24Ev,
  (VTBL_ENTRY)&_ZN6S124C63v25Ev,
  (VTBL_ENTRY)&_ZN6S124C63v26Ev,
  (VTBL_ENTRY)&_ZN6S124C63v27Ev,
  (VTBL_ENTRY)&_ZN6S124C63v28Ev,
  (VTBL_ENTRY)&_ZN6S124C63v29Ev,
  (VTBL_ENTRY)&_ZN6S124C63v30Ev,
  (VTBL_ENTRY)&_ZN6S124C63v31Ev,
  (VTBL_ENTRY)&_ZN6S124C63v32Ev,
  (VTBL_ENTRY)&_ZN6S124C63v33Ev,
  (VTBL_ENTRY)&_ZN6S124C63v34Ev,
  (VTBL_ENTRY)&_ZN6S124C63v35Ev,
  (VTBL_ENTRY)&_ZN6S124C63v36Ev,
  (VTBL_ENTRY)&_ZN6S124C63v37Ev,
  (VTBL_ENTRY)&_ZN6S124C63v38Ev,
  (VTBL_ENTRY)&_ZN6S124C63v39Ev,
  (VTBL_ENTRY)&_ZN6S124C63v40Ev,
  (VTBL_ENTRY)&_ZN6S124C63v41Ev,
  (VTBL_ENTRY)&_ZN6S124C63v42Ev,
  (VTBL_ENTRY)&_ZN6S124C63v43Ev,
  (VTBL_ENTRY)&_ZN6S124C63v44Ev,
  (VTBL_ENTRY)&_ZN6S124C63v45Ev,
  (VTBL_ENTRY)&_ZN6S124C63v46Ev,
  (VTBL_ENTRY)&_ZN6S124C63v47Ev,
  (VTBL_ENTRY)&_ZN6S124C63v48Ev,
  (VTBL_ENTRY)&_ZN6S124C63v49Ev,
  (VTBL_ENTRY)&_ZN6S124C63v50Ev,
  (VTBL_ENTRY)&_ZN6S124C63v51Ev,
  (VTBL_ENTRY)&_ZN6S124C63v52Ev,
  (VTBL_ENTRY)&_ZN6S124C63v53Ev,
  (VTBL_ENTRY)&_ZN6S124C63v54Ev,
  (VTBL_ENTRY)&_ZN6S124C63v55Ev,
  (VTBL_ENTRY)&_ZN6S124C63v56Ev,
  (VTBL_ENTRY)&_ZN6S124C63v57Ev,
  (VTBL_ENTRY)&_ZN6S124C63v58Ev,
  (VTBL_ENTRY)&_ZN6S124C63v59Ev,
  (VTBL_ENTRY)&_ZN6S124C63v60Ev,
  (VTBL_ENTRY)&_ZN6S124C63v61Ev,
  (VTBL_ENTRY)&_ZN6S124C63v62Ev,
  (VTBL_ENTRY)&_ZN6S124C63v63Ev,
  (VTBL_ENTRY)&_ZN6S124C63v64Ev,
  (VTBL_ENTRY)&_ZN6S124C63v65Ev,
  (VTBL_ENTRY)&_ZN6S124C63v66Ev,
  (VTBL_ENTRY)&_ZN6S124C63v67Ev,
  (VTBL_ENTRY)&_ZN6S124C63v68Ev,
  (VTBL_ENTRY)&_ZN6S124C63v69Ev,
  (VTBL_ENTRY)&_ZN6S124C63v70Ev,
  (VTBL_ENTRY)&_ZN6S124C63v71Ev,
  (VTBL_ENTRY)&_ZN6S124C63v72Ev,
  (VTBL_ENTRY)&_ZN6S124C63v73Ev,
  (VTBL_ENTRY)&_ZN6S124C63v74Ev,
  (VTBL_ENTRY)&_ZN6S124C63v75Ev,
  (VTBL_ENTRY)&_ZN6S124C63v76Ev,
  (VTBL_ENTRY)&_ZN6S124C63v77Ev,
  (VTBL_ENTRY)&_ZN6S124C63v78Ev,
  (VTBL_ENTRY)&_ZN6S124C63v79Ev,
  (VTBL_ENTRY)&_ZN6S124C63v80Ev,
  (VTBL_ENTRY)&_ZN6S124C63v81Ev,
  (VTBL_ENTRY)&_ZN6S124C63v82Ev,
  (VTBL_ENTRY)&_ZN6S124C63v83Ev,
  (VTBL_ENTRY)&_ZN6S124C63v84Ev,
  (VTBL_ENTRY)&_ZN6S124C63v85Ev,
  (VTBL_ENTRY)&_ZN6S124C63v86Ev,
  (VTBL_ENTRY)&_ZN6S124C63v87Ev,
  (VTBL_ENTRY)&_ZN6S124C63v88Ev,
  (VTBL_ENTRY)&_ZN6S124C63v89Ev,
  (VTBL_ENTRY)&_ZN6S124C63v90Ev,
  (VTBL_ENTRY)&_ZN6S124C63v91Ev,
  (VTBL_ENTRY)&_ZN6S124C63v92Ev,
  (VTBL_ENTRY)&_ZN6S124C63v93Ev,
  (VTBL_ENTRY)&_ZN6S124C63v94Ev,
  (VTBL_ENTRY)&_ZN6S124C63v95Ev,
  (VTBL_ENTRY)&_ZN6S124C63v96Ev,
  (VTBL_ENTRY)&_ZN6S124C63v97Ev,
  (VTBL_ENTRY)&_ZN6S124C63v98Ev,
  (VTBL_ENTRY)&_ZN6S124C63v99Ev,
  (VTBL_ENTRY)&_ZN6S124C64v100Ev,
  (VTBL_ENTRY)&_ZN6S124C64v101Ev,
  (VTBL_ENTRY)&_ZN6S124C64v102Ev,
  (VTBL_ENTRY)&_ZN6S124C64v103Ev,
  (VTBL_ENTRY)&_ZN6S124C64v104Ev,
  (VTBL_ENTRY)&_ZN6S124C64v105Ev,
  (VTBL_ENTRY)&_ZN6S124C64v106Ev,
  (VTBL_ENTRY)&_ZN6S124C64v107Ev,
  (VTBL_ENTRY)&_ZN6S124C64v108Ev,
};
extern VTBL_ENTRY _ZTI6S124C6[];
extern  VTBL_ENTRY _ZTV6S124C6[];
Class_Descriptor cd_S124C6 = {  "S124C6", // class name
  bases_S124C6, 1,
  &(vtc_S124C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S124C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S124C6),111, //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  S124C5  : S124C6 {
  ~S124C5(); // tgen
  S124C5(); // tgen
};
//SIG(-1 S124C5) C1{ BC2{ BC3{ vd m Fp Fi} 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 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}}


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

static void Test_S124C5()
{
  extern Class_Descriptor cd_S124C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S124C5, buf);
    S124C5 *dp, &lv = *(dp=new (buf) S124C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S124C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S124C5)");
    check_base_class_offset(lv, (S1C11_nt*)(S124C6*), 0, "S124C5");
    check_base_class_offset(lv, (S124C6*), 0, "S124C5");
    test_class_info(&lv, &cd_S124C5);
    dp->~S124C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS124C5(Test_S124C5, "S124C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S124C5C1Ev();
extern void _ZN6S124C5D1Ev();
Name_Map name_map_S124C5[] = {
  NSPAIR(_ZN6S124C5C1Ev),
  NSPAIR(_ZN6S124C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S124C6;
extern VTBL_ENTRY _ZTI6S124C6[];
extern  VTBL_ENTRY _ZTV6S124C6[];
static Base_Class bases_S124C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S124C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S124C5[];
extern void _ZN6S124C5D1Ev();
extern void _ZN6S124C5D0Ev();
extern void _ZN6S124C62v2Ev();
extern void _ZN6S124C62v3Ev();
extern void _ZN6S124C62v4Ev();
extern void _ZN6S124C62v5Ev();
extern void _ZN6S124C62v6Ev();
extern void _ZN6S124C62v7Ev();
extern void _ZN6S124C62v8Ev();
extern void _ZN6S124C62v9Ev();
extern void _ZN6S124C63v10Ev();
extern void _ZN6S124C63v11Ev();
extern void _ZN6S124C63v12Ev();
extern void _ZN6S124C63v13Ev();
extern void _ZN6S124C63v14Ev();
extern void _ZN6S124C63v15Ev();
extern void _ZN6S124C63v16Ev();
extern void _ZN6S124C63v17Ev();
extern void _ZN6S124C63v18Ev();
extern void _ZN6S124C63v19Ev();
extern void _ZN6S124C63v20Ev();
extern void _ZN6S124C63v21Ev();
extern void _ZN6S124C63v22Ev();
extern void _ZN6S124C63v23Ev();
extern void _ZN6S124C63v24Ev();
extern void _ZN6S124C63v25Ev();
extern void _ZN6S124C63v26Ev();
extern void _ZN6S124C63v27Ev();
extern void _ZN6S124C63v28Ev();
extern void _ZN6S124C63v29Ev();
extern void _ZN6S124C63v30Ev();
extern void _ZN6S124C63v31Ev();
extern void _ZN6S124C63v32Ev();
extern void _ZN6S124C63v33Ev();
extern void _ZN6S124C63v34Ev();
extern void _ZN6S124C63v35Ev();
extern void _ZN6S124C63v36Ev();
extern void _ZN6S124C63v37Ev();
extern void _ZN6S124C63v38Ev();
extern void _ZN6S124C63v39Ev();
extern void _ZN6S124C63v40Ev();
extern void _ZN6S124C63v41Ev();
extern void _ZN6S124C63v42Ev();
extern void _ZN6S124C63v43Ev();
extern void _ZN6S124C63v44Ev();
extern void _ZN6S124C63v45Ev();
extern void _ZN6S124C63v46Ev();
extern void _ZN6S124C63v47Ev();
extern void _ZN6S124C63v48Ev();
extern void _ZN6S124C63v49Ev();
extern void _ZN6S124C63v50Ev();
extern void _ZN6S124C63v51Ev();
extern void _ZN6S124C63v52Ev();
extern void _ZN6S124C63v53Ev();
extern void _ZN6S124C63v54Ev();
extern void _ZN6S124C63v55Ev();
extern void _ZN6S124C63v56Ev();
extern void _ZN6S124C63v57Ev();
extern void _ZN6S124C63v58Ev();
extern void _ZN6S124C63v59Ev();
extern void _ZN6S124C63v60Ev();
extern void _ZN6S124C63v61Ev();
extern void _ZN6S124C63v62Ev();
extern void _ZN6S124C63v63Ev();
extern void _ZN6S124C63v64Ev();
extern void _ZN6S124C63v65Ev();
extern void _ZN6S124C63v66Ev();
extern void _ZN6S124C63v67Ev();
extern void _ZN6S124C63v68Ev();
extern void _ZN6S124C63v69Ev();
extern void _ZN6S124C63v70Ev();
extern void _ZN6S124C63v71Ev();
extern void _ZN6S124C63v72Ev();
extern void _ZN6S124C63v73Ev();
extern void _ZN6S124C63v74Ev();
extern void _ZN6S124C63v75Ev();
extern void _ZN6S124C63v76Ev();
extern void _ZN6S124C63v77Ev();
extern void _ZN6S124C63v78Ev();
extern void _ZN6S124C63v79Ev();
extern void _ZN6S124C63v80Ev();
extern void _ZN6S124C63v81Ev();
extern void _ZN6S124C63v82Ev();
extern void _ZN6S124C63v83Ev();
extern void _ZN6S124C63v84Ev();
extern void _ZN6S124C63v85Ev();
extern void _ZN6S124C63v86Ev();
extern void _ZN6S124C63v87Ev();
extern void _ZN6S124C63v88Ev();
extern void _ZN6S124C63v89Ev();
extern void _ZN6S124C63v90Ev();
extern void _ZN6S124C63v91Ev();
extern void _ZN6S124C63v92Ev();
extern void _ZN6S124C63v93Ev();
extern void _ZN6S124C63v94Ev();
extern void _ZN6S124C63v95Ev();
extern void _ZN6S124C63v96Ev();
extern void _ZN6S124C63v97Ev();
extern void _ZN6S124C63v98Ev();
extern void _ZN6S124C63v99Ev();
extern void _ZN6S124C64v100Ev();
extern void _ZN6S124C64v101Ev();
extern void _ZN6S124C64v102Ev();
extern void _ZN6S124C64v103Ev();
extern void _ZN6S124C64v104Ev();
extern void _ZN6S124C64v105Ev();
extern void _ZN6S124C64v106Ev();
extern void _ZN6S124C64v107Ev();
extern void _ZN6S124C64v108Ev();
static  VTBL_ENTRY vtc_S124C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S124C5[0]),
  (VTBL_ENTRY)&_ZN6S124C5D1Ev,
  (VTBL_ENTRY)&_ZN6S124C5D0Ev,
  (VTBL_ENTRY)&_ZN6S124C62v2Ev,
  (VTBL_ENTRY)&_ZN6S124C62v3Ev,
  (VTBL_ENTRY)&_ZN6S124C62v4Ev,
  (VTBL_ENTRY)&_ZN6S124C62v5Ev,
  (VTBL_ENTRY)&_ZN6S124C62v6Ev,
  (VTBL_ENTRY)&_ZN6S124C62v7Ev,
  (VTBL_ENTRY)&_ZN6S124C62v8Ev,
  (VTBL_ENTRY)&_ZN6S124C62v9Ev,
  (VTBL_ENTRY)&_ZN6S124C63v10Ev,
  (VTBL_ENTRY)&_ZN6S124C63v11Ev,
  (VTBL_ENTRY)&_ZN6S124C63v12Ev,
  (VTBL_ENTRY)&_ZN6S124C63v13Ev,
  (VTBL_ENTRY)&_ZN6S124C63v14Ev,
  (VTBL_ENTRY)&_ZN6S124C63v15Ev,
  (VTBL_ENTRY)&_ZN6S124C63v16Ev,
  (VTBL_ENTRY)&_ZN6S124C63v17Ev,
  (VTBL_ENTRY)&_ZN6S124C63v18Ev,
  (VTBL_ENTRY)&_ZN6S124C63v19Ev,
  (VTBL_ENTRY)&_ZN6S124C63v20Ev,
  (VTBL_ENTRY)&_ZN6S124C63v21Ev,
  (VTBL_ENTRY)&_ZN6S124C63v22Ev,
  (VTBL_ENTRY)&_ZN6S124C63v23Ev,
  (VTBL_ENTRY)&_ZN6S124C63v24Ev,
  (VTBL_ENTRY)&_ZN6S124C63v25Ev,
  (VTBL_ENTRY)&_ZN6S124C63v26Ev,
  (VTBL_ENTRY)&_ZN6S124C63v27Ev,
  (VTBL_ENTRY)&_ZN6S124C63v28Ev,
  (VTBL_ENTRY)&_ZN6S124C63v29Ev,
  (VTBL_ENTRY)&_ZN6S124C63v30Ev,
  (VTBL_ENTRY)&_ZN6S124C63v31Ev,
  (VTBL_ENTRY)&_ZN6S124C63v32Ev,
  (VTBL_ENTRY)&_ZN6S124C63v33Ev,
  (VTBL_ENTRY)&_ZN6S124C63v34Ev,
  (VTBL_ENTRY)&_ZN6S124C63v35Ev,
  (VTBL_ENTRY)&_ZN6S124C63v36Ev,
  (VTBL_ENTRY)&_ZN6S124C63v37Ev,
  (VTBL_ENTRY)&_ZN6S124C63v38Ev,
  (VTBL_ENTRY)&_ZN6S124C63v39Ev,
  (VTBL_ENTRY)&_ZN6S124C63v40Ev,
  (VTBL_ENTRY)&_ZN6S124C63v41Ev,
  (VTBL_ENTRY)&_ZN6S124C63v42Ev,
  (VTBL_ENTRY)&_ZN6S124C63v43Ev,
  (VTBL_ENTRY)&_ZN6S124C63v44Ev,
  (VTBL_ENTRY)&_ZN6S124C63v45Ev,
  (VTBL_ENTRY)&_ZN6S124C63v46Ev,
  (VTBL_ENTRY)&_ZN6S124C63v47Ev,
  (VTBL_ENTRY)&_ZN6S124C63v48Ev,
  (VTBL_ENTRY)&_ZN6S124C63v49Ev,
  (VTBL_ENTRY)&_ZN6S124C63v50Ev,
  (VTBL_ENTRY)&_ZN6S124C63v51Ev,
  (VTBL_ENTRY)&_ZN6S124C63v52Ev,
  (VTBL_ENTRY)&_ZN6S124C63v53Ev,
  (VTBL_ENTRY)&_ZN6S124C63v54Ev,
  (VTBL_ENTRY)&_ZN6S124C63v55Ev,
  (VTBL_ENTRY)&_ZN6S124C63v56Ev,
  (VTBL_ENTRY)&_ZN6S124C63v57Ev,
  (VTBL_ENTRY)&_ZN6S124C63v58Ev,
  (VTBL_ENTRY)&_ZN6S124C63v59Ev,
  (VTBL_ENTRY)&_ZN6S124C63v60Ev,
  (VTBL_ENTRY)&_ZN6S124C63v61Ev,
  (VTBL_ENTRY)&_ZN6S124C63v62Ev,
  (VTBL_ENTRY)&_ZN6S124C63v63Ev,
  (VTBL_ENTRY)&_ZN6S124C63v64Ev,
  (VTBL_ENTRY)&_ZN6S124C63v65Ev,
  (VTBL_ENTRY)&_ZN6S124C63v66Ev,
  (VTBL_ENTRY)&_ZN6S124C63v67Ev,
  (VTBL_ENTRY)&_ZN6S124C63v68Ev,
  (VTBL_ENTRY)&_ZN6S124C63v69Ev,
  (VTBL_ENTRY)&_ZN6S124C63v70Ev,
  (VTBL_ENTRY)&_ZN6S124C63v71Ev,
  (VTBL_ENTRY)&_ZN6S124C63v72Ev,
  (VTBL_ENTRY)&_ZN6S124C63v73Ev,
  (VTBL_ENTRY)&_ZN6S124C63v74Ev,
  (VTBL_ENTRY)&_ZN6S124C63v75Ev,
  (VTBL_ENTRY)&_ZN6S124C63v76Ev,
  (VTBL_ENTRY)&_ZN6S124C63v77Ev,
  (VTBL_ENTRY)&_ZN6S124C63v78Ev,
  (VTBL_ENTRY)&_ZN6S124C63v79Ev,
  (VTBL_ENTRY)&_ZN6S124C63v80Ev,
  (VTBL_ENTRY)&_ZN6S124C63v81Ev,
  (VTBL_ENTRY)&_ZN6S124C63v82Ev,
  (VTBL_ENTRY)&_ZN6S124C63v83Ev,
  (VTBL_ENTRY)&_ZN6S124C63v84Ev,
  (VTBL_ENTRY)&_ZN6S124C63v85Ev,
  (VTBL_ENTRY)&_ZN6S124C63v86Ev,
  (VTBL_ENTRY)&_ZN6S124C63v87Ev,
  (VTBL_ENTRY)&_ZN6S124C63v88Ev,
  (VTBL_ENTRY)&_ZN6S124C63v89Ev,
  (VTBL_ENTRY)&_ZN6S124C63v90Ev,
  (VTBL_ENTRY)&_ZN6S124C63v91Ev,
  (VTBL_ENTRY)&_ZN6S124C63v92Ev,
  (VTBL_ENTRY)&_ZN6S124C63v93Ev,
  (VTBL_ENTRY)&_ZN6S124C63v94Ev,
  (VTBL_ENTRY)&_ZN6S124C63v95Ev,
  (VTBL_ENTRY)&_ZN6S124C63v96Ev,
  (VTBL_ENTRY)&_ZN6S124C63v97Ev,
  (VTBL_ENTRY)&_ZN6S124C63v98Ev,
  (VTBL_ENTRY)&_ZN6S124C63v99Ev,
  (VTBL_ENTRY)&_ZN6S124C64v100Ev,
  (VTBL_ENTRY)&_ZN6S124C64v101Ev,
  (VTBL_ENTRY)&_ZN6S124C64v102Ev,
  (VTBL_ENTRY)&_ZN6S124C64v103Ev,
  (VTBL_ENTRY)&_ZN6S124C64v104Ev,
  (VTBL_ENTRY)&_ZN6S124C64v105Ev,
  (VTBL_ENTRY)&_ZN6S124C64v106Ev,
  (VTBL_ENTRY)&_ZN6S124C64v107Ev,
  (VTBL_ENTRY)&_ZN6S124C64v108Ev,
};
extern VTBL_ENTRY _ZTI6S124C5[];
extern  VTBL_ENTRY _ZTV6S124C5[];
Class_Descriptor cd_S124C5 = {  "S124C5", // class name
  bases_S124C5, 2,
  &(vtc_S124C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S124C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S124C5),111, //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  S124C4  : S124C5 {
  virtual void  v109(); // _ZN6S124C44v109Ev
  virtual void  v110(); // _ZN6S124C44v110Ev
  virtual void  v111(); // _ZN6S124C44v111Ev
  virtual void  v112(); // _ZN6S124C44v112Ev
  virtual void  v113(); // _ZN6S124C44v113Ev
  virtual void  v114(); // _ZN6S124C44v114Ev
  virtual void  v115(); // _ZN6S124C44v115Ev
  virtual void  v116(); // _ZN6S124C44v116Ev
  virtual void  v117(); // _ZN6S124C44v117Ev
  virtual void  v118(); // _ZN6S124C44v118Ev
  virtual void  v119(); // _ZN6S124C44v119Ev
  virtual void  v120(); // _ZN6S124C44v120Ev
  virtual void  v121(); // _ZN6S124C44v121Ev
  virtual void  v122(); // _ZN6S124C44v122Ev
  virtual void  v123(); // _ZN6S124C44v123Ev
  virtual void  v124(); // _ZN6S124C44v124Ev
  virtual void  v125(); // _ZN6S124C44v125Ev
  virtual void  v126(); // _ZN6S124C44v126Ev
  virtual void  v127(); // _ZN6S124C44v127Ev
  virtual void  v128(); // _ZN6S124C44v128Ev
  virtual void  v129(); // _ZN6S124C44v129Ev
  virtual void  v130(); // _ZN6S124C44v130Ev
  virtual void  v131(); // _ZN6S124C44v131Ev
  virtual void  v132(); // _ZN6S124C44v132Ev
  virtual void  v133(); // _ZN6S124C44v133Ev
  virtual void  v134(); // _ZN6S124C44v134Ev
  ~S124C4(); // tgen
  S124C4(); // tgen
};
//SIG(-1 S124C4) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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 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}} 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}


void  S124C4 ::v109(){vfunc_called(this, "_ZN6S124C44v109Ev");}
void  S124C4 ::v110(){vfunc_called(this, "_ZN6S124C44v110Ev");}
void  S124C4 ::v111(){vfunc_called(this, "_ZN6S124C44v111Ev");}
void  S124C4 ::v112(){vfunc_called(this, "_ZN6S124C44v112Ev");}
void  S124C4 ::v113(){vfunc_called(this, "_ZN6S124C44v113Ev");}
void  S124C4 ::v114(){vfunc_called(this, "_ZN6S124C44v114Ev");}
void  S124C4 ::v115(){vfunc_called(this, "_ZN6S124C44v115Ev");}
void  S124C4 ::v116(){vfunc_called(this, "_ZN6S124C44v116Ev");}
void  S124C4 ::v117(){vfunc_called(this, "_ZN6S124C44v117Ev");}
void  S124C4 ::v118(){vfunc_called(this, "_ZN6S124C44v118Ev");}
void  S124C4 ::v119(){vfunc_called(this, "_ZN6S124C44v119Ev");}
void  S124C4 ::v120(){vfunc_called(this, "_ZN6S124C44v120Ev");}
void  S124C4 ::v121(){vfunc_called(this, "_ZN6S124C44v121Ev");}
void  S124C4 ::v122(){vfunc_called(this, "_ZN6S124C44v122Ev");}
void  S124C4 ::v123(){vfunc_called(this, "_ZN6S124C44v123Ev");}
void  S124C4 ::v124(){vfunc_called(this, "_ZN6S124C44v124Ev");}
void  S124C4 ::v125(){vfunc_called(this, "_ZN6S124C44v125Ev");}
void  S124C4 ::v126(){vfunc_called(this, "_ZN6S124C44v126Ev");}
void  S124C4 ::v127(){vfunc_called(this, "_ZN6S124C44v127Ev");}
void  S124C4 ::v128(){vfunc_called(this, "_ZN6S124C44v128Ev");}
void  S124C4 ::v129(){vfunc_called(this, "_ZN6S124C44v129Ev");}
void  S124C4 ::v130(){vfunc_called(this, "_ZN6S124C44v130Ev");}
void  S124C4 ::v131(){vfunc_called(this, "_ZN6S124C44v131Ev");}
void  S124C4 ::v132(){vfunc_called(this, "_ZN6S124C44v132Ev");}
void  S124C4 ::v133(){vfunc_called(this, "_ZN6S124C44v133Ev");}
void  S124C4 ::v134(){vfunc_called(this, "_ZN6S124C44v134Ev");}
S124C4 ::~S124C4(){ note_dtor("S124C4", this);} // tgen
S124C4 ::S124C4(){ note_ctor("S124C4", this);} // tgen

static void Test_S124C4()
{
  extern Class_Descriptor cd_S124C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S124C4, buf);
    S124C4 *dp, &lv = *(dp=new (buf) S124C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S124C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S124C4)");
    check_base_class_offset(lv, (S1C11_nt*)(S124C6*)(S124C5*), 0, "S124C4");
    check_base_class_offset(lv, (S124C6*)(S124C5*), 0, "S124C4");
    check_base_class_offset(lv, (S124C5*), 0, "S124C4");
    test_class_info(&lv, &cd_S124C4);
    dp->~S124C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS124C4(Test_S124C4, "S124C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S124C4C1Ev();
extern void _ZN6S124C4D1Ev();
Name_Map name_map_S124C4[] = {
  NSPAIR(_ZN6S124C4C1Ev),
  NSPAIR(_ZN6S124C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S124C6;
extern VTBL_ENTRY _ZTI6S124C6[];
extern  VTBL_ENTRY _ZTV6S124C6[];
extern Class_Descriptor cd_S124C5;
extern VTBL_ENTRY _ZTI6S124C5[];
extern  VTBL_ENTRY _ZTV6S124C5[];
static Base_Class bases_S124C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S124C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S124C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S124C4[];
extern void _ZN6S124C4D1Ev();
extern void _ZN6S124C4D0Ev();
extern void _ZN6S124C62v2Ev();
extern void _ZN6S124C62v3Ev();
extern void _ZN6S124C62v4Ev();
extern void _ZN6S124C62v5Ev();
extern void _ZN6S124C62v6Ev();
extern void _ZN6S124C62v7Ev();
extern void _ZN6S124C62v8Ev();
extern void _ZN6S124C62v9Ev();
extern void _ZN6S124C63v10Ev();
extern void _ZN6S124C63v11Ev();
extern void _ZN6S124C63v12Ev();
extern void _ZN6S124C63v13Ev();
extern void _ZN6S124C63v14Ev();
extern void _ZN6S124C63v15Ev();
extern void _ZN6S124C63v16Ev();
extern void _ZN6S124C63v17Ev();
extern void _ZN6S124C63v18Ev();
extern void _ZN6S124C63v19Ev();
extern void _ZN6S124C63v20Ev();
extern void _ZN6S124C63v21Ev();
extern void _ZN6S124C63v22Ev();
extern void _ZN6S124C63v23Ev();
extern void _ZN6S124C63v24Ev();
extern void _ZN6S124C63v25Ev();
extern void _ZN6S124C63v26Ev();
extern void _ZN6S124C63v27Ev();
extern void _ZN6S124C63v28Ev();
extern void _ZN6S124C63v29Ev();
extern void _ZN6S124C63v30Ev();
extern void _ZN6S124C63v31Ev();
extern void _ZN6S124C63v32Ev();
extern void _ZN6S124C63v33Ev();
extern void _ZN6S124C63v34Ev();
extern void _ZN6S124C63v35Ev();
extern void _ZN6S124C63v36Ev();
extern void _ZN6S124C63v37Ev();
extern void _ZN6S124C63v38Ev();
extern void _ZN6S124C63v39Ev();
extern void _ZN6S124C63v40Ev();
extern void _ZN6S124C63v41Ev();
extern void _ZN6S124C63v42Ev();
extern void _ZN6S124C63v43Ev();
extern void _ZN6S124C63v44Ev();
extern void _ZN6S124C63v45Ev();
extern void _ZN6S124C63v46Ev();
extern void _ZN6S124C63v47Ev();
extern void _ZN6S124C63v48Ev();
extern void _ZN6S124C63v49Ev();
extern void _ZN6S124C63v50Ev();
extern void _ZN6S124C63v51Ev();
extern void _ZN6S124C63v52Ev();
extern void _ZN6S124C63v53Ev();
extern void _ZN6S124C63v54Ev();
extern void _ZN6S124C63v55Ev();
extern void _ZN6S124C63v56Ev();
extern void _ZN6S124C63v57Ev();
extern void _ZN6S124C63v58Ev();
extern void _ZN6S124C63v59Ev();
extern void _ZN6S124C63v60Ev();
extern void _ZN6S124C63v61Ev();
extern void _ZN6S124C63v62Ev();
extern void _ZN6S124C63v63Ev();
extern void _ZN6S124C63v64Ev();
extern void _ZN6S124C63v65Ev();
extern void _ZN6S124C63v66Ev();
extern void _ZN6S124C63v67Ev();
extern void _ZN6S124C63v68Ev();
extern void _ZN6S124C63v69Ev();
extern void _ZN6S124C63v70Ev();
extern void _ZN6S124C63v71Ev();
extern void _ZN6S124C63v72Ev();
extern void _ZN6S124C63v73Ev();
extern void _ZN6S124C63v74Ev();
extern void _ZN6S124C63v75Ev();
extern void _ZN6S124C63v76Ev();
extern void _ZN6S124C63v77Ev();
extern void _ZN6S124C63v78Ev();
extern void _ZN6S124C63v79Ev();
extern void _ZN6S124C63v80Ev();
extern void _ZN6S124C63v81Ev();
extern void _ZN6S124C63v82Ev();
extern void _ZN6S124C63v83Ev();
extern void _ZN6S124C63v84Ev();
extern void _ZN6S124C63v85Ev();
extern void _ZN6S124C63v86Ev();
extern void _ZN6S124C63v87Ev();
extern void _ZN6S124C63v88Ev();
extern void _ZN6S124C63v89Ev();
extern void _ZN6S124C63v90Ev();
extern void _ZN6S124C63v91Ev();
extern void _ZN6S124C63v92Ev();
extern void _ZN6S124C63v93Ev();
extern void _ZN6S124C63v94Ev();
extern void _ZN6S124C63v95Ev();
extern void _ZN6S124C63v96Ev();
extern void _ZN6S124C63v97Ev();
extern void _ZN6S124C63v98Ev();
extern void _ZN6S124C63v99Ev();
extern void _ZN6S124C64v100Ev();
extern void _ZN6S124C64v101Ev();
extern void _ZN6S124C64v102Ev();
extern void _ZN6S124C64v103Ev();
extern void _ZN6S124C64v104Ev();
extern void _ZN6S124C64v105Ev();
extern void _ZN6S124C64v106Ev();
extern void _ZN6S124C64v107Ev();
extern void _ZN6S124C64v108Ev();
extern void _ZN6S124C44v109Ev();
extern void _ZN6S124C44v110Ev();
extern void _ZN6S124C44v111Ev();
extern void _ZN6S124C44v112Ev();
extern void _ZN6S124C44v113Ev();
extern void _ZN6S124C44v114Ev();
extern void _ZN6S124C44v115Ev();
extern void _ZN6S124C44v116Ev();
extern void _ZN6S124C44v117Ev();
extern void _ZN6S124C44v118Ev();
extern void _ZN6S124C44v119Ev();
extern void _ZN6S124C44v120Ev();
extern void _ZN6S124C44v121Ev();
extern void _ZN6S124C44v122Ev();
extern void _ZN6S124C44v123Ev();
extern void _ZN6S124C44v124Ev();
extern void _ZN6S124C44v125Ev();
extern void _ZN6S124C44v126Ev();
extern void _ZN6S124C44v127Ev();
extern void _ZN6S124C44v128Ev();
extern void _ZN6S124C44v129Ev();
extern void _ZN6S124C44v130Ev();
extern void _ZN6S124C44v131Ev();
extern void _ZN6S124C44v132Ev();
extern void _ZN6S124C44v133Ev();
extern void _ZN6S124C44v134Ev();
static  VTBL_ENTRY vtc_S124C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S124C4[0]),
  (VTBL_ENTRY)&_ZN6S124C4D1Ev,
  (VTBL_ENTRY)&_ZN6S124C4D0Ev,
  (VTBL_ENTRY)&_ZN6S124C62v2Ev,
  (VTBL_ENTRY)&_ZN6S124C62v3Ev,
  (VTBL_ENTRY)&_ZN6S124C62v4Ev,
  (VTBL_ENTRY)&_ZN6S124C62v5Ev,
  (VTBL_ENTRY)&_ZN6S124C62v6Ev,
  (VTBL_ENTRY)&_ZN6S124C62v7Ev,
  (VTBL_ENTRY)&_ZN6S124C62v8Ev,
  (VTBL_ENTRY)&_ZN6S124C62v9Ev,
  (VTBL_ENTRY)&_ZN6S124C63v10Ev,
  (VTBL_ENTRY)&_ZN6S124C63v11Ev,
  (VTBL_ENTRY)&_ZN6S124C63v12Ev,
  (VTBL_ENTRY)&_ZN6S124C63v13Ev,
  (VTBL_ENTRY)&_ZN6S124C63v14Ev,
  (VTBL_ENTRY)&_ZN6S124C63v15Ev,
  (VTBL_ENTRY)&_ZN6S124C63v16Ev,
  (VTBL_ENTRY)&_ZN6S124C63v17Ev,
  (VTBL_ENTRY)&_ZN6S124C63v18Ev,
  (VTBL_ENTRY)&_ZN6S124C63v19Ev,
  (VTBL_ENTRY)&_ZN6S124C63v20Ev,
  (VTBL_ENTRY)&_ZN6S124C63v21Ev,
  (VTBL_ENTRY)&_ZN6S124C63v22Ev,
  (VTBL_ENTRY)&_ZN6S124C63v23Ev,
  (VTBL_ENTRY)&_ZN6S124C63v24Ev,
  (VTBL_ENTRY)&_ZN6S124C63v25Ev,
  (VTBL_ENTRY)&_ZN6S124C63v26Ev,
  (VTBL_ENTRY)&_ZN6S124C63v27Ev,
  (VTBL_ENTRY)&_ZN6S124C63v28Ev,
  (VTBL_ENTRY)&_ZN6S124C63v29Ev,
  (VTBL_ENTRY)&_ZN6S124C63v30Ev,
  (VTBL_ENTRY)&_ZN6S124C63v31Ev,
  (VTBL_ENTRY)&_ZN6S124C63v32Ev,
  (VTBL_ENTRY)&_ZN6S124C63v33Ev,
  (VTBL_ENTRY)&_ZN6S124C63v34Ev,
  (VTBL_ENTRY)&_ZN6S124C63v35Ev,
  (VTBL_ENTRY)&_ZN6S124C63v36Ev,
  (VTBL_ENTRY)&_ZN6S124C63v37Ev,
  (VTBL_ENTRY)&_ZN6S124C63v38Ev,
  (VTBL_ENTRY)&_ZN6S124C63v39Ev,
  (VTBL_ENTRY)&_ZN6S124C63v40Ev,
  (VTBL_ENTRY)&_ZN6S124C63v41Ev,
  (VTBL_ENTRY)&_ZN6S124C63v42Ev,
  (VTBL_ENTRY)&_ZN6S124C63v43Ev,
  (VTBL_ENTRY)&_ZN6S124C63v44Ev,
  (VTBL_ENTRY)&_ZN6S124C63v45Ev,
  (VTBL_ENTRY)&_ZN6S124C63v46Ev,
  (VTBL_ENTRY)&_ZN6S124C63v47Ev,
  (VTBL_ENTRY)&_ZN6S124C63v48Ev,
  (VTBL_ENTRY)&_ZN6S124C63v49Ev,
  (VTBL_ENTRY)&_ZN6S124C63v50Ev,
  (VTBL_ENTRY)&_ZN6S124C63v51Ev,
  (VTBL_ENTRY)&_ZN6S124C63v52Ev,
  (VTBL_ENTRY)&_ZN6S124C63v53Ev,
  (VTBL_ENTRY)&_ZN6S124C63v54Ev,
  (VTBL_ENTRY)&_ZN6S124C63v55Ev,
  (VTBL_ENTRY)&_ZN6S124C63v56Ev,
  (VTBL_ENTRY)&_ZN6S124C63v57Ev,
  (VTBL_ENTRY)&_ZN6S124C63v58Ev,
  (VTBL_ENTRY)&_ZN6S124C63v59Ev,
  (VTBL_ENTRY)&_ZN6S124C63v60Ev,
  (VTBL_ENTRY)&_ZN6S124C63v61Ev,
  (VTBL_ENTRY)&_ZN6S124C63v62Ev,
  (VTBL_ENTRY)&_ZN6S124C63v63Ev,
  (VTBL_ENTRY)&_ZN6S124C63v64Ev,
  (VTBL_ENTRY)&_ZN6S124C63v65Ev,
  (VTBL_ENTRY)&_ZN6S124C63v66Ev,
  (VTBL_ENTRY)&_ZN6S124C63v67Ev,
  (VTBL_ENTRY)&_ZN6S124C63v68Ev,
  (VTBL_ENTRY)&_ZN6S124C63v69Ev,
  (VTBL_ENTRY)&_ZN6S124C63v70Ev,
  (VTBL_ENTRY)&_ZN6S124C63v71Ev,
  (VTBL_ENTRY)&_ZN6S124C63v72Ev,
  (VTBL_ENTRY)&_ZN6S124C63v73Ev,
  (VTBL_ENTRY)&_ZN6S124C63v74Ev,
  (VTBL_ENTRY)&_ZN6S124C63v75Ev,
  (VTBL_ENTRY)&_ZN6S124C63v76Ev,
  (VTBL_ENTRY)&_ZN6S124C63v77Ev,
  (VTBL_ENTRY)&_ZN6S124C63v78Ev,
  (VTBL_ENTRY)&_ZN6S124C63v79Ev,
  (VTBL_ENTRY)&_ZN6S124C63v80Ev,
  (VTBL_ENTRY)&_ZN6S124C63v81Ev,
  (VTBL_ENTRY)&_ZN6S124C63v82Ev,
  (VTBL_ENTRY)&_ZN6S124C63v83Ev,
  (VTBL_ENTRY)&_ZN6S124C63v84Ev,
  (VTBL_ENTRY)&_ZN6S124C63v85Ev,
  (VTBL_ENTRY)&_ZN6S124C63v86Ev,
  (VTBL_ENTRY)&_ZN6S124C63v87Ev,
  (VTBL_ENTRY)&_ZN6S124C63v88Ev,
  (VTBL_ENTRY)&_ZN6S124C63v89Ev,
  (VTBL_ENTRY)&_ZN6S124C63v90Ev,
  (VTBL_ENTRY)&_ZN6S124C63v91Ev,
  (VTBL_ENTRY)&_ZN6S124C63v92Ev,
  (VTBL_ENTRY)&_ZN6S124C63v93Ev,
  (VTBL_ENTRY)&_ZN6S124C63v94Ev,
  (VTBL_ENTRY)&_ZN6S124C63v95Ev,
  (VTBL_ENTRY)&_ZN6S124C63v96Ev,
  (VTBL_ENTRY)&_ZN6S124C63v97Ev,
  (VTBL_ENTRY)&_ZN6S124C63v98Ev,
  (VTBL_ENTRY)&_ZN6S124C63v99Ev,
  (VTBL_ENTRY)&_ZN6S124C64v100Ev,
  (VTBL_ENTRY)&_ZN6S124C64v101Ev,
  (VTBL_ENTRY)&_ZN6S124C64v102Ev,
  (VTBL_ENTRY)&_ZN6S124C64v103Ev,
  (VTBL_ENTRY)&_ZN6S124C64v104Ev,
  (VTBL_ENTRY)&_ZN6S124C64v105Ev,
  (VTBL_ENTRY)&_ZN6S124C64v106Ev,
  (VTBL_ENTRY)&_ZN6S124C64v107Ev,
  (VTBL_ENTRY)&_ZN6S124C64v108Ev,
  (VTBL_ENTRY)&_ZN6S124C44v109Ev,
  (VTBL_ENTRY)&_ZN6S124C44v110Ev,
  (VTBL_ENTRY)&_ZN6S124C44v111Ev,
  (VTBL_ENTRY)&_ZN6S124C44v112Ev,
  (VTBL_ENTRY)&_ZN6S124C44v113Ev,
  (VTBL_ENTRY)&_ZN6S124C44v114Ev,
  (VTBL_ENTRY)&_ZN6S124C44v115Ev,
  (VTBL_ENTRY)&_ZN6S124C44v116Ev,
  (VTBL_ENTRY)&_ZN6S124C44v117Ev,
  (VTBL_ENTRY)&_ZN6S124C44v118Ev,
  (VTBL_ENTRY)&_ZN6S124C44v119Ev,
  (VTBL_ENTRY)&_ZN6S124C44v120Ev,
  (VTBL_ENTRY)&_ZN6S124C44v121Ev,
  (VTBL_ENTRY)&_ZN6S124C44v122Ev,
  (VTBL_ENTRY)&_ZN6S124C44v123Ev,
  (VTBL_ENTRY)&_ZN6S124C44v124Ev,
  (VTBL_ENTRY)&_ZN6S124C44v125Ev,
  (VTBL_ENTRY)&_ZN6S124C44v126Ev,
  (VTBL_ENTRY)&_ZN6S124C44v127Ev,
  (VTBL_ENTRY)&_ZN6S124C44v128Ev,
  (VTBL_ENTRY)&_ZN6S124C44v129Ev,
  (VTBL_ENTRY)&_ZN6S124C44v130Ev,
  (VTBL_ENTRY)&_ZN6S124C44v131Ev,
  (VTBL_ENTRY)&_ZN6S124C44v132Ev,
  (VTBL_ENTRY)&_ZN6S124C44v133Ev,
  (VTBL_ENTRY)&_ZN6S124C44v134Ev,
};
extern VTBL_ENTRY _ZTI6S124C4[];
extern  VTBL_ENTRY _ZTV6S124C4[];
Class_Descriptor cd_S124C4 = {  "S124C4", // class name
  bases_S124C4, 3,
  &(vtc_S124C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S124C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S124C4),137, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S124C3  : S124C4 {
  virtual void  v135(); // _ZN6S124C34v135Ev
  virtual void  v136(); // _ZN6S124C34v136Ev
  virtual void  v137(); // _ZN6S124C34v137Ev
  virtual void  v138(); // _ZN6S124C34v138Ev
  virtual void  v139(); // _ZN6S124C34v139Ev
  virtual void  v140(); // _ZN6S124C34v140Ev
  virtual void  v141(); // _ZN6S124C34v141Ev
  virtual void  v142(); // _ZN6S124C34v142Ev
  virtual void  v143(); // _ZN6S124C34v143Ev
  virtual void  v144(); // _ZN6S124C34v144Ev
  virtual void  v145(); // _ZN6S124C34v145Ev
  virtual void  v146(); // _ZN6S124C34v146Ev
  virtual void  v147(); // _ZN6S124C34v147Ev
  virtual void  v148(); // _ZN6S124C34v148Ev
  virtual void  v149(); // _ZN6S124C34v149Ev
  virtual void  v150(); // _ZN6S124C34v150Ev
  virtual void  v151(); // _ZN6S124C34v151Ev
  virtual void  v152(); // _ZN6S124C34v152Ev
  ~S124C3(); // tgen
  S124C3(); // tgen
};
//SIG(-1 S124C3) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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 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 v149 v150 v151} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18}


void  S124C3 ::v135(){vfunc_called(this, "_ZN6S124C34v135Ev");}
void  S124C3 ::v136(){vfunc_called(this, "_ZN6S124C34v136Ev");}
void  S124C3 ::v137(){vfunc_called(this, "_ZN6S124C34v137Ev");}
void  S124C3 ::v138(){vfunc_called(this, "_ZN6S124C34v138Ev");}
void  S124C3 ::v139(){vfunc_called(this, "_ZN6S124C34v139Ev");}
void  S124C3 ::v140(){vfunc_called(this, "_ZN6S124C34v140Ev");}
void  S124C3 ::v141(){vfunc_called(this, "_ZN6S124C34v141Ev");}
void  S124C3 ::v142(){vfunc_called(this, "_ZN6S124C34v142Ev");}
void  S124C3 ::v143(){vfunc_called(this, "_ZN6S124C34v143Ev");}
void  S124C3 ::v144(){vfunc_called(this, "_ZN6S124C34v144Ev");}
void  S124C3 ::v145(){vfunc_called(this, "_ZN6S124C34v145Ev");}
void  S124C3 ::v146(){vfunc_called(this, "_ZN6S124C34v146Ev");}
void  S124C3 ::v147(){vfunc_called(this, "_ZN6S124C34v147Ev");}
void  S124C3 ::v148(){vfunc_called(this, "_ZN6S124C34v148Ev");}
void  S124C3 ::v149(){vfunc_called(this, "_ZN6S124C34v149Ev");}
void  S124C3 ::v150(){vfunc_called(this, "_ZN6S124C34v150Ev");}
void  S124C3 ::v151(){vfunc_called(this, "_ZN6S124C34v151Ev");}
void  S124C3 ::v152(){vfunc_called(this, "_ZN6S124C34v152Ev");}
S124C3 ::~S124C3(){ note_dtor("S124C3", this);} // tgen
S124C3 ::S124C3(){ note_ctor("S124C3", this);} // tgen

static void Test_S124C3()
{
  extern Class_Descriptor cd_S124C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S124C3, buf);
    S124C3 *dp, &lv = *(dp=new (buf) S124C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S124C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S124C3)");
    check_base_class_offset(lv, (S1C11_nt*)(S124C6*)(S124C5*)(S124C4*), 0, "S124C3");
    check_base_class_offset(lv, (S124C6*)(S124C5*)(S124C4*), 0, "S124C3");
    check_base_class_offset(lv, (S124C5*)(S124C4*), 0, "S124C3");
    check_base_class_offset(lv, (S124C4*), 0, "S124C3");
    test_class_info(&lv, &cd_S124C3);
    dp->~S124C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS124C3(Test_S124C3, "S124C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S124C3C1Ev();
extern void _ZN6S124C3D1Ev();
Name_Map name_map_S124C3[] = {
  NSPAIR(_ZN6S124C3C1Ev),
  NSPAIR(_ZN6S124C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S124C6;
extern VTBL_ENTRY _ZTI6S124C6[];
extern  VTBL_ENTRY _ZTV6S124C6[];
extern Class_Descriptor cd_S124C5;
extern VTBL_ENTRY _ZTI6S124C5[];
extern  VTBL_ENTRY _ZTV6S124C5[];
extern Class_Descriptor cd_S124C4;
extern VTBL_ENTRY _ZTI6S124C4[];
extern  VTBL_ENTRY _ZTV6S124C4[];
static Base_Class bases_S124C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S124C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S124C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S124C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S124C3[];
extern void _ZN6S124C3D1Ev();
extern void _ZN6S124C3D0Ev();
extern void _ZN6S124C62v2Ev();
extern void _ZN6S124C62v3Ev();
extern void _ZN6S124C62v4Ev();
extern void _ZN6S124C62v5Ev();
extern void _ZN6S124C62v6Ev();
extern void _ZN6S124C62v7Ev();
extern void _ZN6S124C62v8Ev();
extern void _ZN6S124C62v9Ev();
extern void _ZN6S124C63v10Ev();
extern void _ZN6S124C63v11Ev();
extern void _ZN6S124C63v12Ev();
extern void _ZN6S124C63v13Ev();
extern void _ZN6S124C63v14Ev();
extern void _ZN6S124C63v15Ev();
extern void _ZN6S124C63v16Ev();
extern void _ZN6S124C63v17Ev();
extern void _ZN6S124C63v18Ev();
extern void _ZN6S124C63v19Ev();
extern void _ZN6S124C63v20Ev();
extern void _ZN6S124C63v21Ev();
extern void _ZN6S124C63v22Ev();
extern void _ZN6S124C63v23Ev();
extern void _ZN6S124C63v24Ev();
extern void _ZN6S124C63v25Ev();
extern void _ZN6S124C63v26Ev();
extern void _ZN6S124C63v27Ev();
extern void _ZN6S124C63v28Ev();
extern void _ZN6S124C63v29Ev();
extern void _ZN6S124C63v30Ev();
extern void _ZN6S124C63v31Ev();
extern void _ZN6S124C63v32Ev();
extern void _ZN6S124C63v33Ev();
extern void _ZN6S124C63v34Ev();
extern void _ZN6S124C63v35Ev();
extern void _ZN6S124C63v36Ev();
extern void _ZN6S124C63v37Ev();
extern void _ZN6S124C63v38Ev();
extern void _ZN6S124C63v39Ev();
extern void _ZN6S124C63v40Ev();
extern void _ZN6S124C63v41Ev();
extern void _ZN6S124C63v42Ev();
extern void _ZN6S124C63v43Ev();
extern void _ZN6S124C63v44Ev();
extern void _ZN6S124C63v45Ev();
extern void _ZN6S124C63v46Ev();
extern void _ZN6S124C63v47Ev();
extern void _ZN6S124C63v48Ev();
extern void _ZN6S124C63v49Ev();
extern void _ZN6S124C63v50Ev();
extern void _ZN6S124C63v51Ev();
extern void _ZN6S124C63v52Ev();
extern void _ZN6S124C63v53Ev();
extern void _ZN6S124C63v54Ev();
extern void _ZN6S124C63v55Ev();
extern void _ZN6S124C63v56Ev();
extern void _ZN6S124C63v57Ev();
extern void _ZN6S124C63v58Ev();
extern void _ZN6S124C63v59Ev();
extern void _ZN6S124C63v60Ev();
extern void _ZN6S124C63v61Ev();
extern void _ZN6S124C63v62Ev();
extern void _ZN6S124C63v63Ev();
extern void _ZN6S124C63v64Ev();
extern void _ZN6S124C63v65Ev();
extern void _ZN6S124C63v66Ev();
extern void _ZN6S124C63v67Ev();
extern void _ZN6S124C63v68Ev();
extern void _ZN6S124C63v69Ev();
extern void _ZN6S124C63v70Ev();
extern void _ZN6S124C63v71Ev();
extern void _ZN6S124C63v72Ev();
extern void _ZN6S124C63v73Ev();
extern void _ZN6S124C63v74Ev();
extern void _ZN6S124C63v75Ev();
extern void _ZN6S124C63v76Ev();
extern void _ZN6S124C63v77Ev();
extern void _ZN6S124C63v78Ev();
extern void _ZN6S124C63v79Ev();
extern void _ZN6S124C63v80Ev();
extern void _ZN6S124C63v81Ev();
extern void _ZN6S124C63v82Ev();
extern void _ZN6S124C63v83Ev();
extern void _ZN6S124C63v84Ev();
extern void _ZN6S124C63v85Ev();
extern void _ZN6S124C63v86Ev();
extern void _ZN6S124C63v87Ev();
extern void _ZN6S124C63v88Ev();
extern void _ZN6S124C63v89Ev();
extern void _ZN6S124C63v90Ev();
extern void _ZN6S124C63v91Ev();
extern void _ZN6S124C63v92Ev();
extern void _ZN6S124C63v93Ev();
extern void _ZN6S124C63v94Ev();
extern void _ZN6S124C63v95Ev();
extern void _ZN6S124C63v96Ev();
extern void _ZN6S124C63v97Ev();
extern void _ZN6S124C63v98Ev();
extern void _ZN6S124C63v99Ev();
extern void _ZN6S124C64v100Ev();
extern void _ZN6S124C64v101Ev();
extern void _ZN6S124C64v102Ev();
extern void _ZN6S124C64v103Ev();
extern void _ZN6S124C64v104Ev();
extern void _ZN6S124C64v105Ev();
extern void _ZN6S124C64v106Ev();
extern void _ZN6S124C64v107Ev();
extern void _ZN6S124C64v108Ev();
extern void _ZN6S124C44v109Ev();
extern void _ZN6S124C44v110Ev();
extern void _ZN6S124C44v111Ev();
extern void _ZN6S124C44v112Ev();
extern void _ZN6S124C44v113Ev();
extern void _ZN6S124C44v114Ev();
extern void _ZN6S124C44v115Ev();
extern void _ZN6S124C44v116Ev();
extern void _ZN6S124C44v117Ev();
extern void _ZN6S124C44v118Ev();
extern void _ZN6S124C44v119Ev();
extern void _ZN6S124C44v120Ev();
extern void _ZN6S124C44v121Ev();
extern void _ZN6S124C44v122Ev();
extern void _ZN6S124C44v123Ev();
extern void _ZN6S124C44v124Ev();
extern void _ZN6S124C44v125Ev();
extern void _ZN6S124C44v126Ev();
extern void _ZN6S124C44v127Ev();
extern void _ZN6S124C44v128Ev();
extern void _ZN6S124C44v129Ev();
extern void _ZN6S124C44v130Ev();
extern void _ZN6S124C44v131Ev();
extern void _ZN6S124C44v132Ev();
extern void _ZN6S124C44v133Ev();
extern void _ZN6S124C44v134Ev();
extern void _ZN6S124C34v135Ev();
extern void _ZN6S124C34v136Ev();
extern void _ZN6S124C34v137Ev();
extern void _ZN6S124C34v138Ev();
extern void _ZN6S124C34v139Ev();
extern void _ZN6S124C34v140Ev();
extern void _ZN6S124C34v141Ev();
extern void _ZN6S124C34v142Ev();
extern void _ZN6S124C34v143Ev();
extern void _ZN6S124C34v144Ev();
extern void _ZN6S124C34v145Ev();
extern void _ZN6S124C34v146Ev();
extern void _ZN6S124C34v147Ev();
extern void _ZN6S124C34v148Ev();
extern void _ZN6S124C34v149Ev();
extern void _ZN6S124C34v150Ev();
extern void _ZN6S124C34v151Ev();
extern void _ZN6S124C34v152Ev();
static  VTBL_ENTRY vtc_S124C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S124C3[0]),
  (VTBL_ENTRY)&_ZN6S124C3D1Ev,
  (VTBL_ENTRY)&_ZN6S124C3D0Ev,
  (VTBL_ENTRY)&_ZN6S124C62v2Ev,
  (VTBL_ENTRY)&_ZN6S124C62v3Ev,
  (VTBL_ENTRY)&_ZN6S124C62v4Ev,
  (VTBL_ENTRY)&_ZN6S124C62v5Ev,
  (VTBL_ENTRY)&_ZN6S124C62v6Ev,
  (VTBL_ENTRY)&_ZN6S124C62v7Ev,
  (VTBL_ENTRY)&_ZN6S124C62v8Ev,
  (VTBL_ENTRY)&_ZN6S124C62v9Ev,
  (VTBL_ENTRY)&_ZN6S124C63v10Ev,
  (VTBL_ENTRY)&_ZN6S124C63v11Ev,
  (VTBL_ENTRY)&_ZN6S124C63v12Ev,
  (VTBL_ENTRY)&_ZN6S124C63v13Ev,
  (VTBL_ENTRY)&_ZN6S124C63v14Ev,
  (VTBL_ENTRY)&_ZN6S124C63v15Ev,
  (VTBL_ENTRY)&_ZN6S124C63v16Ev,
  (VTBL_ENTRY)&_ZN6S124C63v17Ev,
  (VTBL_ENTRY)&_ZN6S124C63v18Ev,
  (VTBL_ENTRY)&_ZN6S124C63v19Ev,
  (VTBL_ENTRY)&_ZN6S124C63v20Ev,
  (VTBL_ENTRY)&_ZN6S124C63v21Ev,
  (VTBL_ENTRY)&_ZN6S124C63v22Ev,
  (VTBL_ENTRY)&_ZN6S124C63v23Ev,
  (VTBL_ENTRY)&_ZN6S124C63v24Ev,
  (VTBL_ENTRY)&_ZN6S124C63v25Ev,
  (VTBL_ENTRY)&_ZN6S124C63v26Ev,
  (VTBL_ENTRY)&_ZN6S124C63v27Ev,
  (VTBL_ENTRY)&_ZN6S124C63v28Ev,
  (VTBL_ENTRY)&_ZN6S124C63v29Ev,
  (VTBL_ENTRY)&_ZN6S124C63v30Ev,
  (VTBL_ENTRY)&_ZN6S124C63v31Ev,
  (VTBL_ENTRY)&_ZN6S124C63v32Ev,
  (VTBL_ENTRY)&_ZN6S124C63v33Ev,
  (VTBL_ENTRY)&_ZN6S124C63v34Ev,
  (VTBL_ENTRY)&_ZN6S124C63v35Ev,
  (VTBL_ENTRY)&_ZN6S124C63v36Ev,
  (VTBL_ENTRY)&_ZN6S124C63v37Ev,
  (VTBL_ENTRY)&_ZN6S124C63v38Ev,
  (VTBL_ENTRY)&_ZN6S124C63v39Ev,
  (VTBL_ENTRY)&_ZN6S124C63v40Ev,
  (VTBL_ENTRY)&_ZN6S124C63v41Ev,
  (VTBL_ENTRY)&_ZN6S124C63v42Ev,
  (VTBL_ENTRY)&_ZN6S124C63v43Ev,
  (VTBL_ENTRY)&_ZN6S124C63v44Ev,
  (VTBL_ENTRY)&_ZN6S124C63v45Ev,
  (VTBL_ENTRY)&_ZN6S124C63v46Ev,
  (VTBL_ENTRY)&_ZN6S124C63v47Ev,
  (VTBL_ENTRY)&_ZN6S124C63v48Ev,
  (VTBL_ENTRY)&_ZN6S124C63v49Ev,
  (VTBL_ENTRY)&_ZN6S124C63v50Ev,
  (VTBL_ENTRY)&_ZN6S124C63v51Ev,
  (VTBL_ENTRY)&_ZN6S124C63v52Ev,
  (VTBL_ENTRY)&_ZN6S124C63v53Ev,
  (VTBL_ENTRY)&_ZN6S124C63v54Ev,
  (VTBL_ENTRY)&_ZN6S124C63v55Ev,
  (VTBL_ENTRY)&_ZN6S124C63v56Ev,
  (VTBL_ENTRY)&_ZN6S124C63v57Ev,
  (VTBL_ENTRY)&_ZN6S124C63v58Ev,
  (VTBL_ENTRY)&_ZN6S124C63v59Ev,
  (VTBL_ENTRY)&_ZN6S124C63v60Ev,
  (VTBL_ENTRY)&_ZN6S124C63v61Ev,
  (VTBL_ENTRY)&_ZN6S124C63v62Ev,
  (VTBL_ENTRY)&_ZN6S124C63v63Ev,
  (VTBL_ENTRY)&_ZN6S124C63v64Ev,
  (VTBL_ENTRY)&_ZN6S124C63v65Ev,
  (VTBL_ENTRY)&_ZN6S124C63v66Ev,
  (VTBL_ENTRY)&_ZN6S124C63v67Ev,
  (VTBL_ENTRY)&_ZN6S124C63v68Ev,
  (VTBL_ENTRY)&_ZN6S124C63v69Ev,
  (VTBL_ENTRY)&_ZN6S124C63v70Ev,
  (VTBL_ENTRY)&_ZN6S124C63v71Ev,
  (VTBL_ENTRY)&_ZN6S124C63v72Ev,
  (VTBL_ENTRY)&_ZN6S124C63v73Ev,
  (VTBL_ENTRY)&_ZN6S124C63v74Ev,
  (VTBL_ENTRY)&_ZN6S124C63v75Ev,
  (VTBL_ENTRY)&_ZN6S124C63v76Ev,
  (VTBL_ENTRY)&_ZN6S124C63v77Ev,
  (VTBL_ENTRY)&_ZN6S124C63v78Ev,
  (VTBL_ENTRY)&_ZN6S124C63v79Ev,
  (VTBL_ENTRY)&_ZN6S124C63v80Ev,
  (VTBL_ENTRY)&_ZN6S124C63v81Ev,
  (VTBL_ENTRY)&_ZN6S124C63v82Ev,
  (VTBL_ENTRY)&_ZN6S124C63v83Ev,
  (VTBL_ENTRY)&_ZN6S124C63v84Ev,
  (VTBL_ENTRY)&_ZN6S124C63v85Ev,
  (VTBL_ENTRY)&_ZN6S124C63v86Ev,
  (VTBL_ENTRY)&_ZN6S124C63v87Ev,
  (VTBL_ENTRY)&_ZN6S124C63v88Ev,
  (VTBL_ENTRY)&_ZN6S124C63v89Ev,
  (VTBL_ENTRY)&_ZN6S124C63v90Ev,
  (VTBL_ENTRY)&_ZN6S124C63v91Ev,
  (VTBL_ENTRY)&_ZN6S124C63v92Ev,
  (VTBL_ENTRY)&_ZN6S124C63v93Ev,
  (VTBL_ENTRY)&_ZN6S124C63v94Ev,
  (VTBL_ENTRY)&_ZN6S124C63v95Ev,
  (VTBL_ENTRY)&_ZN6S124C63v96Ev,
  (VTBL_ENTRY)&_ZN6S124C63v97Ev,
  (VTBL_ENTRY)&_ZN6S124C63v98Ev,
  (VTBL_ENTRY)&_ZN6S124C63v99Ev,
  (VTBL_ENTRY)&_ZN6S124C64v100Ev,
  (VTBL_ENTRY)&_ZN6S124C64v101Ev,
  (VTBL_ENTRY)&_ZN6S124C64v102Ev,
  (VTBL_ENTRY)&_ZN6S124C64v103Ev,
  (VTBL_ENTRY)&_ZN6S124C64v104Ev,
  (VTBL_ENTRY)&_ZN6S124C64v105Ev,
  (VTBL_ENTRY)&_ZN6S124C64v106Ev,
  (VTBL_ENTRY)&_ZN6S124C64v107Ev,
  (VTBL_ENTRY)&_ZN6S124C64v108Ev,
  (VTBL_ENTRY)&_ZN6S124C44v109Ev,
  (VTBL_ENTRY)&_ZN6S124C44v110Ev,
  (VTBL_ENTRY)&_ZN6S124C44v111Ev,
  (VTBL_ENTRY)&_ZN6S124C44v112Ev,
  (VTBL_ENTRY)&_ZN6S124C44v113Ev,
  (VTBL_ENTRY)&_ZN6S124C44v114Ev,
  (VTBL_ENTRY)&_ZN6S124C44v115Ev,
  (VTBL_ENTRY)&_ZN6S124C44v116Ev,
  (VTBL_ENTRY)&_ZN6S124C44v117Ev,
  (VTBL_ENTRY)&_ZN6S124C44v118Ev,
  (VTBL_ENTRY)&_ZN6S124C44v119Ev,
  (VTBL_ENTRY)&_ZN6S124C44v120Ev,
  (VTBL_ENTRY)&_ZN6S124C44v121Ev,
  (VTBL_ENTRY)&_ZN6S124C44v122Ev,
  (VTBL_ENTRY)&_ZN6S124C44v123Ev,
  (VTBL_ENTRY)&_ZN6S124C44v124Ev,
  (VTBL_ENTRY)&_ZN6S124C44v125Ev,
  (VTBL_ENTRY)&_ZN6S124C44v126Ev,
  (VTBL_ENTRY)&_ZN6S124C44v127Ev,
  (VTBL_ENTRY)&_ZN6S124C44v128Ev,
  (VTBL_ENTRY)&_ZN6S124C44v129Ev,
  (VTBL_ENTRY)&_ZN6S124C44v130Ev,
  (VTBL_ENTRY)&_ZN6S124C44v131Ev,
  (VTBL_ENTRY)&_ZN6S124C44v132Ev,
  (VTBL_ENTRY)&_ZN6S124C44v133Ev,
  (VTBL_ENTRY)&_ZN6S124C44v134Ev,
  (VTBL_ENTRY)&_ZN6S124C34v135Ev,
  (VTBL_ENTRY)&_ZN6S124C34v136Ev,
  (VTBL_ENTRY)&_ZN6S124C34v137Ev,
  (VTBL_ENTRY)&_ZN6S124C34v138Ev,
  (VTBL_ENTRY)&_ZN6S124C34v139Ev,
  (VTBL_ENTRY)&_ZN6S124C34v140Ev,
  (VTBL_ENTRY)&_ZN6S124C34v141Ev,
  (VTBL_ENTRY)&_ZN6S124C34v142Ev,
  (VTBL_ENTRY)&_ZN6S124C34v143Ev,
  (VTBL_ENTRY)&_ZN6S124C34v144Ev,
  (VTBL_ENTRY)&_ZN6S124C34v145Ev,
  (VTBL_ENTRY)&_ZN6S124C34v146Ev,
  (VTBL_ENTRY)&_ZN6S124C34v147Ev,
  (VTBL_ENTRY)&_ZN6S124C34v148Ev,
  (VTBL_ENTRY)&_ZN6S124C34v149Ev,
  (VTBL_ENTRY)&_ZN6S124C34v150Ev,
  (VTBL_ENTRY)&_ZN6S124C34v151Ev,
  (VTBL_ENTRY)&_ZN6S124C34v152Ev,
};
extern VTBL_ENTRY _ZTI6S124C3[];
extern  VTBL_ENTRY _ZTV6S124C3[];
Class_Descriptor cd_S124C3 = {  "S124C3", // class name
  bases_S124C3, 4,
  &(vtc_S124C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S124C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S124C3),155, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S124C2  : S124C3 {
  virtual void  v153(); // _ZN6S124C24v153Ev
  virtual void  v154(); // _ZN6S124C24v154Ev
  virtual void  v155(); // _ZN6S124C24v155Ev
  virtual void  v156(); // _ZN6S124C24v156Ev
  virtual void  v157(); // _ZN6S124C24v157Ev
  virtual void  v158(); // _ZN6S124C24v158Ev
  virtual void  v159(); // _ZN6S124C24v159Ev
  virtual void  v160(); // _ZN6S124C24v160Ev
  virtual void  v161(); // _ZN6S124C24v161Ev
  virtual void  v162(); // _ZN6S124C24v162Ev
  virtual void  v163(); // _ZN6S124C24v163Ev
  virtual void  v164(); // _ZN6S124C24v164Ev
  virtual void  v165(); // _ZN6S124C24v165Ev
  virtual void  v166(); // _ZN6S124C24v166Ev
  virtual void  v167(); // _ZN6S124C24v167Ev
  virtual void  v168(); // _ZN6S124C24v168Ev
  virtual void  v169(); // _ZN6S124C24v169Ev
  virtual void  v170(); // _ZN6S124C24v170Ev
  virtual void  v171(); // _ZN6S124C24v171Ev
  virtual void  v172(); // _ZN6S124C24v172Ev
  virtual void  v173(); // _ZN6S124C24v173Ev
  virtual void  v174(); // _ZN6S124C24v174Ev
  virtual void  v175(); // _ZN6S124C24v175Ev
  virtual void  v176(); // _ZN6S124C24v176Ev
  virtual void  v177(); // _ZN6S124C24v177Ev
  virtual void  v178(); // _ZN6S124C24v178Ev
  ~S124C2(); // tgen
  S124C2(); // tgen
};
//SIG(-1 S124C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd m Fp Fi} 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 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 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} 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}


void  S124C2 ::v153(){vfunc_called(this, "_ZN6S124C24v153Ev");}
void  S124C2 ::v154(){vfunc_called(this, "_ZN6S124C24v154Ev");}
void  S124C2 ::v155(){vfunc_called(this, "_ZN6S124C24v155Ev");}
void  S124C2 ::v156(){vfunc_called(this, "_ZN6S124C24v156Ev");}
void  S124C2 ::v157(){vfunc_called(this, "_ZN6S124C24v157Ev");}
void  S124C2 ::v158(){vfunc_called(this, "_ZN6S124C24v158Ev");}
void  S124C2 ::v159(){vfunc_called(this, "_ZN6S124C24v159Ev");}
void  S124C2 ::v160(){vfunc_called(this, "_ZN6S124C24v160Ev");}
void  S124C2 ::v161(){vfunc_called(this, "_ZN6S124C24v161Ev");}
void  S124C2 ::v162(){vfunc_called(this, "_ZN6S124C24v162Ev");}
void  S124C2 ::v163(){vfunc_called(this, "_ZN6S124C24v163Ev");}
void  S124C2 ::v164(){vfunc_called(this, "_ZN6S124C24v164Ev");}
void  S124C2 ::v165(){vfunc_called(this, "_ZN6S124C24v165Ev");}
void  S124C2 ::v166(){vfunc_called(this, "_ZN6S124C24v166Ev");}
void  S124C2 ::v167(){vfunc_called(this, "_ZN6S124C24v167Ev");}
void  S124C2 ::v168(){vfunc_called(this, "_ZN6S124C24v168Ev");}
void  S124C2 ::v169(){vfunc_called(this, "_ZN6S124C24v169Ev");}
void  S124C2 ::v170(){vfunc_called(this, "_ZN6S124C24v170Ev");}
void  S124C2 ::v171(){vfunc_called(this, "_ZN6S124C24v171Ev");}
void  S124C2 ::v172(){vfunc_called(this, "_ZN6S124C24v172Ev");}
void  S124C2 ::v173(){vfunc_called(this, "_ZN6S124C24v173Ev");}
void  S124C2 ::v174(){vfunc_called(this, "_ZN6S124C24v174Ev");}
void  S124C2 ::v175(){vfunc_called(this, "_ZN6S124C24v175Ev");}
void  S124C2 ::v176(){vfunc_called(this, "_ZN6S124C24v176Ev");}
void  S124C2 ::v177(){vfunc_called(this, "_ZN6S124C24v177Ev");}
void  S124C2 ::v178(){vfunc_called(this, "_ZN6S124C24v178Ev");}
S124C2 ::~S124C2(){ note_dtor("S124C2", this);} // tgen
S124C2 ::S124C2(){ note_ctor("S124C2", this);} // tgen

static void Test_S124C2()
{
  extern Class_Descriptor cd_S124C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S124C2, buf);
    S124C2 *dp, &lv = *(dp=new (buf) S124C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S124C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S124C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S124C6*)(S124C5*)(S124C4*)(S124C3*), 0, "S124C2");
    check_base_class_offset(lv, (S124C6*)(S124C5*)(S124C4*)(S124C3*), 0, "S124C2");
    check_base_class_offset(lv, (S124C5*)(S124C4*)(S124C3*), 0, "S124C2");
    check_base_class_offset(lv, (S124C4*)(S124C3*), 0, "S124C2");
    check_base_class_offset(lv, (S124C3*), 0, "S124C2");
    test_class_info(&lv, &cd_S124C2);
    dp->~S124C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS124C2(Test_S124C2, "S124C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S124C2C1Ev();
extern void _ZN6S124C2D1Ev();
Name_Map name_map_S124C2[] = {
  NSPAIR(_ZN6S124C2C1Ev),
  NSPAIR(_ZN6S124C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S124C6;
extern VTBL_ENTRY _ZTI6S124C6[];
extern  VTBL_ENTRY _ZTV6S124C6[];
extern Class_Descriptor cd_S124C5;
extern VTBL_ENTRY _ZTI6S124C5[];
extern  VTBL_ENTRY _ZTV6S124C5[];
extern Class_Descriptor cd_S124C4;
extern VTBL_ENTRY _ZTI6S124C4[];
extern  VTBL_ENTRY _ZTV6S124C4[];
extern Class_Descriptor cd_S124C3;
extern VTBL_ENTRY _ZTI6S124C3[];
extern  VTBL_ENTRY _ZTV6S124C3[];
static Base_Class bases_S124C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S124C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S124C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S124C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S124C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S124C2[];
extern void _ZN6S124C2D1Ev();
extern void _ZN6S124C2D0Ev();
extern void _ZN6S124C62v2Ev();
extern void _ZN6S124C62v3Ev();
extern void _ZN6S124C62v4Ev();
extern void _ZN6S124C62v5Ev();
extern void _ZN6S124C62v6Ev();
extern void _ZN6S124C62v7Ev();
extern void _ZN6S124C62v8Ev();
extern void _ZN6S124C62v9Ev();
extern void _ZN6S124C63v10Ev();
extern void _ZN6S124C63v11Ev();
extern void _ZN6S124C63v12Ev();
extern void _ZN6S124C63v13Ev();
extern void _ZN6S124C63v14Ev();
extern void _ZN6S124C63v15Ev();
extern void _ZN6S124C63v16Ev();
extern void _ZN6S124C63v17Ev();
extern void _ZN6S124C63v18Ev();
extern void _ZN6S124C63v19Ev();
extern void _ZN6S124C63v20Ev();
extern void _ZN6S124C63v21Ev();
extern void _ZN6S124C63v22Ev();
extern void _ZN6S124C63v23Ev();
extern void _ZN6S124C63v24Ev();
extern void _ZN6S124C63v25Ev();
extern void _ZN6S124C63v26Ev();
extern void _ZN6S124C63v27Ev();
extern void _ZN6S124C63v28Ev();
extern void _ZN6S124C63v29Ev();
extern void _ZN6S124C63v30Ev();
extern void _ZN6S124C63v31Ev();
extern void _ZN6S124C63v32Ev();
extern void _ZN6S124C63v33Ev();
extern void _ZN6S124C63v34Ev();
extern void _ZN6S124C63v35Ev();
extern void _ZN6S124C63v36Ev();
extern void _ZN6S124C63v37Ev();
extern void _ZN6S124C63v38Ev();
extern void _ZN6S124C63v39Ev();
extern void _ZN6S124C63v40Ev();
extern void _ZN6S124C63v41Ev();
extern void _ZN6S124C63v42Ev();
extern void _ZN6S124C63v43Ev();
extern void _ZN6S124C63v44Ev();
extern void _ZN6S124C63v45Ev();
extern void _ZN6S124C63v46Ev();
extern void _ZN6S124C63v47Ev();
extern void _ZN6S124C63v48Ev();
extern void _ZN6S124C63v49Ev();
extern void _ZN6S124C63v50Ev();
extern void _ZN6S124C63v51Ev();
extern void _ZN6S124C63v52Ev();
extern void _ZN6S124C63v53Ev();
extern void _ZN6S124C63v54Ev();
extern void _ZN6S124C63v55Ev();
extern void _ZN6S124C63v56Ev();
extern void _ZN6S124C63v57Ev();
extern void _ZN6S124C63v58Ev();
extern void _ZN6S124C63v59Ev();
extern void _ZN6S124C63v60Ev();
extern void _ZN6S124C63v61Ev();
extern void _ZN6S124C63v62Ev();
extern void _ZN6S124C63v63Ev();
extern void _ZN6S124C63v64Ev();
extern void _ZN6S124C63v65Ev();
extern void _ZN6S124C63v66Ev();
extern void _ZN6S124C63v67Ev();
extern void _ZN6S124C63v68Ev();
extern void _ZN6S124C63v69Ev();
extern void _ZN6S124C63v70Ev();
extern void _ZN6S124C63v71Ev();
extern void _ZN6S124C63v72Ev();
extern void _ZN6S124C63v73Ev();
extern void _ZN6S124C63v74Ev();
extern void _ZN6S124C63v75Ev();
extern void _ZN6S124C63v76Ev();
extern void _ZN6S124C63v77Ev();
extern void _ZN6S124C63v78Ev();
extern void _ZN6S124C63v79Ev();
extern void _ZN6S124C63v80Ev();
extern void _ZN6S124C63v81Ev();
extern void _ZN6S124C63v82Ev();
extern void _ZN6S124C63v83Ev();
extern void _ZN6S124C63v84Ev();
extern void _ZN6S124C63v85Ev();
extern void _ZN6S124C63v86Ev();
extern void _ZN6S124C63v87Ev();
extern void _ZN6S124C63v88Ev();
extern void _ZN6S124C63v89Ev();
extern void _ZN6S124C63v90Ev();
extern void _ZN6S124C63v91Ev();
extern void _ZN6S124C63v92Ev();
extern void _ZN6S124C63v93Ev();
extern void _ZN6S124C63v94Ev();
extern void _ZN6S124C63v95Ev();
extern void _ZN6S124C63v96Ev();
extern void _ZN6S124C63v97Ev();
extern void _ZN6S124C63v98Ev();
extern void _ZN6S124C63v99Ev();
extern void _ZN6S124C64v100Ev();
extern void _ZN6S124C64v101Ev();
extern void _ZN6S124C64v102Ev();
extern void _ZN6S124C64v103Ev();
extern void _ZN6S124C64v104Ev();
extern void _ZN6S124C64v105Ev();
extern void _ZN6S124C64v106Ev();
extern void _ZN6S124C64v107Ev();
extern void _ZN6S124C64v108Ev();
extern void _ZN6S124C44v109Ev();
extern void _ZN6S124C44v110Ev();
extern void _ZN6S124C44v111Ev();
extern void _ZN6S124C44v112Ev();
extern void _ZN6S124C44v113Ev();
extern void _ZN6S124C44v114Ev();
extern void _ZN6S124C44v115Ev();
extern void _ZN6S124C44v116Ev();
extern void _ZN6S124C44v117Ev();
extern void _ZN6S124C44v118Ev();
extern void _ZN6S124C44v119Ev();
extern void _ZN6S124C44v120Ev();
extern void _ZN6S124C44v121Ev();
extern void _ZN6S124C44v122Ev();
extern void _ZN6S124C44v123Ev();
extern void _ZN6S124C44v124Ev();
extern void _ZN6S124C44v125Ev();
extern void _ZN6S124C44v126Ev();
extern void _ZN6S124C44v127Ev();
extern void _ZN6S124C44v128Ev();
extern void _ZN6S124C44v129Ev();
extern void _ZN6S124C44v130Ev();
extern void _ZN6S124C44v131Ev();
extern void _ZN6S124C44v132Ev();
extern void _ZN6S124C44v133Ev();
extern void _ZN6S124C44v134Ev();
extern void _ZN6S124C34v135Ev();
extern void _ZN6S124C34v136Ev();
extern void _ZN6S124C34v137Ev();
extern void _ZN6S124C34v138Ev();
extern void _ZN6S124C34v139Ev();
extern void _ZN6S124C34v140Ev();
extern void _ZN6S124C34v141Ev();
extern void _ZN6S124C34v142Ev();
extern void _ZN6S124C34v143Ev();
extern void _ZN6S124C34v144Ev();
extern void _ZN6S124C34v145Ev();
extern void _ZN6S124C34v146Ev();
extern void _ZN6S124C34v147Ev();
extern void _ZN6S124C34v148Ev();
extern void _ZN6S124C34v149Ev();
extern void _ZN6S124C34v150Ev();
extern void _ZN6S124C34v151Ev();
extern void _ZN6S124C34v152Ev();
extern void _ZN6S124C24v153Ev();
extern void _ZN6S124C24v154Ev();
extern void _ZN6S124C24v155Ev();
extern void _ZN6S124C24v156Ev();
extern void _ZN6S124C24v157Ev();
extern void _ZN6S124C24v158Ev();
extern void _ZN6S124C24v159Ev();
extern void _ZN6S124C24v160Ev();
extern void _ZN6S124C24v161Ev();
extern void _ZN6S124C24v162Ev();
extern void _ZN6S124C24v163Ev();
extern void _ZN6S124C24v164Ev();
extern void _ZN6S124C24v165Ev();
extern void _ZN6S124C24v166Ev();
extern void _ZN6S124C24v167Ev();
extern void _ZN6S124C24v168Ev();
extern void _ZN6S124C24v169Ev();
extern void _ZN6S124C24v170Ev();
extern void _ZN6S124C24v171Ev();
extern void _ZN6S124C24v172Ev();
extern void _ZN6S124C24v173Ev();
extern void _ZN6S124C24v174Ev();
extern void _ZN6S124C24v175Ev();
extern void _ZN6S124C24v176Ev();
extern void _ZN6S124C24v177Ev();
extern void _ZN6S124C24v178Ev();
static  VTBL_ENTRY vtc_S124C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S124C2[0]),
  (VTBL_ENTRY)&_ZN6S124C2D1Ev,
  (VTBL_ENTRY)&_ZN6S124C2D0Ev,
  (VTBL_ENTRY)&_ZN6S124C62v2Ev,
  (VTBL_ENTRY)&_ZN6S124C62v3Ev,
  (VTBL_ENTRY)&_ZN6S124C62v4Ev,
  (VTBL_ENTRY)&_ZN6S124C62v5Ev,
  (VTBL_ENTRY)&_ZN6S124C62v6Ev,
  (VTBL_ENTRY)&_ZN6S124C62v7Ev,
  (VTBL_ENTRY)&_ZN6S124C62v8Ev,
  (VTBL_ENTRY)&_ZN6S124C62v9Ev,
  (VTBL_ENTRY)&_ZN6S124C63v10Ev,
  (VTBL_ENTRY)&_ZN6S124C63v11Ev,
  (VTBL_ENTRY)&_ZN6S124C63v12Ev,
  (VTBL_ENTRY)&_ZN6S124C63v13Ev,
  (VTBL_ENTRY)&_ZN6S124C63v14Ev,
  (VTBL_ENTRY)&_ZN6S124C63v15Ev,
  (VTBL_ENTRY)&_ZN6S124C63v16Ev,
  (VTBL_ENTRY)&_ZN6S124C63v17Ev,
  (VTBL_ENTRY)&_ZN6S124C63v18Ev,
  (VTBL_ENTRY)&_ZN6S124C63v19Ev,
  (VTBL_ENTRY)&_ZN6S124C63v20Ev,
  (VTBL_ENTRY)&_ZN6S124C63v21Ev,
  (VTBL_ENTRY)&_ZN6S124C63v22Ev,
  (VTBL_ENTRY)&_ZN6S124C63v23Ev,
  (VTBL_ENTRY)&_ZN6S124C63v24Ev,
  (VTBL_ENTRY)&_ZN6S124C63v25Ev,
  (VTBL_ENTRY)&_ZN6S124C63v26Ev,
  (VTBL_ENTRY)&_ZN6S124C63v27Ev,
  (VTBL_ENTRY)&_ZN6S124C63v28Ev,
  (VTBL_ENTRY)&_ZN6S124C63v29Ev,
  (VTBL_ENTRY)&_ZN6S124C63v30Ev,
  (VTBL_ENTRY)&_ZN6S124C63v31Ev,
  (VTBL_ENTRY)&_ZN6S124C63v32Ev,
  (VTBL_ENTRY)&_ZN6S124C63v33Ev,
  (VTBL_ENTRY)&_ZN6S124C63v34Ev,
  (VTBL_ENTRY)&_ZN6S124C63v35Ev,
  (VTBL_ENTRY)&_ZN6S124C63v36Ev,
  (VTBL_ENTRY)&_ZN6S124C63v37Ev,
  (VTBL_ENTRY)&_ZN6S124C63v38Ev,
  (VTBL_ENTRY)&_ZN6S124C63v39Ev,
  (VTBL_ENTRY)&_ZN6S124C63v40Ev,
  (VTBL_ENTRY)&_ZN6S124C63v41Ev,
  (VTBL_ENTRY)&_ZN6S124C63v42Ev,
  (VTBL_ENTRY)&_ZN6S124C63v43Ev,
  (VTBL_ENTRY)&_ZN6S124C63v44Ev,
  (VTBL_ENTRY)&_ZN6S124C63v45Ev,
  (VTBL_ENTRY)&_ZN6S124C63v46Ev,
  (VTBL_ENTRY)&_ZN6S124C63v47Ev,
  (VTBL_ENTRY)&_ZN6S124C63v48Ev,
  (VTBL_ENTRY)&_ZN6S124C63v49Ev,
  (VTBL_ENTRY)&_ZN6S124C63v50Ev,
  (VTBL_ENTRY)&_ZN6S124C63v51Ev,
  (VTBL_ENTRY)&_ZN6S124C63v52Ev,
  (VTBL_ENTRY)&_ZN6S124C63v53Ev,
  (VTBL_ENTRY)&_ZN6S124C63v54Ev,
  (VTBL_ENTRY)&_ZN6S124C63v55Ev,
  (VTBL_ENTRY)&_ZN6S124C63v56Ev,
  (VTBL_ENTRY)&_ZN6S124C63v57Ev,
  (VTBL_ENTRY)&_ZN6S124C63v58Ev,
  (VTBL_ENTRY)&_ZN6S124C63v59Ev,
  (VTBL_ENTRY)&_ZN6S124C63v60Ev,
  (VTBL_ENTRY)&_ZN6S124C63v61Ev,
  (VTBL_ENTRY)&_ZN6S124C63v62Ev,
  (VTBL_ENTRY)&_ZN6S124C63v63Ev,
  (VTBL_ENTRY)&_ZN6S124C63v64Ev,
  (VTBL_ENTRY)&_ZN6S124C63v65Ev,
  (VTBL_ENTRY)&_ZN6S124C63v66Ev,
  (VTBL_ENTRY)&_ZN6S124C63v67Ev,
  (VTBL_ENTRY)&_ZN6S124C63v68Ev,
  (VTBL_ENTRY)&_ZN6S124C63v69Ev,
  (VTBL_ENTRY)&_ZN6S124C63v70Ev,
  (VTBL_ENTRY)&_ZN6S124C63v71Ev,
  (VTBL_ENTRY)&_ZN6S124C63v72Ev,
  (VTBL_ENTRY)&_ZN6S124C63v73Ev,
  (VTBL_ENTRY)&_ZN6S124C63v74Ev,
  (VTBL_ENTRY)&_ZN6S124C63v75Ev,
  (VTBL_ENTRY)&_ZN6S124C63v76Ev,
  (VTBL_ENTRY)&_ZN6S124C63v77Ev,
  (VTBL_ENTRY)&_ZN6S124C63v78Ev,
  (VTBL_ENTRY)&_ZN6S124C63v79Ev,
  (VTBL_ENTRY)&_ZN6S124C63v80Ev,
  (VTBL_ENTRY)&_ZN6S124C63v81Ev,
  (VTBL_ENTRY)&_ZN6S124C63v82Ev,
  (VTBL_ENTRY)&_ZN6S124C63v83Ev,
  (VTBL_ENTRY)&_ZN6S124C63v84Ev,
  (VTBL_ENTRY)&_ZN6S124C63v85Ev,
  (VTBL_ENTRY)&_ZN6S124C63v86Ev,
  (VTBL_ENTRY)&_ZN6S124C63v87Ev,
  (VTBL_ENTRY)&_ZN6S124C63v88Ev,
  (VTBL_ENTRY)&_ZN6S124C63v89Ev,
  (VTBL_ENTRY)&_ZN6S124C63v90Ev,
  (VTBL_ENTRY)&_ZN6S124C63v91Ev,
  (VTBL_ENTRY)&_ZN6S124C63v92Ev,
  (VTBL_ENTRY)&_ZN6S124C63v93Ev,
  (VTBL_ENTRY)&_ZN6S124C63v94Ev,
  (VTBL_ENTRY)&_ZN6S124C63v95Ev,
  (VTBL_ENTRY)&_ZN6S124C63v96Ev,
  (VTBL_ENTRY)&_ZN6S124C63v97Ev,
  (VTBL_ENTRY)&_ZN6S124C63v98Ev,
  (VTBL_ENTRY)&_ZN6S124C63v99Ev,
  (VTBL_ENTRY)&_ZN6S124C64v100Ev,
  (VTBL_ENTRY)&_ZN6S124C64v101Ev,
  (VTBL_ENTRY)&_ZN6S124C64v102Ev,
  (VTBL_ENTRY)&_ZN6S124C64v103Ev,
  (VTBL_ENTRY)&_ZN6S124C64v104Ev,
  (VTBL_ENTRY)&_ZN6S124C64v105Ev,
  (VTBL_ENTRY)&_ZN6S124C64v106Ev,
  (VTBL_ENTRY)&_ZN6S124C64v107Ev,
  (VTBL_ENTRY)&_ZN6S124C64v108Ev,
  (VTBL_ENTRY)&_ZN6S124C44v109Ev,
  (VTBL_ENTRY)&_ZN6S124C44v110Ev,
  (VTBL_ENTRY)&_ZN6S124C44v111Ev,
  (VTBL_ENTRY)&_ZN6S124C44v112Ev,
  (VTBL_ENTRY)&_ZN6S124C44v113Ev,
  (VTBL_ENTRY)&_ZN6S124C44v114Ev,
  (VTBL_ENTRY)&_ZN6S124C44v115Ev,
  (VTBL_ENTRY)&_ZN6S124C44v116Ev,
  (VTBL_ENTRY)&_ZN6S124C44v117Ev,
  (VTBL_ENTRY)&_ZN6S124C44v118Ev,
  (VTBL_ENTRY)&_ZN6S124C44v119Ev,
  (VTBL_ENTRY)&_ZN6S124C44v120Ev,
  (VTBL_ENTRY)&_ZN6S124C44v121Ev,
  (VTBL_ENTRY)&_ZN6S124C44v122Ev,
  (VTBL_ENTRY)&_ZN6S124C44v123Ev,
  (VTBL_ENTRY)&_ZN6S124C44v124Ev,
  (VTBL_ENTRY)&_ZN6S124C44v125Ev,
  (VTBL_ENTRY)&_ZN6S124C44v126Ev,
  (VTBL_ENTRY)&_ZN6S124C44v127Ev,
  (VTBL_ENTRY)&_ZN6S124C44v128Ev,
  (VTBL_ENTRY)&_ZN6S124C44v129Ev,
  (VTBL_ENTRY)&_ZN6S124C44v130Ev,
  (VTBL_ENTRY)&_ZN6S124C44v131Ev,
  (VTBL_ENTRY)&_ZN6S124C44v132Ev,
  (VTBL_ENTRY)&_ZN6S124C44v133Ev,
  (VTBL_ENTRY)&_ZN6S124C44v134Ev,
  (VTBL_ENTRY)&_ZN6S124C34v135Ev,
  (VTBL_ENTRY)&_ZN6S124C34v136Ev,
  (VTBL_ENTRY)&_ZN6S124C34v137Ev,
  (VTBL_ENTRY)&_ZN6S124C34v138Ev,
  (VTBL_ENTRY)&_ZN6S124C34v139Ev,
  (VTBL_ENTRY)&_ZN6S124C34v140Ev,
  (VTBL_ENTRY)&_ZN6S124C34v141Ev,
  (VTBL_ENTRY)&_ZN6S124C34v142Ev,
  (VTBL_ENTRY)&_ZN6S124C34v143Ev,
  (VTBL_ENTRY)&_ZN6S124C34v144Ev,
  (VTBL_ENTRY)&_ZN6S124C34v145Ev,
  (VTBL_ENTRY)&_ZN6S124C34v146Ev,
  (VTBL_ENTRY)&_ZN6S124C34v147Ev,
  (VTBL_ENTRY)&_ZN6S124C34v148Ev,
  (VTBL_ENTRY)&_ZN6S124C34v149Ev,
  (VTBL_ENTRY)&_ZN6S124C34v150Ev,
  (VTBL_ENTRY)&_ZN6S124C34v151Ev,
  (VTBL_ENTRY)&_ZN6S124C34v152Ev,
  (VTBL_ENTRY)&_ZN6S124C24v153Ev,
  (VTBL_ENTRY)&_ZN6S124C24v154Ev,
  (VTBL_ENTRY)&_ZN6S124C24v155Ev,
  (VTBL_ENTRY)&_ZN6S124C24v156Ev,
  (VTBL_ENTRY)&_ZN6S124C24v157Ev,
  (VTBL_ENTRY)&_ZN6S124C24v158Ev,
  (VTBL_ENTRY)&_ZN6S124C24v159Ev,
  (VTBL_ENTRY)&_ZN6S124C24v160Ev,
  (VTBL_ENTRY)&_ZN6S124C24v161Ev,
  (VTBL_ENTRY)&_ZN6S124C24v162Ev,
  (VTBL_ENTRY)&_ZN6S124C24v163Ev,
  (VTBL_ENTRY)&_ZN6S124C24v164Ev,
  (VTBL_ENTRY)&_ZN6S124C24v165Ev,
  (VTBL_ENTRY)&_ZN6S124C24v166Ev,
  (VTBL_ENTRY)&_ZN6S124C24v167Ev,
  (VTBL_ENTRY)&_ZN6S124C24v168Ev,
  (VTBL_ENTRY)&_ZN6S124C24v169Ev,
  (VTBL_ENTRY)&_ZN6S124C24v170Ev,
  (VTBL_ENTRY)&_ZN6S124C24v171Ev,
  (VTBL_ENTRY)&_ZN6S124C24v172Ev,
  (VTBL_ENTRY)&_ZN6S124C24v173Ev,
  (VTBL_ENTRY)&_ZN6S124C24v174Ev,
  (VTBL_ENTRY)&_ZN6S124C24v175Ev,
  (VTBL_ENTRY)&_ZN6S124C24v176Ev,
  (VTBL_ENTRY)&_ZN6S124C24v177Ev,
  (VTBL_ENTRY)&_ZN6S124C24v178Ev,
};
extern VTBL_ENTRY _ZTI6S124C2[];
extern  VTBL_ENTRY _ZTV6S124C2[];
Class_Descriptor cd_S124C2 = {  "S124C2", // class name
  bases_S124C2, 5,
  &(vtc_S124C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S124C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S124C2),181, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S124C1  : S124C2 {
  virtual void  v1(); // _ZN6S124C12v1Ev
  ~S124C1(); // tgen
  S124C1(); // tgen
};
//SIG(1 S124C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd m Fp Fi} 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 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 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} v1}


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

static void Test_S124C1()
{
  extern Class_Descriptor cd_S124C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S124C1, buf);
    S124C1 *dp, &lv = *(dp=new (buf) S124C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S124C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S124C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S124C6*)(S124C5*)(S124C4*)(S124C3*)(S124C2*), 0, "S124C1");
    check_base_class_offset(lv, (S124C6*)(S124C5*)(S124C4*)(S124C3*)(S124C2*), 0, "S124C1");
    check_base_class_offset(lv, (S124C5*)(S124C4*)(S124C3*)(S124C2*), 0, "S124C1");
    check_base_class_offset(lv, (S124C4*)(S124C3*)(S124C2*), 0, "S124C1");
    check_base_class_offset(lv, (S124C3*)(S124C2*), 0, "S124C1");
    check_base_class_offset(lv, (S124C2*), 0, "S124C1");
    test_class_info(&lv, &cd_S124C1);
    dp->~S124C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS124C1(Test_S124C1, "S124C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S124C1C1Ev();
extern void _ZN6S124C1D1Ev();
Name_Map name_map_S124C1[] = {
  NSPAIR(_ZN6S124C1C1Ev),
  NSPAIR(_ZN6S124C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S124C6;
extern VTBL_ENTRY _ZTI6S124C6[];
extern  VTBL_ENTRY _ZTV6S124C6[];
extern Class_Descriptor cd_S124C5;
extern VTBL_ENTRY _ZTI6S124C5[];
extern  VTBL_ENTRY _ZTV6S124C5[];
extern Class_Descriptor cd_S124C4;
extern VTBL_ENTRY _ZTI6S124C4[];
extern  VTBL_ENTRY _ZTV6S124C4[];
extern Class_Descriptor cd_S124C3;
extern VTBL_ENTRY _ZTI6S124C3[];
extern  VTBL_ENTRY _ZTV6S124C3[];
extern Class_Descriptor cd_S124C2;
extern VTBL_ENTRY _ZTI6S124C2[];
extern  VTBL_ENTRY _ZTV6S124C2[];
static Base_Class bases_S124C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S124C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S124C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S124C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S124C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S124C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S124C1[];
extern void _ZN6S124C1D1Ev();
extern void _ZN6S124C1D0Ev();
extern void _ZN6S124C62v2Ev();
extern void _ZN6S124C62v3Ev();
extern void _ZN6S124C62v4Ev();
extern void _ZN6S124C62v5Ev();
extern void _ZN6S124C62v6Ev();
extern void _ZN6S124C62v7Ev();
extern void _ZN6S124C62v8Ev();
extern void _ZN6S124C62v9Ev();
extern void _ZN6S124C63v10Ev();
extern void _ZN6S124C63v11Ev();
extern void _ZN6S124C63v12Ev();
extern void _ZN6S124C63v13Ev();
extern void _ZN6S124C63v14Ev();
extern void _ZN6S124C63v15Ev();
extern void _ZN6S124C63v16Ev();
extern void _ZN6S124C63v17Ev();
extern void _ZN6S124C63v18Ev();
extern void _ZN6S124C63v19Ev();
extern void _ZN6S124C63v20Ev();
extern void _ZN6S124C63v21Ev();
extern void _ZN6S124C63v22Ev();
extern void _ZN6S124C63v23Ev();
extern void _ZN6S124C63v24Ev();
extern void _ZN6S124C63v25Ev();
extern void _ZN6S124C63v26Ev();
extern void _ZN6S124C63v27Ev();
extern void _ZN6S124C63v28Ev();
extern void _ZN6S124C63v29Ev();
extern void _ZN6S124C63v30Ev();
extern void _ZN6S124C63v31Ev();
extern void _ZN6S124C63v32Ev();
extern void _ZN6S124C63v33Ev();
extern void _ZN6S124C63v34Ev();
extern void _ZN6S124C63v35Ev();
extern void _ZN6S124C63v36Ev();
extern void _ZN6S124C63v37Ev();
extern void _ZN6S124C63v38Ev();
extern void _ZN6S124C63v39Ev();
extern void _ZN6S124C63v40Ev();
extern void _ZN6S124C63v41Ev();
extern void _ZN6S124C63v42Ev();
extern void _ZN6S124C63v43Ev();
extern void _ZN6S124C63v44Ev();
extern void _ZN6S124C63v45Ev();
extern void _ZN6S124C63v46Ev();
extern void _ZN6S124C63v47Ev();
extern void _ZN6S124C63v48Ev();
extern void _ZN6S124C63v49Ev();
extern void _ZN6S124C63v50Ev();
extern void _ZN6S124C63v51Ev();
extern void _ZN6S124C63v52Ev();
extern void _ZN6S124C63v53Ev();
extern void _ZN6S124C63v54Ev();
extern void _ZN6S124C63v55Ev();
extern void _ZN6S124C63v56Ev();
extern void _ZN6S124C63v57Ev();
extern void _ZN6S124C63v58Ev();
extern void _ZN6S124C63v59Ev();
extern void _ZN6S124C63v60Ev();
extern void _ZN6S124C63v61Ev();
extern void _ZN6S124C63v62Ev();
extern void _ZN6S124C63v63Ev();
extern void _ZN6S124C63v64Ev();
extern void _ZN6S124C63v65Ev();
extern void _ZN6S124C63v66Ev();
extern void _ZN6S124C63v67Ev();
extern void _ZN6S124C63v68Ev();
extern void _ZN6S124C63v69Ev();
extern void _ZN6S124C63v70Ev();
extern void _ZN6S124C63v71Ev();
extern void _ZN6S124C63v72Ev();
extern void _ZN6S124C63v73Ev();
extern void _ZN6S124C63v74Ev();
extern void _ZN6S124C63v75Ev();
extern void _ZN6S124C63v76Ev();
extern void _ZN6S124C63v77Ev();
extern void _ZN6S124C63v78Ev();
extern void _ZN6S124C63v79Ev();
extern void _ZN6S124C63v80Ev();
extern void _ZN6S124C63v81Ev();
extern void _ZN6S124C63v82Ev();
extern void _ZN6S124C63v83Ev();
extern void _ZN6S124C63v84Ev();
extern void _ZN6S124C63v85Ev();
extern void _ZN6S124C63v86Ev();
extern void _ZN6S124C63v87Ev();
extern void _ZN6S124C63v88Ev();
extern void _ZN6S124C63v89Ev();
extern void _ZN6S124C63v90Ev();
extern void _ZN6S124C63v91Ev();
extern void _ZN6S124C63v92Ev();
extern void _ZN6S124C63v93Ev();
extern void _ZN6S124C63v94Ev();
extern void _ZN6S124C63v95Ev();
extern void _ZN6S124C63v96Ev();
extern void _ZN6S124C63v97Ev();
extern void _ZN6S124C63v98Ev();
extern void _ZN6S124C63v99Ev();
extern void _ZN6S124C64v100Ev();
extern void _ZN6S124C64v101Ev();
extern void _ZN6S124C64v102Ev();
extern void _ZN6S124C64v103Ev();
extern void _ZN6S124C64v104Ev();
extern void _ZN6S124C64v105Ev();
extern void _ZN6S124C64v106Ev();
extern void _ZN6S124C64v107Ev();
extern void _ZN6S124C64v108Ev();
extern void _ZN6S124C44v109Ev();
extern void _ZN6S124C44v110Ev();
extern void _ZN6S124C44v111Ev();
extern void _ZN6S124C44v112Ev();
extern void _ZN6S124C44v113Ev();
extern void _ZN6S124C44v114Ev();
extern void _ZN6S124C44v115Ev();
extern void _ZN6S124C44v116Ev();
extern void _ZN6S124C44v117Ev();
extern void _ZN6S124C44v118Ev();
extern void _ZN6S124C44v119Ev();
extern void _ZN6S124C44v120Ev();
extern void _ZN6S124C44v121Ev();
extern void _ZN6S124C44v122Ev();
extern void _ZN6S124C44v123Ev();
extern void _ZN6S124C44v124Ev();
extern void _ZN6S124C44v125Ev();
extern void _ZN6S124C44v126Ev();
extern void _ZN6S124C44v127Ev();
extern void _ZN6S124C44v128Ev();
extern void _ZN6S124C44v129Ev();
extern void _ZN6S124C44v130Ev();
extern void _ZN6S124C44v131Ev();
extern void _ZN6S124C44v132Ev();
extern void _ZN6S124C44v133Ev();
extern void _ZN6S124C44v134Ev();
extern void _ZN6S124C34v135Ev();
extern void _ZN6S124C34v136Ev();
extern void _ZN6S124C34v137Ev();
extern void _ZN6S124C34v138Ev();
extern void _ZN6S124C34v139Ev();
extern void _ZN6S124C34v140Ev();
extern void _ZN6S124C34v141Ev();
extern void _ZN6S124C34v142Ev();
extern void _ZN6S124C34v143Ev();
extern void _ZN6S124C34v144Ev();
extern void _ZN6S124C34v145Ev();
extern void _ZN6S124C34v146Ev();
extern void _ZN6S124C34v147Ev();
extern void _ZN6S124C34v148Ev();
extern void _ZN6S124C34v149Ev();
extern void _ZN6S124C34v150Ev();
extern void _ZN6S124C34v151Ev();
extern void _ZN6S124C34v152Ev();
extern void _ZN6S124C24v153Ev();
extern void _ZN6S124C24v154Ev();
extern void _ZN6S124C24v155Ev();
extern void _ZN6S124C24v156Ev();
extern void _ZN6S124C24v157Ev();
extern void _ZN6S124C24v158Ev();
extern void _ZN6S124C24v159Ev();
extern void _ZN6S124C24v160Ev();
extern void _ZN6S124C24v161Ev();
extern void _ZN6S124C24v162Ev();
extern void _ZN6S124C24v163Ev();
extern void _ZN6S124C24v164Ev();
extern void _ZN6S124C24v165Ev();
extern void _ZN6S124C24v166Ev();
extern void _ZN6S124C24v167Ev();
extern void _ZN6S124C24v168Ev();
extern void _ZN6S124C24v169Ev();
extern void _ZN6S124C24v170Ev();
extern void _ZN6S124C24v171Ev();
extern void _ZN6S124C24v172Ev();
extern void _ZN6S124C24v173Ev();
extern void _ZN6S124C24v174Ev();
extern void _ZN6S124C24v175Ev();
extern void _ZN6S124C24v176Ev();
extern void _ZN6S124C24v177Ev();
extern void _ZN6S124C24v178Ev();
extern void _ZN6S124C12v1Ev();
static  VTBL_ENTRY vtc_S124C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S124C1[0]),
  (VTBL_ENTRY)&_ZN6S124C1D1Ev,
  (VTBL_ENTRY)&_ZN6S124C1D0Ev,
  (VTBL_ENTRY)&_ZN6S124C62v2Ev,
  (VTBL_ENTRY)&_ZN6S124C62v3Ev,
  (VTBL_ENTRY)&_ZN6S124C62v4Ev,
  (VTBL_ENTRY)&_ZN6S124C62v5Ev,
  (VTBL_ENTRY)&_ZN6S124C62v6Ev,
  (VTBL_ENTRY)&_ZN6S124C62v7Ev,
  (VTBL_ENTRY)&_ZN6S124C62v8Ev,
  (VTBL_ENTRY)&_ZN6S124C62v9Ev,
  (VTBL_ENTRY)&_ZN6S124C63v10Ev,
  (VTBL_ENTRY)&_ZN6S124C63v11Ev,
  (VTBL_ENTRY)&_ZN6S124C63v12Ev,
  (VTBL_ENTRY)&_ZN6S124C63v13Ev,
  (VTBL_ENTRY)&_ZN6S124C63v14Ev,
  (VTBL_ENTRY)&_ZN6S124C63v15Ev,
  (VTBL_ENTRY)&_ZN6S124C63v16Ev,
  (VTBL_ENTRY)&_ZN6S124C63v17Ev,
  (VTBL_ENTRY)&_ZN6S124C63v18Ev,
  (VTBL_ENTRY)&_ZN6S124C63v19Ev,
  (VTBL_ENTRY)&_ZN6S124C63v20Ev,
  (VTBL_ENTRY)&_ZN6S124C63v21Ev,
  (VTBL_ENTRY)&_ZN6S124C63v22Ev,
  (VTBL_ENTRY)&_ZN6S124C63v23Ev,
  (VTBL_ENTRY)&_ZN6S124C63v24Ev,
  (VTBL_ENTRY)&_ZN6S124C63v25Ev,
  (VTBL_ENTRY)&_ZN6S124C63v26Ev,
  (VTBL_ENTRY)&_ZN6S124C63v27Ev,
  (VTBL_ENTRY)&_ZN6S124C63v28Ev,
  (VTBL_ENTRY)&_ZN6S124C63v29Ev,
  (VTBL_ENTRY)&_ZN6S124C63v30Ev,
  (VTBL_ENTRY)&_ZN6S124C63v31Ev,
  (VTBL_ENTRY)&_ZN6S124C63v32Ev,
  (VTBL_ENTRY)&_ZN6S124C63v33Ev,
  (VTBL_ENTRY)&_ZN6S124C63v34Ev,
  (VTBL_ENTRY)&_ZN6S124C63v35Ev,
  (VTBL_ENTRY)&_ZN6S124C63v36Ev,
  (VTBL_ENTRY)&_ZN6S124C63v37Ev,
  (VTBL_ENTRY)&_ZN6S124C63v38Ev,
  (VTBL_ENTRY)&_ZN6S124C63v39Ev,
  (VTBL_ENTRY)&_ZN6S124C63v40Ev,
  (VTBL_ENTRY)&_ZN6S124C63v41Ev,
  (VTBL_ENTRY)&_ZN6S124C63v42Ev,
  (VTBL_ENTRY)&_ZN6S124C63v43Ev,
  (VTBL_ENTRY)&_ZN6S124C63v44Ev,
  (VTBL_ENTRY)&_ZN6S124C63v45Ev,
  (VTBL_ENTRY)&_ZN6S124C63v46Ev,
  (VTBL_ENTRY)&_ZN6S124C63v47Ev,
  (VTBL_ENTRY)&_ZN6S124C63v48Ev,
  (VTBL_ENTRY)&_ZN6S124C63v49Ev,
  (VTBL_ENTRY)&_ZN6S124C63v50Ev,
  (VTBL_ENTRY)&_ZN6S124C63v51Ev,
  (VTBL_ENTRY)&_ZN6S124C63v52Ev,
  (VTBL_ENTRY)&_ZN6S124C63v53Ev,
  (VTBL_ENTRY)&_ZN6S124C63v54Ev,
  (VTBL_ENTRY)&_ZN6S124C63v55Ev,
  (VTBL_ENTRY)&_ZN6S124C63v56Ev,
  (VTBL_ENTRY)&_ZN6S124C63v57Ev,
  (VTBL_ENTRY)&_ZN6S124C63v58Ev,
  (VTBL_ENTRY)&_ZN6S124C63v59Ev,
  (VTBL_ENTRY)&_ZN6S124C63v60Ev,
  (VTBL_ENTRY)&_ZN6S124C63v61Ev,
  (VTBL_ENTRY)&_ZN6S124C63v62Ev,
  (VTBL_ENTRY)&_ZN6S124C63v63Ev,
  (VTBL_ENTRY)&_ZN6S124C63v64Ev,
  (VTBL_ENTRY)&_ZN6S124C63v65Ev,
  (VTBL_ENTRY)&_ZN6S124C63v66Ev,
  (VTBL_ENTRY)&_ZN6S124C63v67Ev,
  (VTBL_ENTRY)&_ZN6S124C63v68Ev,
  (VTBL_ENTRY)&_ZN6S124C63v69Ev,
  (VTBL_ENTRY)&_ZN6S124C63v70Ev,
  (VTBL_ENTRY)&_ZN6S124C63v71Ev,
  (VTBL_ENTRY)&_ZN6S124C63v72Ev,
  (VTBL_ENTRY)&_ZN6S124C63v73Ev,
  (VTBL_ENTRY)&_ZN6S124C63v74Ev,
  (VTBL_ENTRY)&_ZN6S124C63v75Ev,
  (VTBL_ENTRY)&_ZN6S124C63v76Ev,
  (VTBL_ENTRY)&_ZN6S124C63v77Ev,
  (VTBL_ENTRY)&_ZN6S124C63v78Ev,
  (VTBL_ENTRY)&_ZN6S124C63v79Ev,
  (VTBL_ENTRY)&_ZN6S124C63v80Ev,
  (VTBL_ENTRY)&_ZN6S124C63v81Ev,
  (VTBL_ENTRY)&_ZN6S124C63v82Ev,
  (VTBL_ENTRY)&_ZN6S124C63v83Ev,
  (VTBL_ENTRY)&_ZN6S124C63v84Ev,
  (VTBL_ENTRY)&_ZN6S124C63v85Ev,
  (VTBL_ENTRY)&_ZN6S124C63v86Ev,
  (VTBL_ENTRY)&_ZN6S124C63v87Ev,
  (VTBL_ENTRY)&_ZN6S124C63v88Ev,
  (VTBL_ENTRY)&_ZN6S124C63v89Ev,
  (VTBL_ENTRY)&_ZN6S124C63v90Ev,
  (VTBL_ENTRY)&_ZN6S124C63v91Ev,
  (VTBL_ENTRY)&_ZN6S124C63v92Ev,
  (VTBL_ENTRY)&_ZN6S124C63v93Ev,
  (VTBL_ENTRY)&_ZN6S124C63v94Ev,
  (VTBL_ENTRY)&_ZN6S124C63v95Ev,
  (VTBL_ENTRY)&_ZN6S124C63v96Ev,
  (VTBL_ENTRY)&_ZN6S124C63v97Ev,
  (VTBL_ENTRY)&_ZN6S124C63v98Ev,
  (VTBL_ENTRY)&_ZN6S124C63v99Ev,
  (VTBL_ENTRY)&_ZN6S124C64v100Ev,
  (VTBL_ENTRY)&_ZN6S124C64v101Ev,
  (VTBL_ENTRY)&_ZN6S124C64v102Ev,
  (VTBL_ENTRY)&_ZN6S124C64v103Ev,
  (VTBL_ENTRY)&_ZN6S124C64v104Ev,
  (VTBL_ENTRY)&_ZN6S124C64v105Ev,
  (VTBL_ENTRY)&_ZN6S124C64v106Ev,
  (VTBL_ENTRY)&_ZN6S124C64v107Ev,
  (VTBL_ENTRY)&_ZN6S124C64v108Ev,
  (VTBL_ENTRY)&_ZN6S124C44v109Ev,
  (VTBL_ENTRY)&_ZN6S124C44v110Ev,
  (VTBL_ENTRY)&_ZN6S124C44v111Ev,
  (VTBL_ENTRY)&_ZN6S124C44v112Ev,
  (VTBL_ENTRY)&_ZN6S124C44v113Ev,
  (VTBL_ENTRY)&_ZN6S124C44v114Ev,
  (VTBL_ENTRY)&_ZN6S124C44v115Ev,
  (VTBL_ENTRY)&_ZN6S124C44v116Ev,
  (VTBL_ENTRY)&_ZN6S124C44v117Ev,
  (VTBL_ENTRY)&_ZN6S124C44v118Ev,
  (VTBL_ENTRY)&_ZN6S124C44v119Ev,
  (VTBL_ENTRY)&_ZN6S124C44v120Ev,
  (VTBL_ENTRY)&_ZN6S124C44v121Ev,
  (VTBL_ENTRY)&_ZN6S124C44v122Ev,
  (VTBL_ENTRY)&_ZN6S124C44v123Ev,
  (VTBL_ENTRY)&_ZN6S124C44v124Ev,
  (VTBL_ENTRY)&_ZN6S124C44v125Ev,
  (VTBL_ENTRY)&_ZN6S124C44v126Ev,
  (VTBL_ENTRY)&_ZN6S124C44v127Ev,
  (VTBL_ENTRY)&_ZN6S124C44v128Ev,
  (VTBL_ENTRY)&_ZN6S124C44v129Ev,
  (VTBL_ENTRY)&_ZN6S124C44v130Ev,
  (VTBL_ENTRY)&_ZN6S124C44v131Ev,
  (VTBL_ENTRY)&_ZN6S124C44v132Ev,
  (VTBL_ENTRY)&_ZN6S124C44v133Ev,
  (VTBL_ENTRY)&_ZN6S124C44v134Ev,
  (VTBL_ENTRY)&_ZN6S124C34v135Ev,
  (VTBL_ENTRY)&_ZN6S124C34v136Ev,
  (VTBL_ENTRY)&_ZN6S124C34v137Ev,
  (VTBL_ENTRY)&_ZN6S124C34v138Ev,
  (VTBL_ENTRY)&_ZN6S124C34v139Ev,
  (VTBL_ENTRY)&_ZN6S124C34v140Ev,
  (VTBL_ENTRY)&_ZN6S124C34v141Ev,
  (VTBL_ENTRY)&_ZN6S124C34v142Ev,
  (VTBL_ENTRY)&_ZN6S124C34v143Ev,
  (VTBL_ENTRY)&_ZN6S124C34v144Ev,
  (VTBL_ENTRY)&_ZN6S124C34v145Ev,
  (VTBL_ENTRY)&_ZN6S124C34v146Ev,
  (VTBL_ENTRY)&_ZN6S124C34v147Ev,
  (VTBL_ENTRY)&_ZN6S124C34v148Ev,
  (VTBL_ENTRY)&_ZN6S124C34v149Ev,
  (VTBL_ENTRY)&_ZN6S124C34v150Ev,
  (VTBL_ENTRY)&_ZN6S124C34v151Ev,
  (VTBL_ENTRY)&_ZN6S124C34v152Ev,
  (VTBL_ENTRY)&_ZN6S124C24v153Ev,
  (VTBL_ENTRY)&_ZN6S124C24v154Ev,
  (VTBL_ENTRY)&_ZN6S124C24v155Ev,
  (VTBL_ENTRY)&_ZN6S124C24v156Ev,
  (VTBL_ENTRY)&_ZN6S124C24v157Ev,
  (VTBL_ENTRY)&_ZN6S124C24v158Ev,
  (VTBL_ENTRY)&_ZN6S124C24v159Ev,
  (VTBL_ENTRY)&_ZN6S124C24v160Ev,
  (VTBL_ENTRY)&_ZN6S124C24v161Ev,
  (VTBL_ENTRY)&_ZN6S124C24v162Ev,
  (VTBL_ENTRY)&_ZN6S124C24v163Ev,
  (VTBL_ENTRY)&_ZN6S124C24v164Ev,
  (VTBL_ENTRY)&_ZN6S124C24v165Ev,
  (VTBL_ENTRY)&_ZN6S124C24v166Ev,
  (VTBL_ENTRY)&_ZN6S124C24v167Ev,
  (VTBL_ENTRY)&_ZN6S124C24v168Ev,
  (VTBL_ENTRY)&_ZN6S124C24v169Ev,
  (VTBL_ENTRY)&_ZN6S124C24v170Ev,
  (VTBL_ENTRY)&_ZN6S124C24v171Ev,
  (VTBL_ENTRY)&_ZN6S124C24v172Ev,
  (VTBL_ENTRY)&_ZN6S124C24v173Ev,
  (VTBL_ENTRY)&_ZN6S124C24v174Ev,
  (VTBL_ENTRY)&_ZN6S124C24v175Ev,
  (VTBL_ENTRY)&_ZN6S124C24v176Ev,
  (VTBL_ENTRY)&_ZN6S124C24v177Ev,
  (VTBL_ENTRY)&_ZN6S124C24v178Ev,
  (VTBL_ENTRY)&_ZN6S124C12v1Ev,
};
extern VTBL_ENTRY _ZTI6S124C1[];
extern  VTBL_ENTRY _ZTV6S124C1[];
Class_Descriptor cd_S124C1 = {  "S124C1", // class name
  bases_S124C1, 6,
  &(vtc_S124C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S124C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S124C1),182, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1474C4  {
  int s1474c4f0;
  __tsi64 s1474c4f1;
  void *s1474c4f2[4];
  int s1474c4f3[2];
  void *s1474c4f4;
  ::S1378C5_nt s1474c4f5;
  void *s1474c4f6[2];
  virtual  ~S1474C4(); // _ZN7S1474C4D1Ev
  virtual void  v5(); // _ZN7S1474C42v5Ev
  virtual void  v6(); // _ZN7S1474C42v6Ev
  virtual void  v7(); // _ZN7S1474C42v7Ev
  virtual void  v8(); // _ZN7S1474C42v8Ev
  virtual void  v9(); // _ZN7S1474C42v9Ev
  virtual void  v10(); // _ZN7S1474C43v10Ev
  virtual void  v11(); // _ZN7S1474C43v11Ev
  virtual void  v12(); // _ZN7S1474C43v12Ev
  virtual void  v13(); // _ZN7S1474C43v13Ev
  virtual void  v14(); // _ZN7S1474C43v14Ev
  virtual void  v15(); // _ZN7S1474C43v15Ev
  virtual void  v16(); // _ZN7S1474C43v16Ev
  virtual void  v17(); // _ZN7S1474C43v17Ev
  virtual void  v18(); // _ZN7S1474C43v18Ev
  virtual void  v19(); // _ZN7S1474C43v19Ev
  virtual void  v20(); // _ZN7S1474C43v20Ev
  virtual void  v21(); // _ZN7S1474C43v21Ev
  virtual void  v22(); // _ZN7S1474C43v22Ev
  virtual void  v23(); // _ZN7S1474C43v23Ev
  virtual void  v24(); // _ZN7S1474C43v24Ev
  virtual void  v25(); // _ZN7S1474C43v25Ev
  virtual void  v26(); // _ZN7S1474C43v26Ev
  virtual void  v27(); // _ZN7S1474C43v27Ev
  virtual void  v28(); // _ZN7S1474C43v28Ev
  virtual void  v29(); // _ZN7S1474C43v29Ev
  virtual void  v30(); // _ZN7S1474C43v30Ev
  virtual void  v31(); // _ZN7S1474C43v31Ev
  virtual void  v32(); // _ZN7S1474C43v32Ev
  virtual void  v33(); // _ZN7S1474C43v33Ev
  virtual void  v34(); // _ZN7S1474C43v34Ev
  virtual void  v35(); // _ZN7S1474C43v35Ev
  virtual void  v36(); // _ZN7S1474C43v36Ev
  virtual void  v37(); // _ZN7S1474C43v37Ev
  virtual void  v38(); // _ZN7S1474C43v38Ev
  virtual void  v39(); // _ZN7S1474C43v39Ev
  virtual void  v40(); // _ZN7S1474C43v40Ev
  virtual void  v41(); // _ZN7S1474C43v41Ev
  virtual void  v42(); // _ZN7S1474C43v42Ev
  virtual void  v43(); // _ZN7S1474C43v43Ev
  virtual void  v44(); // _ZN7S1474C43v44Ev
  virtual void  v45(); // _ZN7S1474C43v45Ev
  virtual void  v46(); // _ZN7S1474C43v46Ev
  virtual void  v47(); // _ZN7S1474C43v47Ev
  virtual void  v48(); // _ZN7S1474C43v48Ev
  virtual void  v49(); // _ZN7S1474C43v49Ev
  virtual void  v50(); // _ZN7S1474C43v50Ev
  virtual void  v51(); // _ZN7S1474C43v51Ev
  virtual void  v52(); // _ZN7S1474C43v52Ev
  virtual void  v53(); // _ZN7S1474C43v53Ev
  virtual void  v54(); // _ZN7S1474C43v54Ev
  virtual void  v55(); // _ZN7S1474C43v55Ev
  virtual void  v56(); // _ZN7S1474C43v56Ev
  virtual void  v57(); // _ZN7S1474C43v57Ev
  virtual void  v58(); // _ZN7S1474C43v58Ev
  virtual void  v59(); // _ZN7S1474C43v59Ev
  virtual void  v60(); // _ZN7S1474C43v60Ev
  virtual void  v61(); // _ZN7S1474C43v61Ev
  virtual void  v62(); // _ZN7S1474C43v62Ev
  virtual void  v63(); // _ZN7S1474C43v63Ev
  virtual void  v64(); // _ZN7S1474C43v64Ev
  virtual void  v65(); // _ZN7S1474C43v65Ev
  virtual void  v66(); // _ZN7S1474C43v66Ev
  virtual void  v67(); // _ZN7S1474C43v67Ev
  virtual void  v68(); // _ZN7S1474C43v68Ev
  S1474C4(); // tgen
};
//SIG(-1 S1474C4) 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]}


 S1474C4 ::~S1474C4(){ note_dtor("S1474C4", this);}
void  S1474C4 ::v5(){vfunc_called(this, "_ZN7S1474C42v5Ev");}
void  S1474C4 ::v6(){vfunc_called(this, "_ZN7S1474C42v6Ev");}
void  S1474C4 ::v7(){vfunc_called(this, "_ZN7S1474C42v7Ev");}
void  S1474C4 ::v8(){vfunc_called(this, "_ZN7S1474C42v8Ev");}
void  S1474C4 ::v9(){vfunc_called(this, "_ZN7S1474C42v9Ev");}
void  S1474C4 ::v10(){vfunc_called(this, "_ZN7S1474C43v10Ev");}
void  S1474C4 ::v11(){vfunc_called(this, "_ZN7S1474C43v11Ev");}
void  S1474C4 ::v12(){vfunc_called(this, "_ZN7S1474C43v12Ev");}
void  S1474C4 ::v13(){vfunc_called(this, "_ZN7S1474C43v13Ev");}
void  S1474C4 ::v14(){vfunc_called(this, "_ZN7S1474C43v14Ev");}
void  S1474C4 ::v15(){vfunc_called(this, "_ZN7S1474C43v15Ev");}
void  S1474C4 ::v16(){vfunc_called(this, "_ZN7S1474C43v16Ev");}
void  S1474C4 ::v17(){vfunc_called(this, "_ZN7S1474C43v17Ev");}
void  S1474C4 ::v18(){vfunc_called(this, "_ZN7S1474C43v18Ev");}
void  S1474C4 ::v19(){vfunc_called(this, "_ZN7S1474C43v19Ev");}
void  S1474C4 ::v20(){vfunc_called(this, "_ZN7S1474C43v20Ev");}
void  S1474C4 ::v21(){vfunc_called(this, "_ZN7S1474C43v21Ev");}
void  S1474C4 ::v22(){vfunc_called(this, "_ZN7S1474C43v22Ev");}
void  S1474C4 ::v23(){vfunc_called(this, "_ZN7S1474C43v23Ev");}
void  S1474C4 ::v24(){vfunc_called(this, "_ZN7S1474C43v24Ev");}
void  S1474C4 ::v25(){vfunc_called(this, "_ZN7S1474C43v25Ev");}
void  S1474C4 ::v26(){vfunc_called(this, "_ZN7S1474C43v26Ev");}
void  S1474C4 ::v27(){vfunc_called(this, "_ZN7S1474C43v27Ev");}
void  S1474C4 ::v28(){vfunc_called(this, "_ZN7S1474C43v28Ev");}
void  S1474C4 ::v29(){vfunc_called(this, "_ZN7S1474C43v29Ev");}
void  S1474C4 ::v30(){vfunc_called(this, "_ZN7S1474C43v30Ev");}
void  S1474C4 ::v31(){vfunc_called(this, "_ZN7S1474C43v31Ev");}
void  S1474C4 ::v32(){vfunc_called(this, "_ZN7S1474C43v32Ev");}
void  S1474C4 ::v33(){vfunc_called(this, "_ZN7S1474C43v33Ev");}
void  S1474C4 ::v34(){vfunc_called(this, "_ZN7S1474C43v34Ev");}
void  S1474C4 ::v35(){vfunc_called(this, "_ZN7S1474C43v35Ev");}
void  S1474C4 ::v36(){vfunc_called(this, "_ZN7S1474C43v36Ev");}
void  S1474C4 ::v37(){vfunc_called(this, "_ZN7S1474C43v37Ev");}
void  S1474C4 ::v38(){vfunc_called(this, "_ZN7S1474C43v38Ev");}
void  S1474C4 ::v39(){vfunc_called(this, "_ZN7S1474C43v39Ev");}
void  S1474C4 ::v40(){vfunc_called(this, "_ZN7S1474C43v40Ev");}
void  S1474C4 ::v41(){vfunc_called(this, "_ZN7S1474C43v41Ev");}
void  S1474C4 ::v42(){vfunc_called(this, "_ZN7S1474C43v42Ev");}
void  S1474C4 ::v43(){vfunc_called(this, "_ZN7S1474C43v43Ev");}
void  S1474C4 ::v44(){vfunc_called(this, "_ZN7S1474C43v44Ev");}
void  S1474C4 ::v45(){vfunc_called(this, "_ZN7S1474C43v45Ev");}
void  S1474C4 ::v46(){vfunc_called(this, "_ZN7S1474C43v46Ev");}
void  S1474C4 ::v47(){vfunc_called(this, "_ZN7S1474C43v47Ev");}
void  S1474C4 ::v48(){vfunc_called(this, "_ZN7S1474C43v48Ev");}
void  S1474C4 ::v49(){vfunc_called(this, "_ZN7S1474C43v49Ev");}
void  S1474C4 ::v50(){vfunc_called(this, "_ZN7S1474C43v50Ev");}
void  S1474C4 ::v51(){vfunc_called(this, "_ZN7S1474C43v51Ev");}
void  S1474C4 ::v52(){vfunc_called(this, "_ZN7S1474C43v52Ev");}
void  S1474C4 ::v53(){vfunc_called(this, "_ZN7S1474C43v53Ev");}
void  S1474C4 ::v54(){vfunc_called(this, "_ZN7S1474C43v54Ev");}
void  S1474C4 ::v55(){vfunc_called(this, "_ZN7S1474C43v55Ev");}
void  S1474C4 ::v56(){vfunc_called(this, "_ZN7S1474C43v56Ev");}
void  S1474C4 ::v57(){vfunc_called(this, "_ZN7S1474C43v57Ev");}
void  S1474C4 ::v58(){vfunc_called(this, "_ZN7S1474C43v58Ev");}
void  S1474C4 ::v59(){vfunc_called(this, "_ZN7S1474C43v59Ev");}
void  S1474C4 ::v60(){vfunc_called(this, "_ZN7S1474C43v60Ev");}
void  S1474C4 ::v61(){vfunc_called(this, "_ZN7S1474C43v61Ev");}
void  S1474C4 ::v62(){vfunc_called(this, "_ZN7S1474C43v62Ev");}
void  S1474C4 ::v63(){vfunc_called(this, "_ZN7S1474C43v63Ev");}
void  S1474C4 ::v64(){vfunc_called(this, "_ZN7S1474C43v64Ev");}
void  S1474C4 ::v65(){vfunc_called(this, "_ZN7S1474C43v65Ev");}
void  S1474C4 ::v66(){vfunc_called(this, "_ZN7S1474C43v66Ev");}
void  S1474C4 ::v67(){vfunc_called(this, "_ZN7S1474C43v67Ev");}
void  S1474C4 ::v68(){vfunc_called(this, "_ZN7S1474C43v68Ev");}
S1474C4 ::S1474C4(){ note_ctor("S1474C4", this);} // tgen

static void Test_S1474C4()
{
  extern Class_Descriptor cd_S1474C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1474C4, buf);
    S1474C4 *dp, &lv = *(dp=new (buf) S1474C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1474C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1474C4)");
    check_field_offset(lv, s1474c4f0, ABISELECT(8,4), "S1474C4.s1474c4f0");
    check_field_offset(lv, s1474c4f1, ABISELECT(16,8), "S1474C4.s1474c4f1");
    check_field_offset(lv, s1474c4f2, ABISELECT(24,16), "S1474C4.s1474c4f2");
    check_field_offset(lv, s1474c4f3, ABISELECT(56,32), "S1474C4.s1474c4f3");
    check_field_offset(lv, s1474c4f4, ABISELECT(64,40), "S1474C4.s1474c4f4");
    check_field_offset(lv, s1474c4f5, ABISELECT(72,44), "S1474C4.s1474c4f5");
    check_field_offset(lv, s1474c4f6, ABISELECT(80,52), "S1474C4.s1474c4f6");
    test_class_info(&lv, &cd_S1474C4);
    dp->~S1474C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1474C4(Test_S1474C4, "S1474C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1474C4C1Ev();
extern void _ZN7S1474C4D1Ev();
Name_Map name_map_S1474C4[] = {
  NSPAIR(_ZN7S1474C4C1Ev),
  NSPAIR(_ZN7S1474C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1474C4[];
extern void _ZN7S1474C4D1Ev();
extern void _ZN7S1474C4D0Ev();
extern void _ZN7S1474C42v5Ev();
extern void _ZN7S1474C42v6Ev();
extern void _ZN7S1474C42v7Ev();
extern void _ZN7S1474C42v8Ev();
extern void _ZN7S1474C42v9Ev();
extern void _ZN7S1474C43v10Ev();
extern void _ZN7S1474C43v11Ev();
extern void _ZN7S1474C43v12Ev();
extern void _ZN7S1474C43v13Ev();
extern void _ZN7S1474C43v14Ev();
extern void _ZN7S1474C43v15Ev();
extern void _ZN7S1474C43v16Ev();
extern void _ZN7S1474C43v17Ev();
extern void _ZN7S1474C43v18Ev();
extern void _ZN7S1474C43v19Ev();
extern void _ZN7S1474C43v20Ev();
extern void _ZN7S1474C43v21Ev();
extern void _ZN7S1474C43v22Ev();
extern void _ZN7S1474C43v23Ev();
extern void _ZN7S1474C43v24Ev();
extern void _ZN7S1474C43v25Ev();
extern void _ZN7S1474C43v26Ev();
extern void _ZN7S1474C43v27Ev();
extern void _ZN7S1474C43v28Ev();
extern void _ZN7S1474C43v29Ev();
extern void _ZN7S1474C43v30Ev();
extern void _ZN7S1474C43v31Ev();
extern void _ZN7S1474C43v32Ev();
extern void _ZN7S1474C43v33Ev();
extern void _ZN7S1474C43v34Ev();
extern void _ZN7S1474C43v35Ev();
extern void _ZN7S1474C43v36Ev();
extern void _ZN7S1474C43v37Ev();
extern void _ZN7S1474C43v38Ev();
extern void _ZN7S1474C43v39Ev();
extern void _ZN7S1474C43v40Ev();
extern void _ZN7S1474C43v41Ev();
extern void _ZN7S1474C43v42Ev();
extern void _ZN7S1474C43v43Ev();
extern void _ZN7S1474C43v44Ev();
extern void _ZN7S1474C43v45Ev();
extern void _ZN7S1474C43v46Ev();
extern void _ZN7S1474C43v47Ev();
extern void _ZN7S1474C43v48Ev();
extern void _ZN7S1474C43v49Ev();
extern void _ZN7S1474C43v50Ev();
extern void _ZN7S1474C43v51Ev();
extern void _ZN7S1474C43v52Ev();
extern void _ZN7S1474C43v53Ev();
extern void _ZN7S1474C43v54Ev();
extern void _ZN7S1474C43v55Ev();
extern void _ZN7S1474C43v56Ev();
extern void _ZN7S1474C43v57Ev();
extern void _ZN7S1474C43v58Ev();
extern void _ZN7S1474C43v59Ev();
extern void _ZN7S1474C43v60Ev();
extern void _ZN7S1474C43v61Ev();
extern void _ZN7S1474C43v62Ev();
extern void _ZN7S1474C43v63Ev();
extern void _ZN7S1474C43v64Ev();
extern void _ZN7S1474C43v65Ev();
extern void _ZN7S1474C43v66Ev();
extern void _ZN7S1474C43v67Ev();
extern void _ZN7S1474C43v68Ev();
static  VTBL_ENTRY vtc_S1474C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1474C4[0]),
  (VTBL_ENTRY)&_ZN7S1474C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1474C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v68Ev,
};
extern VTBL_ENTRY _ZTI7S1474C4[];
extern  VTBL_ENTRY _ZTV7S1474C4[];
Class_Descriptor cd_S1474C4 = {  "S1474C4", // class name
  0,0,//no base classes
  &(vtc_S1474C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1474C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1474C4),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  S1474C3  : S1474C4 {
  virtual  ~S1474C3(); // _ZN7S1474C3D1Ev
  virtual void  v69(); // _ZN7S1474C33v69Ev
  virtual void  v70(); // _ZN7S1474C33v70Ev
  virtual void  v71(); // _ZN7S1474C33v71Ev
  S1474C3(); // tgen
};
//SIG(-1 S1474C3) 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}


 S1474C3 ::~S1474C3(){ note_dtor("S1474C3", this);}
void  S1474C3 ::v69(){vfunc_called(this, "_ZN7S1474C33v69Ev");}
void  S1474C3 ::v70(){vfunc_called(this, "_ZN7S1474C33v70Ev");}
void  S1474C3 ::v71(){vfunc_called(this, "_ZN7S1474C33v71Ev");}
S1474C3 ::S1474C3(){ note_ctor("S1474C3", this);} // tgen

static void Test_S1474C3()
{
  extern Class_Descriptor cd_S1474C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1474C3, buf);
    S1474C3 *dp, &lv = *(dp=new (buf) S1474C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1474C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1474C3)");
    check_base_class_offset(lv, (S1474C4*), 0, "S1474C3");
    test_class_info(&lv, &cd_S1474C3);
    dp->~S1474C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1474C3(Test_S1474C3, "S1474C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1474C3C1Ev();
extern void _ZN7S1474C3D1Ev();
Name_Map name_map_S1474C3[] = {
  NSPAIR(_ZN7S1474C3C1Ev),
  NSPAIR(_ZN7S1474C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1474C4;
extern VTBL_ENTRY _ZTI7S1474C4[];
extern  VTBL_ENTRY _ZTV7S1474C4[];
static Base_Class bases_S1474C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1474C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1474C3[];
extern void _ZN7S1474C3D1Ev();
extern void _ZN7S1474C3D0Ev();
extern void _ZN7S1474C42v5Ev();
extern void _ZN7S1474C42v6Ev();
extern void _ZN7S1474C42v7Ev();
extern void _ZN7S1474C42v8Ev();
extern void _ZN7S1474C42v9Ev();
extern void _ZN7S1474C43v10Ev();
extern void _ZN7S1474C43v11Ev();
extern void _ZN7S1474C43v12Ev();
extern void _ZN7S1474C43v13Ev();
extern void _ZN7S1474C43v14Ev();
extern void _ZN7S1474C43v15Ev();
extern void _ZN7S1474C43v16Ev();
extern void _ZN7S1474C43v17Ev();
extern void _ZN7S1474C43v18Ev();
extern void _ZN7S1474C43v19Ev();
extern void _ZN7S1474C43v20Ev();
extern void _ZN7S1474C43v21Ev();
extern void _ZN7S1474C43v22Ev();
extern void _ZN7S1474C43v23Ev();
extern void _ZN7S1474C43v24Ev();
extern void _ZN7S1474C43v25Ev();
extern void _ZN7S1474C43v26Ev();
extern void _ZN7S1474C43v27Ev();
extern void _ZN7S1474C43v28Ev();
extern void _ZN7S1474C43v29Ev();
extern void _ZN7S1474C43v30Ev();
extern void _ZN7S1474C43v31Ev();
extern void _ZN7S1474C43v32Ev();
extern void _ZN7S1474C43v33Ev();
extern void _ZN7S1474C43v34Ev();
extern void _ZN7S1474C43v35Ev();
extern void _ZN7S1474C43v36Ev();
extern void _ZN7S1474C43v37Ev();
extern void _ZN7S1474C43v38Ev();
extern void _ZN7S1474C43v39Ev();
extern void _ZN7S1474C43v40Ev();
extern void _ZN7S1474C43v41Ev();
extern void _ZN7S1474C43v42Ev();
extern void _ZN7S1474C43v43Ev();
extern void _ZN7S1474C43v44Ev();
extern void _ZN7S1474C43v45Ev();
extern void _ZN7S1474C43v46Ev();
extern void _ZN7S1474C43v47Ev();
extern void _ZN7S1474C43v48Ev();
extern void _ZN7S1474C43v49Ev();
extern void _ZN7S1474C43v50Ev();
extern void _ZN7S1474C43v51Ev();
extern void _ZN7S1474C43v52Ev();
extern void _ZN7S1474C43v53Ev();
extern void _ZN7S1474C43v54Ev();
extern void _ZN7S1474C43v55Ev();
extern void _ZN7S1474C43v56Ev();
extern void _ZN7S1474C43v57Ev();
extern void _ZN7S1474C43v58Ev();
extern void _ZN7S1474C43v59Ev();
extern void _ZN7S1474C43v60Ev();
extern void _ZN7S1474C43v61Ev();
extern void _ZN7S1474C43v62Ev();
extern void _ZN7S1474C43v63Ev();
extern void _ZN7S1474C43v64Ev();
extern void _ZN7S1474C43v65Ev();
extern void _ZN7S1474C43v66Ev();
extern void _ZN7S1474C43v67Ev();
extern void _ZN7S1474C43v68Ev();
extern void _ZN7S1474C33v69Ev();
extern void _ZN7S1474C33v70Ev();
extern void _ZN7S1474C33v71Ev();
static  VTBL_ENTRY vtc_S1474C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1474C3[0]),
  (VTBL_ENTRY)&_ZN7S1474C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1474C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1474C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1474C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1474C33v71Ev,
};
extern VTBL_ENTRY _ZTI7S1474C3[];
extern  VTBL_ENTRY _ZTV7S1474C3[];
Class_Descriptor cd_S1474C3 = {  "S1474C3", // class name
  bases_S1474C3, 1,
  &(vtc_S1474C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1474C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1474C3),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  S1474C10_nt  {
  int s1474c10f0[4];
  void  mf1474c10(); // _ZN11S1474C10_nt9mf1474c10Ev
};
//SIG(-1 S1474C10_nt) C1{ m Fi[4]}


void  S1474C10_nt ::mf1474c10(){}

//skip512 S1474C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1474C2  : S1474C3 {
  int s1474c2f0[2];
  void *s1474c2f1;
  unsigned int s1474c2f2:1;
  int s1474c2f3;
  void *s1474c2f4;
  int s1474c2f5;
  ::S1378C14_nt s1474c2f6;
  int s1474c2f7[4];
  ::S1378C22 s1474c2f8;
  unsigned int s1474c2f9:1;
  void *s1474c2f10[4];
  ::S1378C14_nt s1474c2f11;
  ::S1378C14_nt s1474c2f12;
  int s1474c2f13;
  void *s1474c2f14[2];
  int s1474c2f15;
  ::S1378C14_nt s1474c2f16;
  int s1474c2f17[2];
  ::S1378C14_nt s1474c2f18;
  int s1474c2f19[2];
  void *s1474c2f20;
  ::S1474C10_nt s1474c2f21;
  void *s1474c2f22[2];
  ::S1378C22 s1474c2f23;
  virtual  ~S1474C2(); // _ZN7S1474C2D1Ev
  virtual void  v72(); // _ZN7S1474C23v72Ev
  virtual void  v73(); // _ZN7S1474C23v73Ev
  virtual void  v74(); // _ZN7S1474C23v74Ev
  virtual void  v75(); // _ZN7S1474C23v75Ev
  virtual void  v76(); // _ZN7S1474C23v76Ev
  virtual void  v77(); // _ZN7S1474C23v77Ev
  virtual void  v78(); // _ZN7S1474C23v78Ev
  S1474C2(); // tgen
};
//SIG(-1 S1474C2) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74} vd v1 v2 v3 v4 v5 v6 v7 Fi[2] Fp Fi:1 Fi Fp Fi FC5{ m Fi[3]} Fi[4] FC6{ BC7{ BC8{ m Fp Fi[2]}}} Fi:1 Fp[4] FC5 FC5 Fi Fp[2] Fi FC5 Fi[2] FC5 Fi[2] Fp FC9{ m Fi[4]} Fp[2] FC6}


 S1474C2 ::~S1474C2(){ note_dtor("S1474C2", this);}
void  S1474C2 ::v72(){vfunc_called(this, "_ZN7S1474C23v72Ev");}
void  S1474C2 ::v73(){vfunc_called(this, "_ZN7S1474C23v73Ev");}
void  S1474C2 ::v74(){vfunc_called(this, "_ZN7S1474C23v74Ev");}
void  S1474C2 ::v75(){vfunc_called(this, "_ZN7S1474C23v75Ev");}
void  S1474C2 ::v76(){vfunc_called(this, "_ZN7S1474C23v76Ev");}
void  S1474C2 ::v77(){vfunc_called(this, "_ZN7S1474C23v77Ev");}
void  S1474C2 ::v78(){vfunc_called(this, "_ZN7S1474C23v78Ev");}
S1474C2 ::S1474C2(){ note_ctor("S1474C2", this);} // tgen

static void Test_S1474C2()
{
  extern Class_Descriptor cd_S1474C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,68)];
    init_test(&cd_S1474C2, buf);
    S1474C2 *dp, &lv = *(dp=new (buf) S1474C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,268), "sizeof(S1474C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1474C2)");
    check_base_class_offset(lv, (S1474C4*)(S1474C3*), 0, "S1474C2");
    check_base_class_offset(lv, (S1474C3*), 0, "S1474C2");
    check_field_offset(lv, s1474c2f0, ABISELECT(96,60), "S1474C2.s1474c2f0");
    check_field_offset(lv, s1474c2f1, ABISELECT(104,68), "S1474C2.s1474c2f1");
    set_bf_and_test(lv, s1474c2f2, ABISELECT(112,72), 0, 1, 1, "S1474C2");
    check_field_offset(lv, s1474c2f3, ABISELECT(116,76), "S1474C2.s1474c2f3");
    check_field_offset(lv, s1474c2f4, ABISELECT(120,80), "S1474C2.s1474c2f4");
    check_field_offset(lv, s1474c2f5, ABISELECT(128,84), "S1474C2.s1474c2f5");
    check_field_offset(lv, s1474c2f6, ABISELECT(132,88), "S1474C2.s1474c2f6");
    check_field_offset(lv, s1474c2f7, ABISELECT(144,100), "S1474C2.s1474c2f7");
    check_field_offset(lv, s1474c2f8, ABISELECT(160,116), "S1474C2.s1474c2f8");
    set_bf_and_test(lv, s1474c2f9, ABISELECT(176,128), 0, 1, 1, "S1474C2");
    check_field_offset(lv, s1474c2f10, ABISELECT(184,132), "S1474C2.s1474c2f10");
    check_field_offset(lv, s1474c2f11, ABISELECT(216,148), "S1474C2.s1474c2f11");
    check_field_offset(lv, s1474c2f12, ABISELECT(228,160), "S1474C2.s1474c2f12");
    check_field_offset(lv, s1474c2f13, ABISELECT(240,172), "S1474C2.s1474c2f13");
    check_field_offset(lv, s1474c2f14, ABISELECT(248,176), "S1474C2.s1474c2f14");
    check_field_offset(lv, s1474c2f15, ABISELECT(264,184), "S1474C2.s1474c2f15");
    check_field_offset(lv, s1474c2f16, ABISELECT(268,188), "S1474C2.s1474c2f16");
    check_field_offset(lv, s1474c2f17, ABISELECT(280,200), "S1474C2.s1474c2f17");
    check_field_offset(lv, s1474c2f18, ABISELECT(288,208), "S1474C2.s1474c2f18");
    check_field_offset(lv, s1474c2f19, ABISELECT(300,220), "S1474C2.s1474c2f19");
    check_field_offset(lv, s1474c2f20, ABISELECT(312,228), "S1474C2.s1474c2f20");
    check_field_offset(lv, s1474c2f21, ABISELECT(320,232), "S1474C2.s1474c2f21");
    check_field_offset(lv, s1474c2f22, ABISELECT(336,248), "S1474C2.s1474c2f22");
    check_field_offset(lv, s1474c2f23, ABISELECT(352,256), "S1474C2.s1474c2f23");
    test_class_info(&lv, &cd_S1474C2);
    dp->~S1474C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1474C2(Test_S1474C2, "S1474C2", ABISELECT(368,268));

#else // __cplusplus

extern void _ZN7S1474C2C1Ev();
extern void _ZN7S1474C2D1Ev();
Name_Map name_map_S1474C2[] = {
  NSPAIR(_ZN7S1474C2C1Ev),
  NSPAIR(_ZN7S1474C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1474C4;
extern VTBL_ENTRY _ZTI7S1474C4[];
extern  VTBL_ENTRY _ZTV7S1474C4[];
extern Class_Descriptor cd_S1474C3;
extern VTBL_ENTRY _ZTI7S1474C3[];
extern  VTBL_ENTRY _ZTV7S1474C3[];
static Base_Class bases_S1474C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1474C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1474C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1474C2[];
extern void _ZN7S1474C2D1Ev();
extern void _ZN7S1474C2D0Ev();
extern void _ZN7S1474C42v5Ev();
extern void _ZN7S1474C42v6Ev();
extern void _ZN7S1474C42v7Ev();
extern void _ZN7S1474C42v8Ev();
extern void _ZN7S1474C42v9Ev();
extern void _ZN7S1474C43v10Ev();
extern void _ZN7S1474C43v11Ev();
extern void _ZN7S1474C43v12Ev();
extern void _ZN7S1474C43v13Ev();
extern void _ZN7S1474C43v14Ev();
extern void _ZN7S1474C43v15Ev();
extern void _ZN7S1474C43v16Ev();
extern void _ZN7S1474C43v17Ev();
extern void _ZN7S1474C43v18Ev();
extern void _ZN7S1474C43v19Ev();
extern void _ZN7S1474C43v20Ev();
extern void _ZN7S1474C43v21Ev();
extern void _ZN7S1474C43v22Ev();
extern void _ZN7S1474C43v23Ev();
extern void _ZN7S1474C43v24Ev();
extern void _ZN7S1474C43v25Ev();
extern void _ZN7S1474C43v26Ev();
extern void _ZN7S1474C43v27Ev();
extern void _ZN7S1474C43v28Ev();
extern void _ZN7S1474C43v29Ev();
extern void _ZN7S1474C43v30Ev();
extern void _ZN7S1474C43v31Ev();
extern void _ZN7S1474C43v32Ev();
extern void _ZN7S1474C43v33Ev();
extern void _ZN7S1474C43v34Ev();
extern void _ZN7S1474C43v35Ev();
extern void _ZN7S1474C43v36Ev();
extern void _ZN7S1474C43v37Ev();
extern void _ZN7S1474C43v38Ev();
extern void _ZN7S1474C43v39Ev();
extern void _ZN7S1474C43v40Ev();
extern void _ZN7S1474C43v41Ev();
extern void _ZN7S1474C43v42Ev();
extern void _ZN7S1474C43v43Ev();
extern void _ZN7S1474C43v44Ev();
extern void _ZN7S1474C43v45Ev();
extern void _ZN7S1474C43v46Ev();
extern void _ZN7S1474C43v47Ev();
extern void _ZN7S1474C43v48Ev();
extern void _ZN7S1474C43v49Ev();
extern void _ZN7S1474C43v50Ev();
extern void _ZN7S1474C43v51Ev();
extern void _ZN7S1474C43v52Ev();
extern void _ZN7S1474C43v53Ev();
extern void _ZN7S1474C43v54Ev();
extern void _ZN7S1474C43v55Ev();
extern void _ZN7S1474C43v56Ev();
extern void _ZN7S1474C43v57Ev();
extern void _ZN7S1474C43v58Ev();
extern void _ZN7S1474C43v59Ev();
extern void _ZN7S1474C43v60Ev();
extern void _ZN7S1474C43v61Ev();
extern void _ZN7S1474C43v62Ev();
extern void _ZN7S1474C43v63Ev();
extern void _ZN7S1474C43v64Ev();
extern void _ZN7S1474C43v65Ev();
extern void _ZN7S1474C43v66Ev();
extern void _ZN7S1474C43v67Ev();
extern void _ZN7S1474C43v68Ev();
extern void _ZN7S1474C33v69Ev();
extern void _ZN7S1474C33v70Ev();
extern void _ZN7S1474C33v71Ev();
extern void _ZN7S1474C23v72Ev();
extern void _ZN7S1474C23v73Ev();
extern void _ZN7S1474C23v74Ev();
extern void _ZN7S1474C23v75Ev();
extern void _ZN7S1474C23v76Ev();
extern void _ZN7S1474C23v77Ev();
extern void _ZN7S1474C23v78Ev();
static  VTBL_ENTRY vtc_S1474C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1474C2[0]),
  (VTBL_ENTRY)&_ZN7S1474C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1474C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1474C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1474C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1474C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1474C23v72Ev,
  (VTBL_ENTRY)&_ZN7S1474C23v73Ev,
  (VTBL_ENTRY)&_ZN7S1474C23v74Ev,
  (VTBL_ENTRY)&_ZN7S1474C23v75Ev,
  (VTBL_ENTRY)&_ZN7S1474C23v76Ev,
  (VTBL_ENTRY)&_ZN7S1474C23v77Ev,
  (VTBL_ENTRY)&_ZN7S1474C23v78Ev,
};
extern VTBL_ENTRY _ZTI7S1474C2[];
extern  VTBL_ENTRY _ZTV7S1474C2[];
Class_Descriptor cd_S1474C2 = {  "S1474C2", // class name
  bases_S1474C2, 2,
  &(vtc_S1474C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,268), // object size
  NSPAIRA(_ZTI7S1474C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1474C2),78, //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  S1474C1  : S1474C2 {
  ::S1378C18 s1474c1f0;
  ::S1378C5_nt s1474c1f1;
  unsigned int s1474c1f2:1;
  ::S1378C5_nt s1474c1f3;
  unsigned int s1474c1f4:1;
  virtual  ~S1474C1(); // _ZN7S1474C1D1Ev
  virtual void  v1(); // _ZN7S1474C12v1Ev
  virtual void  v2(); // _ZN7S1474C12v2Ev
  virtual void  v3(); // _ZN7S1474C12v3Ev
  virtual void  v4(); // _ZN7S1474C12v4Ev
  S1474C1(); // tgen
};
//SIG(1 S1474C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71} vd v72 v73 v74 v75 v76 v77 v78 Fi[2] Fp Fi:1 Fi Fp Fi FC6{ m Fi[3]} Fi[4] FC7{ BC8{ BC9{ m Fp Fi[2]}}} Fi:1 Fp[4] FC6 FC6 Fi Fp[2] Fi FC6 Fi[2] FC6 Fi[2] Fp FC10{ m Fi[4]} Fp[2] FC7} vd v1 v2 v3 v4 FC11{ BC12{ BC9}} FC5 Fi:1 FC5 Fi:1}


 S1474C1 ::~S1474C1(){ note_dtor("S1474C1", this);}
void  S1474C1 ::v1(){vfunc_called(this, "_ZN7S1474C12v1Ev");}
void  S1474C1 ::v2(){vfunc_called(this, "_ZN7S1474C12v2Ev");}
void  S1474C1 ::v3(){vfunc_called(this, "_ZN7S1474C12v3Ev");}
void  S1474C1 ::v4(){vfunc_called(this, "_ZN7S1474C12v4Ev");}
S1474C1 ::S1474C1(){ note_ctor("S1474C1", this);} // tgen

static void Test_S1474C1()
{
  extern Class_Descriptor cd_S1474C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,77)];
    init_test(&cd_S1474C1, buf);
    S1474C1 *dp, &lv = *(dp=new (buf) S1474C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,304), "sizeof(S1474C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1474C1)");
    check_base_class_offset(lv, (S1474C4*)(S1474C3*)(S1474C2*), 0, "S1474C1");
    check_base_class_offset(lv, (S1474C3*)(S1474C2*), 0, "S1474C1");
    check_base_class_offset(lv, (S1474C2*), 0, "S1474C1");
    check_field_offset(lv, s1474c1f0, ABISELECT(368,268), "S1474C1.s1474c1f0");
    check_field_offset(lv, s1474c1f1, ABISELECT(384,280), "S1474C1.s1474c1f1");
    set_bf_and_test(lv, s1474c1f2, ABISELECT(392,288), 0, 1, 1, "S1474C1");
    check_field_offset(lv, s1474c1f3, ABISELECT(396,292), "S1474C1.s1474c1f3");
    set_bf_and_test(lv, s1474c1f4, ABISELECT(404,300), 0, 1, 1, "S1474C1");
    test_class_info(&lv, &cd_S1474C1);
    dp->~S1474C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1474C1(Test_S1474C1, "S1474C1", ABISELECT(408,304));

#else // __cplusplus

extern void _ZN7S1474C1C1Ev();
extern void _ZN7S1474C1D1Ev();
Name_Map name_map_S1474C1[] = {
  NSPAIR(_ZN7S1474C1C1Ev),
  NSPAIR(_ZN7S1474C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1474C4;
extern VTBL_ENTRY _ZTI7S1474C4[];
extern  VTBL_ENTRY _ZTV7S1474C4[];
extern Class_Descriptor cd_S1474C3;
extern VTBL_ENTRY _ZTI7S1474C3[];
extern  VTBL_ENTRY _ZTV7S1474C3[];
extern Class_Descriptor cd_S1474C2;
extern VTBL_ENTRY _ZTI7S1474C2[];
extern  VTBL_ENTRY _ZTV7S1474C2[];
static Base_Class bases_S1474C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1474C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1474C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1474C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1474C1[];
extern void _ZN7S1474C1D1Ev();
extern void _ZN7S1474C1D0Ev();
extern void _ZN7S1474C42v5Ev();
extern void _ZN7S1474C42v6Ev();
extern void _ZN7S1474C42v7Ev();
extern void _ZN7S1474C42v8Ev();
extern void _ZN7S1474C42v9Ev();
extern void _ZN7S1474C43v10Ev();
extern void _ZN7S1474C43v11Ev();
extern void _ZN7S1474C43v12Ev();
extern void _ZN7S1474C43v13Ev();
extern void _ZN7S1474C43v14Ev();
extern void _ZN7S1474C43v15Ev();
extern void _ZN7S1474C43v16Ev();
extern void _ZN7S1474C43v17Ev();
extern void _ZN7S1474C43v18Ev();
extern void _ZN7S1474C43v19Ev();
extern void _ZN7S1474C43v20Ev();
extern void _ZN7S1474C43v21Ev();
extern void _ZN7S1474C43v22Ev();
extern void _ZN7S1474C43v23Ev();
extern void _ZN7S1474C43v24Ev();
extern void _ZN7S1474C43v25Ev();
extern void _ZN7S1474C43v26Ev();
extern void _ZN7S1474C43v27Ev();
extern void _ZN7S1474C43v28Ev();
extern void _ZN7S1474C43v29Ev();
extern void _ZN7S1474C43v30Ev();
extern void _ZN7S1474C43v31Ev();
extern void _ZN7S1474C43v32Ev();
extern void _ZN7S1474C43v33Ev();
extern void _ZN7S1474C43v34Ev();
extern void _ZN7S1474C43v35Ev();
extern void _ZN7S1474C43v36Ev();
extern void _ZN7S1474C43v37Ev();
extern void _ZN7S1474C43v38Ev();
extern void _ZN7S1474C43v39Ev();
extern void _ZN7S1474C43v40Ev();
extern void _ZN7S1474C43v41Ev();
extern void _ZN7S1474C43v42Ev();
extern void _ZN7S1474C43v43Ev();
extern void _ZN7S1474C43v44Ev();
extern void _ZN7S1474C43v45Ev();
extern void _ZN7S1474C43v46Ev();
extern void _ZN7S1474C43v47Ev();
extern void _ZN7S1474C43v48Ev();
extern void _ZN7S1474C43v49Ev();
extern void _ZN7S1474C43v50Ev();
extern void _ZN7S1474C43v51Ev();
extern void _ZN7S1474C43v52Ev();
extern void _ZN7S1474C43v53Ev();
extern void _ZN7S1474C43v54Ev();
extern void _ZN7S1474C43v55Ev();
extern void _ZN7S1474C43v56Ev();
extern void _ZN7S1474C43v57Ev();
extern void _ZN7S1474C43v58Ev();
extern void _ZN7S1474C43v59Ev();
extern void _ZN7S1474C43v60Ev();
extern void _ZN7S1474C43v61Ev();
extern void _ZN7S1474C43v62Ev();
extern void _ZN7S1474C43v63Ev();
extern void _ZN7S1474C43v64Ev();
extern void _ZN7S1474C43v65Ev();
extern void _ZN7S1474C43v66Ev();
extern void _ZN7S1474C43v67Ev();
extern void _ZN7S1474C43v68Ev();
extern void _ZN7S1474C33v69Ev();
extern void _ZN7S1474C33v70Ev();
extern void _ZN7S1474C33v71Ev();
extern void _ZN7S1474C23v72Ev();
extern void _ZN7S1474C23v73Ev();
extern void _ZN7S1474C23v74Ev();
extern void _ZN7S1474C23v75Ev();
extern void _ZN7S1474C23v76Ev();
extern void _ZN7S1474C23v77Ev();
extern void _ZN7S1474C23v78Ev();
extern void _ZN7S1474C12v1Ev();
extern void _ZN7S1474C12v2Ev();
extern void _ZN7S1474C12v3Ev();
extern void _ZN7S1474C12v4Ev();
static  VTBL_ENTRY vtc_S1474C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1474C1[0]),
  (VTBL_ENTRY)&_ZN7S1474C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1474C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1474C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1474C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1474C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1474C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1474C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1474C23v72Ev,
  (VTBL_ENTRY)&_ZN7S1474C23v73Ev,
  (VTBL_ENTRY)&_ZN7S1474C23v74Ev,
  (VTBL_ENTRY)&_ZN7S1474C23v75Ev,
  (VTBL_ENTRY)&_ZN7S1474C23v76Ev,
  (VTBL_ENTRY)&_ZN7S1474C23v77Ev,
  (VTBL_ENTRY)&_ZN7S1474C23v78Ev,
  (VTBL_ENTRY)&_ZN7S1474C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1474C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1474C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1474C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1474C1[];
extern  VTBL_ENTRY _ZTV7S1474C1[];
Class_Descriptor cd_S1474C1 = {  "S1474C1", // class name
  bases_S1474C1, 3,
  &(vtc_S1474C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(408,304), // object size
  NSPAIRA(_ZTI7S1474C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1474C1),82, //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  S2355C4_nt  {
  ::S5166C19_nt s2355c4f0;
  int s2355c4f1[2];
  char s2355c4f2;
  virtual  ~S2355C4_nt(); // _ZN10S2355C4_ntD1Ev
  virtual void  v5(); // _ZN10S2355C4_nt2v5Ev
  virtual void  v6(); // _ZN10S2355C4_nt2v6Ev
  virtual void  v7(); // _ZN10S2355C4_nt2v7Ev
  S2355C4_nt(); // tgen
};
//SIG(-1 S2355C4_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2355C4_nt ::~S2355C4_nt(){ note_dtor("S2355C4_nt", this);}
void  S2355C4_nt ::v5(){vfunc_called(this, "_ZN10S2355C4_nt2v5Ev");}
void  S2355C4_nt ::v6(){vfunc_called(this, "_ZN10S2355C4_nt2v6Ev");}
void  S2355C4_nt ::v7(){vfunc_called(this, "_ZN10S2355C4_nt2v7Ev");}
S2355C4_nt ::S2355C4_nt(){ note_ctor("S2355C4_nt", this);} // tgen

//skip512 S2355C4_nt

#else // __cplusplus

extern void _ZN10S2355C4_ntC1Ev();
extern void _ZN10S2355C4_ntD1Ev();
Name_Map name_map_S2355C4_nt[] = {
  NSPAIR(_ZN10S2355C4_ntC1Ev),
  NSPAIR(_ZN10S2355C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2355C4_nt[];
extern void _ZN10S2355C4_ntD1Ev();
extern void _ZN10S2355C4_ntD0Ev();
extern void _ZN10S2355C4_nt2v5Ev();
extern void _ZN10S2355C4_nt2v6Ev();
extern void _ZN10S2355C4_nt2v7Ev();
static  VTBL_ENTRY vtc_S2355C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2355C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2355C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2355C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2355C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2355C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2355C4_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S2355C4_nt[];
VTBL_ENTRY *P__ZTI10S2355C4_nt = _ZTI10S2355C4_nt; 
extern  VTBL_ENTRY _ZTV10S2355C4_nt[];
Class_Descriptor cd_S2355C4_nt = {  "S2355C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2355C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S2355C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2355C4_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  S2355C7_nt  {
  virtual  ~S2355C7_nt(); // _ZN10S2355C7_ntD1Ev
  virtual void  v8(); // _ZN10S2355C7_nt2v8Ev
  virtual void  v9(); // _ZN10S2355C7_nt2v9Ev
  virtual void  v10(); // _ZN10S2355C7_nt3v10Ev
  S2355C7_nt(); // tgen
};
//SIG(-1 S2355C7_nt) C1{ vd v1 v2 v3}


 S2355C7_nt ::~S2355C7_nt(){ note_dtor("S2355C7_nt", this);}
void  S2355C7_nt ::v8(){vfunc_called(this, "_ZN10S2355C7_nt2v8Ev");}
void  S2355C7_nt ::v9(){vfunc_called(this, "_ZN10S2355C7_nt2v9Ev");}
void  S2355C7_nt ::v10(){vfunc_called(this, "_ZN10S2355C7_nt3v10Ev");}
S2355C7_nt ::S2355C7_nt(){ note_ctor("S2355C7_nt", this);} // tgen

//skip512 S2355C7_nt

#else // __cplusplus

extern void _ZN10S2355C7_ntC1Ev();
extern void _ZN10S2355C7_ntD1Ev();
Name_Map name_map_S2355C7_nt[] = {
  NSPAIR(_ZN10S2355C7_ntC1Ev),
  NSPAIR(_ZN10S2355C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2355C7_nt[];
extern void _ZN10S2355C7_ntD1Ev();
extern void _ZN10S2355C7_ntD0Ev();
extern void _ZN10S2355C7_nt2v8Ev();
extern void _ZN10S2355C7_nt2v9Ev();
extern void _ZN10S2355C7_nt3v10Ev();
static  VTBL_ENTRY vtc_S2355C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2355C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S2355C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2355C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2355C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2355C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2355C7_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI10S2355C7_nt[];
VTBL_ENTRY *P__ZTI10S2355C7_nt = _ZTI10S2355C7_nt; 
extern  VTBL_ENTRY _ZTV10S2355C7_nt[];
Class_Descriptor cd_S2355C7_nt = {  "S2355C7_nt", // class name
  0,0,//no base classes
  &(vtc_S2355C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S2355C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2355C7_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  S2355C3_nt  : S2355C4_nt , S2355C7_nt {
  void *s2355c3f0;
  char s2355c3f1;
  int s2355c3f2;
  virtual  ~S2355C3_nt(); // _ZN10S2355C3_ntD1Ev
  virtual void  v11(); // _ZN10S2355C3_nt3v11Ev
  virtual void  v12(); // _ZN10S2355C3_nt3v12Ev
  virtual void  v13(); // _ZN10S2355C3_nt3v13Ev
  virtual void  v14(); // _ZN10S2355C3_nt3v14Ev
  virtual void  v15(); // _ZN10S2355C3_nt3v15Ev
  virtual void  v16(); // _ZN10S2355C3_nt3v16Ev
  virtual void  v17(); // _ZN10S2355C3_nt3v17Ev
  virtual void  v18(); // _ZN10S2355C3_nt3v18Ev
  virtual void  v19(); // _ZN10S2355C3_nt3v19Ev
  virtual void  v20(); // _ZN10S2355C3_nt3v20Ev
  S2355C3_nt(); // tgen
};
//SIG(-1 S2355C3_nt) C1{ BC2{ vd v11 v12 v13 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fc Fi}


 S2355C3_nt ::~S2355C3_nt(){ note_dtor("S2355C3_nt", this);}
void  S2355C3_nt ::v11(){vfunc_called(this, "_ZN10S2355C3_nt3v11Ev");}
void  S2355C3_nt ::v12(){vfunc_called(this, "_ZN10S2355C3_nt3v12Ev");}
void  S2355C3_nt ::v13(){vfunc_called(this, "_ZN10S2355C3_nt3v13Ev");}
void  S2355C3_nt ::v14(){vfunc_called(this, "_ZN10S2355C3_nt3v14Ev");}
void  S2355C3_nt ::v15(){vfunc_called(this, "_ZN10S2355C3_nt3v15Ev");}
void  S2355C3_nt ::v16(){vfunc_called(this, "_ZN10S2355C3_nt3v16Ev");}
void  S2355C3_nt ::v17(){vfunc_called(this, "_ZN10S2355C3_nt3v17Ev");}
void  S2355C3_nt ::v18(){vfunc_called(this, "_ZN10S2355C3_nt3v18Ev");}
void  S2355C3_nt ::v19(){vfunc_called(this, "_ZN10S2355C3_nt3v19Ev");}
void  S2355C3_nt ::v20(){vfunc_called(this, "_ZN10S2355C3_nt3v20Ev");}
S2355C3_nt ::S2355C3_nt(){ note_ctor("S2355C3_nt", this);} // tgen

//skip512 S2355C3_nt

#else // __cplusplus

extern void _ZN10S2355C3_ntC1Ev();
extern void _ZN10S2355C3_ntD1Ev();
Name_Map name_map_S2355C3_nt[] = {
  NSPAIR(_ZN10S2355C3_ntC1Ev),
  NSPAIR(_ZN10S2355C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2355C4_nt;
extern VTBL_ENTRY _ZTI10S2355C4_nt[];
extern  VTBL_ENTRY _ZTV10S2355C4_nt[];
extern Class_Descriptor cd_S2355C7_nt;
extern VTBL_ENTRY _ZTI10S2355C7_nt[];
extern  VTBL_ENTRY _ZTV10S2355C7_nt[];
static Base_Class bases_S2355C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2355C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2355C7_nt,    ABISELECT(40,28), //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2355C3_nt[];
extern void _ZN10S2355C3_ntD1Ev();
extern void _ZN10S2355C3_ntD0Ev();
extern void _ZN10S2355C4_nt2v5Ev();
extern void _ZN10S2355C4_nt2v6Ev();
extern void _ZN10S2355C4_nt2v7Ev();
extern void _ZN10S2355C3_nt3v11Ev();
extern void _ZN10S2355C3_nt3v12Ev();
extern void _ZN10S2355C3_nt3v13Ev();
extern void _ZN10S2355C3_nt3v14Ev();
extern void _ZN10S2355C3_nt3v15Ev();
extern void _ZN10S2355C3_nt3v16Ev();
extern void _ZN10S2355C3_nt3v17Ev();
extern void _ZN10S2355C3_nt3v18Ev();
extern void _ZN10S2355C3_nt3v19Ev();
extern void _ZN10S2355C3_nt3v20Ev();
extern void ABISELECT(_ZThn40_N10S2355C3_ntD1Ev,_ZThn28_N10S2355C3_ntD1Ev)();
extern void ABISELECT(_ZThn40_N10S2355C3_ntD0Ev,_ZThn28_N10S2355C3_ntD0Ev)();
extern void _ZN10S2355C7_nt2v8Ev();
extern void _ZN10S2355C7_nt2v9Ev();
extern void _ZN10S2355C7_nt3v10Ev();
static  VTBL_ENTRY vtc_S2355C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2355C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2355C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2355C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2355C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2355C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v20Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI10S2355C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N10S2355C3_ntD1Ev,_ZThn28_N10S2355C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N10S2355C3_ntD0Ev,_ZThn28_N10S2355C3_ntD0Ev),
  (VTBL_ENTRY)&_ZN10S2355C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2355C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2355C7_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI10S2355C3_nt[];
VTBL_ENTRY *P__ZTI10S2355C3_nt = _ZTI10S2355C3_nt; 
extern  VTBL_ENTRY _ZTV10S2355C3_nt[];
Class_Descriptor cd_S2355C3_nt = {  "S2355C3_nt", // class name
  bases_S2355C3_nt, 2,
  &(vtc_S2355C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI10S2355C3_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S2355C3_nt),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  S2355C10  {
  virtual  ~S2355C10(); // _ZN8S2355C10D1Ev
  virtual void  v21(); // _ZN8S2355C103v21Ev
  virtual void  v22(); // _ZN8S2355C103v22Ev
  virtual void  v23(); // _ZN8S2355C103v23Ev
  S2355C10(); // tgen
};
//SIG(-1 S2355C10) C1{ vd v1 v2 v3}


 S2355C10 ::~S2355C10(){ note_dtor("S2355C10", this);}
void  S2355C10 ::v21(){vfunc_called(this, "_ZN8S2355C103v21Ev");}
void  S2355C10 ::v22(){vfunc_called(this, "_ZN8S2355C103v22Ev");}
void  S2355C10 ::v23(){vfunc_called(this, "_ZN8S2355C103v23Ev");}
S2355C10 ::S2355C10(){ note_ctor("S2355C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2355C10C1Ev();
extern void _ZN8S2355C10D1Ev();
Name_Map name_map_S2355C10[] = {
  NSPAIR(_ZN8S2355C10C1Ev),
  NSPAIR(_ZN8S2355C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2355C10[];
extern void _ZN8S2355C10D1Ev();
extern void _ZN8S2355C10D0Ev();
extern void _ZN8S2355C103v21Ev();
extern void _ZN8S2355C103v22Ev();
extern void _ZN8S2355C103v23Ev();
static  VTBL_ENTRY vtc_S2355C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2355C10[0]),
  (VTBL_ENTRY)&_ZN8S2355C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2355C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2355C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2355C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2355C103v23Ev,
};
extern VTBL_ENTRY _ZTI8S2355C10[];
extern  VTBL_ENTRY _ZTV8S2355C10[];
Class_Descriptor cd_S2355C10 = {  "S2355C10", // class name
  0,0,//no base classes
  &(vtc_S2355C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2355C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2355C10),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  S2355C13_nt  {
  __tsi64 s2355c13f0[4];
  void  mf2355c13(); // _ZN11S2355C13_nt9mf2355c13Ev
};
//SIG(-1 S2355C13_nt) C1{ m FL[4]}


void  S2355C13_nt ::mf2355c13(){}

//skip512 S2355C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2355C9_nt  : S2355C10 {
  ::S5166C36 s2355c9f0;
  ::S2355C13_nt s2355c9f1;
  char s2355c9f2;
  virtual  ~S2355C9_nt(); // _ZN10S2355C9_ntD1Ev
  virtual void  v24(); // _ZN10S2355C9_nt3v24Ev
  virtual void  v25(); // _ZN10S2355C9_nt3v25Ev
  virtual void  v26(); // _ZN10S2355C9_nt3v26Ev
  S2355C9_nt(); // tgen
};
//SIG(-1 S2355C9_nt) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2355C9_nt ::~S2355C9_nt(){ note_dtor("S2355C9_nt", this);}
void  S2355C9_nt ::v24(){vfunc_called(this, "_ZN10S2355C9_nt3v24Ev");}
void  S2355C9_nt ::v25(){vfunc_called(this, "_ZN10S2355C9_nt3v25Ev");}
void  S2355C9_nt ::v26(){vfunc_called(this, "_ZN10S2355C9_nt3v26Ev");}
S2355C9_nt ::S2355C9_nt(){ note_ctor("S2355C9_nt", this);} // tgen

//skip512 S2355C9_nt

#else // __cplusplus

extern void _ZN10S2355C9_ntC1Ev();
extern void _ZN10S2355C9_ntD1Ev();
Name_Map name_map_S2355C9_nt[] = {
  NSPAIR(_ZN10S2355C9_ntC1Ev),
  NSPAIR(_ZN10S2355C9_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2355C10;
extern VTBL_ENTRY _ZTI8S2355C10[];
extern  VTBL_ENTRY _ZTV8S2355C10[];
static Base_Class bases_S2355C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2355C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI10S2355C9_nt[];
extern void _ZN10S2355C9_ntD1Ev();
extern void _ZN10S2355C9_ntD0Ev();
extern void _ZN8S2355C103v21Ev();
extern void _ZN8S2355C103v22Ev();
extern void _ZN8S2355C103v23Ev();
extern void _ZN10S2355C9_nt3v24Ev();
extern void _ZN10S2355C9_nt3v25Ev();
extern void _ZN10S2355C9_nt3v26Ev();
static  VTBL_ENTRY vtc_S2355C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2355C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S2355C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2355C9_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S2355C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2355C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2355C103v23Ev,
  (VTBL_ENTRY)&_ZN10S2355C9_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2355C9_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2355C9_nt3v26Ev,
};
extern VTBL_ENTRY _ZTI10S2355C9_nt[];
VTBL_ENTRY *P__ZTI10S2355C9_nt = _ZTI10S2355C9_nt; 
extern  VTBL_ENTRY _ZTV10S2355C9_nt[];
Class_Descriptor cd_S2355C9_nt = {  "S2355C9_nt", // class name
  bases_S2355C9_nt, 1,
  &(vtc_S2355C9_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI10S2355C9_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2355C9_nt),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  S2355C8_nt  : S2355C9_nt {
  virtual  ~S2355C8_nt(); // _ZN10S2355C8_ntD1Ev
  virtual void  v27(); // _ZN10S2355C8_nt3v27Ev
  virtual void  v28(); // _ZN10S2355C8_nt3v28Ev
  virtual void  v29(); // _ZN10S2355C8_nt3v29Ev
  virtual void  v30(); // _ZN10S2355C8_nt3v30Ev
  S2355C8_nt(); // tgen
};
//SIG(-1 S2355C8_nt) C1{ BC2{ BC3{ vd v5 v6 v7} vd v8 v9 v10 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4}


 S2355C8_nt ::~S2355C8_nt(){ note_dtor("S2355C8_nt", this);}
void  S2355C8_nt ::v27(){vfunc_called(this, "_ZN10S2355C8_nt3v27Ev");}
void  S2355C8_nt ::v28(){vfunc_called(this, "_ZN10S2355C8_nt3v28Ev");}
void  S2355C8_nt ::v29(){vfunc_called(this, "_ZN10S2355C8_nt3v29Ev");}
void  S2355C8_nt ::v30(){vfunc_called(this, "_ZN10S2355C8_nt3v30Ev");}
S2355C8_nt ::S2355C8_nt(){ note_ctor("S2355C8_nt", this);} // tgen

//skip512 S2355C8_nt

#else // __cplusplus

extern void _ZN10S2355C8_ntC1Ev();
extern void _ZN10S2355C8_ntD1Ev();
Name_Map name_map_S2355C8_nt[] = {
  NSPAIR(_ZN10S2355C8_ntC1Ev),
  NSPAIR(_ZN10S2355C8_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2355C10;
extern VTBL_ENTRY _ZTI8S2355C10[];
extern  VTBL_ENTRY _ZTV8S2355C10[];
extern Class_Descriptor cd_S2355C9_nt;
extern VTBL_ENTRY _ZTI10S2355C9_nt[];
extern  VTBL_ENTRY _ZTV10S2355C9_nt[];
static Base_Class bases_S2355C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2355C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2355C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S2355C8_nt[];
extern void _ZN10S2355C8_ntD1Ev();
extern void _ZN10S2355C8_ntD0Ev();
extern void _ZN8S2355C103v21Ev();
extern void _ZN8S2355C103v22Ev();
extern void _ZN8S2355C103v23Ev();
extern void _ZN10S2355C9_nt3v24Ev();
extern void _ZN10S2355C9_nt3v25Ev();
extern void _ZN10S2355C9_nt3v26Ev();
extern void _ZN10S2355C8_nt3v27Ev();
extern void _ZN10S2355C8_nt3v28Ev();
extern void _ZN10S2355C8_nt3v29Ev();
extern void _ZN10S2355C8_nt3v30Ev();
static  VTBL_ENTRY vtc_S2355C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2355C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S2355C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2355C8_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S2355C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2355C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2355C103v23Ev,
  (VTBL_ENTRY)&_ZN10S2355C9_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2355C9_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2355C9_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2355C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2355C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2355C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2355C8_nt3v30Ev,
};
extern VTBL_ENTRY _ZTI10S2355C8_nt[];
VTBL_ENTRY *P__ZTI10S2355C8_nt = _ZTI10S2355C8_nt; 
extern  VTBL_ENTRY _ZTV10S2355C8_nt[];
Class_Descriptor cd_S2355C8_nt = {  "S2355C8_nt", // class name
  bases_S2355C8_nt, 2,
  &(vtc_S2355C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI10S2355C8_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2355C8_nt),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2355C2_nt  : S2355C3_nt , S2355C8_nt {
  int s2355c2f0[3];
  char s2355c2f1;
  ::S5166C24 s2355c2f2;
  virtual  ~S2355C2_nt(); // _ZN10S2355C2_ntD1Ev
  virtual void  v31(); // _ZN10S2355C2_nt3v31Ev
  virtual void  v32(); // _ZN10S2355C2_nt3v32Ev
  virtual void  v33(); // _ZN10S2355C2_nt3v33Ev
  virtual void  v34(); // _ZN10S2355C2_nt3v34Ev
  virtual void  v35(); // _ZN10S2355C2_nt3v35Ev
  virtual void  v36(); // _ZN10S2355C2_nt3v36Ev
  S2355C2_nt(); // tgen
};
//SIG(-1 S2355C2_nt) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd v10 v11 v12} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp Fc Fi} BC7{ BC8{ BC9{ vd v23 v24 v25} vd v26 v27 v28 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m FL[4]} Fc} vd v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 Fi[3] Fc FC13{ BC14{ m Fp Fi FC15{ m} FC16{ m}}}}


 S2355C2_nt ::~S2355C2_nt(){ note_dtor("S2355C2_nt", this);}
void  S2355C2_nt ::v31(){vfunc_called(this, "_ZN10S2355C2_nt3v31Ev");}
void  S2355C2_nt ::v32(){vfunc_called(this, "_ZN10S2355C2_nt3v32Ev");}
void  S2355C2_nt ::v33(){vfunc_called(this, "_ZN10S2355C2_nt3v33Ev");}
void  S2355C2_nt ::v34(){vfunc_called(this, "_ZN10S2355C2_nt3v34Ev");}
void  S2355C2_nt ::v35(){vfunc_called(this, "_ZN10S2355C2_nt3v35Ev");}
void  S2355C2_nt ::v36(){vfunc_called(this, "_ZN10S2355C2_nt3v36Ev");}
S2355C2_nt ::S2355C2_nt(){ note_ctor("S2355C2_nt", this);} // tgen

//skip512 S2355C2_nt

#else // __cplusplus

extern void _ZN10S2355C2_ntC1Ev();
extern void _ZN10S2355C2_ntD1Ev();
Name_Map name_map_S2355C2_nt[] = {
  NSPAIR(_ZN10S2355C2_ntC1Ev),
  NSPAIR(_ZN10S2355C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2355C4_nt;
extern VTBL_ENTRY _ZTI10S2355C4_nt[];
extern  VTBL_ENTRY _ZTV10S2355C4_nt[];
extern Class_Descriptor cd_S2355C7_nt;
extern VTBL_ENTRY _ZTI10S2355C7_nt[];
extern  VTBL_ENTRY _ZTV10S2355C7_nt[];
extern Class_Descriptor cd_S2355C3_nt;
extern VTBL_ENTRY _ZTI10S2355C3_nt[];
extern  VTBL_ENTRY _ZTV10S2355C3_nt[];
extern Class_Descriptor cd_S2355C10;
extern VTBL_ENTRY _ZTI8S2355C10[];
extern  VTBL_ENTRY _ZTV8S2355C10[];
extern Class_Descriptor cd_S2355C9_nt;
extern VTBL_ENTRY _ZTI10S2355C9_nt[];
extern  VTBL_ENTRY _ZTV10S2355C9_nt[];
extern Class_Descriptor cd_S2355C8_nt;
extern VTBL_ENTRY _ZTI10S2355C8_nt[];
extern  VTBL_ENTRY _ZTV10S2355C8_nt[];
static Base_Class bases_S2355C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2355C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2355C7_nt,    ABISELECT(40,28), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2355C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2355C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2355C9_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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2355C8_nt,    ABISELECT(64,44), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2355C2_nt[];
extern void _ZN10S2355C2_ntD1Ev();
extern void _ZN10S2355C2_ntD0Ev();
extern void _ZN10S2355C4_nt2v5Ev();
extern void _ZN10S2355C4_nt2v6Ev();
extern void _ZN10S2355C4_nt2v7Ev();
extern void _ZN10S2355C3_nt3v11Ev();
extern void _ZN10S2355C3_nt3v12Ev();
extern void _ZN10S2355C3_nt3v13Ev();
extern void _ZN10S2355C3_nt3v14Ev();
extern void _ZN10S2355C3_nt3v15Ev();
extern void _ZN10S2355C3_nt3v16Ev();
extern void _ZN10S2355C3_nt3v17Ev();
extern void _ZN10S2355C3_nt3v18Ev();
extern void _ZN10S2355C3_nt3v19Ev();
extern void _ZN10S2355C3_nt3v20Ev();
extern void _ZN10S2355C2_nt3v31Ev();
extern void _ZN10S2355C2_nt3v32Ev();
extern void _ZN10S2355C2_nt3v33Ev();
extern void _ZN10S2355C2_nt3v34Ev();
extern void _ZN10S2355C2_nt3v35Ev();
extern void _ZN10S2355C2_nt3v36Ev();
extern void ABISELECT(_ZThn40_N10S2355C2_ntD1Ev,_ZThn28_N10S2355C2_ntD1Ev)();
extern void ABISELECT(_ZThn40_N10S2355C2_ntD0Ev,_ZThn28_N10S2355C2_ntD0Ev)();
extern void _ZN10S2355C7_nt2v8Ev();
extern void _ZN10S2355C7_nt2v9Ev();
extern void _ZN10S2355C7_nt3v10Ev();
extern void ABISELECT(_ZThn64_N10S2355C2_ntD1Ev,_ZThn44_N10S2355C2_ntD1Ev)();
extern void ABISELECT(_ZThn64_N10S2355C2_ntD0Ev,_ZThn44_N10S2355C2_ntD0Ev)();
extern void _ZN8S2355C103v21Ev();
extern void _ZN8S2355C103v22Ev();
extern void _ZN8S2355C103v23Ev();
extern void _ZN10S2355C9_nt3v24Ev();
extern void _ZN10S2355C9_nt3v25Ev();
extern void _ZN10S2355C9_nt3v26Ev();
extern void _ZN10S2355C8_nt3v27Ev();
extern void _ZN10S2355C8_nt3v28Ev();
extern void _ZN10S2355C8_nt3v29Ev();
extern void _ZN10S2355C8_nt3v30Ev();
static  VTBL_ENTRY vtc_S2355C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2355C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2355C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2355C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2355C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2355C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2355C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2355C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2355C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2355C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2355C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2355C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2355C2_nt3v36Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI10S2355C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N10S2355C2_ntD1Ev,_ZThn28_N10S2355C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N10S2355C2_ntD0Ev,_ZThn28_N10S2355C2_ntD0Ev),
  (VTBL_ENTRY)&_ZN10S2355C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2355C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2355C7_nt3v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI10S2355C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N10S2355C2_ntD1Ev,_ZThn44_N10S2355C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N10S2355C2_ntD0Ev,_ZThn44_N10S2355C2_ntD0Ev),
  (VTBL_ENTRY)&_ZN8S2355C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2355C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2355C103v23Ev,
  (VTBL_ENTRY)&_ZN10S2355C9_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2355C9_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2355C9_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2355C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2355C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2355C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2355C8_nt3v30Ev,
};
extern VTBL_ENTRY _ZTI10S2355C2_nt[];
VTBL_ENTRY *P__ZTI10S2355C2_nt = _ZTI10S2355C2_nt; 
extern  VTBL_ENTRY _ZTV10S2355C2_nt[];
Class_Descriptor cd_S2355C2_nt = {  "S2355C2_nt", // class name
  bases_S2355C2_nt, 6,
  &(vtc_S2355C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,128), // object size
  NSPAIRA(_ZTI10S2355C2_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S2355C2_nt),44, //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  S2355C18_nt  {
  void *s2355c18f0;
  virtual  ~S2355C18_nt(); // _ZN11S2355C18_ntD1Ev
  virtual void  v37(); // _ZN11S2355C18_nt3v37Ev
  virtual void  v38(); // _ZN11S2355C18_nt3v38Ev
  virtual void  v39(); // _ZN11S2355C18_nt3v39Ev
  virtual void  v40(); // _ZN11S2355C18_nt3v40Ev
  S2355C18_nt(); // tgen
};
//SIG(-1 S2355C18_nt) C1{ vd v1 v2 v3 v4 Fp}


 S2355C18_nt ::~S2355C18_nt(){ note_dtor("S2355C18_nt", this);}
void  S2355C18_nt ::v37(){vfunc_called(this, "_ZN11S2355C18_nt3v37Ev");}
void  S2355C18_nt ::v38(){vfunc_called(this, "_ZN11S2355C18_nt3v38Ev");}
void  S2355C18_nt ::v39(){vfunc_called(this, "_ZN11S2355C18_nt3v39Ev");}
void  S2355C18_nt ::v40(){vfunc_called(this, "_ZN11S2355C18_nt3v40Ev");}
S2355C18_nt ::S2355C18_nt(){ note_ctor("S2355C18_nt", this);} // tgen

//skip512 S2355C18_nt

#else // __cplusplus

extern void _ZN11S2355C18_ntC1Ev();
extern void _ZN11S2355C18_ntD1Ev();
Name_Map name_map_S2355C18_nt[] = {
  NSPAIR(_ZN11S2355C18_ntC1Ev),
  NSPAIR(_ZN11S2355C18_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S2355C18_nt[];
extern void _ZN11S2355C18_ntD1Ev();
extern void _ZN11S2355C18_ntD0Ev();
extern void _ZN11S2355C18_nt3v37Ev();
extern void _ZN11S2355C18_nt3v38Ev();
extern void _ZN11S2355C18_nt3v39Ev();
extern void _ZN11S2355C18_nt3v40Ev();
static  VTBL_ENTRY vtc_S2355C18_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2355C18_nt[0]),
  (VTBL_ENTRY)&_ZN11S2355C18_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2355C18_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2355C18_nt3v37Ev,
  (VTBL_ENTRY)&_ZN11S2355C18_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S2355C18_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S2355C18_nt3v40Ev,
};
extern VTBL_ENTRY _ZTI11S2355C18_nt[];
VTBL_ENTRY *P__ZTI11S2355C18_nt = _ZTI11S2355C18_nt; 
extern  VTBL_ENTRY _ZTV11S2355C18_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2355C21_nt  {
  ::S5166C25 s2355c21f0;
  void  mf2355c21(); // _ZN11S2355C21_nt9mf2355c21Ev
};
//SIG(-1 S2355C21_nt) C1{ m FC2{ m Fp Fi FC3{ m} FC4{ m}}}


void  S2355C21_nt ::mf2355c21(){}

//skip512 S2355C21_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2355C20_nt  {
  ::S2355C21_nt s2355c20f0;
  void *s2355c20f1[3];
  char s2355c20f2;
  virtual  ~S2355C20_nt(); // _ZN11S2355C20_ntD1Ev
  virtual void  v42(); // _ZN11S2355C20_nt3v42Ev
  S2355C20_nt(); // tgen
};
//SIG(-1 S2355C20_nt) C1{ vd v1 FC2{ m FC3{ m Fp Fi FC4{ m} FC5{ m}}} Fp[3] Fc}


 S2355C20_nt ::~S2355C20_nt(){ note_dtor("S2355C20_nt", this);}
void  S2355C20_nt ::v42(){vfunc_called(this, "_ZN11S2355C20_nt3v42Ev");}
S2355C20_nt ::S2355C20_nt(){ note_ctor("S2355C20_nt", this);} // tgen

//skip512 S2355C20_nt

#else // __cplusplus

extern void _ZN11S2355C20_ntC1Ev();
extern void _ZN11S2355C20_ntD1Ev();
Name_Map name_map_S2355C20_nt[] = {
  NSPAIR(_ZN11S2355C20_ntC1Ev),
  NSPAIR(_ZN11S2355C20_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S2355C20_nt[];
extern void _ZN11S2355C20_ntD1Ev();
extern void _ZN11S2355C20_ntD0Ev();
extern void _ZN11S2355C20_nt3v42Ev();
static  VTBL_ENTRY vtc_S2355C20_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2355C20_nt[0]),
  (VTBL_ENTRY)&_ZN11S2355C20_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2355C20_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2355C20_nt3v42Ev,
};
extern VTBL_ENTRY _ZTI11S2355C20_nt[];
VTBL_ENTRY *P__ZTI11S2355C20_nt = _ZTI11S2355C20_nt; 
extern  VTBL_ENTRY _ZTV11S2355C20_nt[];
Class_Descriptor cd_S2355C20_nt = {  "S2355C20_nt", // class name
  0,0,//no base classes
  &(vtc_S2355C20_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI11S2355C20_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S2355C20_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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2355C19_nt  : S2355C20_nt {
  void *s2355c19f0;
  virtual void  v41(); // _ZN11S2355C19_nt3v41Ev
  ~S2355C19_nt(); // tgen
  S2355C19_nt(); // tgen
};
//SIG(-1 S2355C19_nt) C1{ BC2{ vd v2 FC3{ m FC4{ m Fp Fi FC5{ m} FC6{ m}}} Fp[3] Fc} v1 Fp}


void  S2355C19_nt ::v41(){vfunc_called(this, "_ZN11S2355C19_nt3v41Ev");}
S2355C19_nt ::~S2355C19_nt(){ note_dtor("S2355C19_nt", this);} // tgen
S2355C19_nt ::S2355C19_nt(){ note_ctor("S2355C19_nt", this);} // tgen

//skip512 S2355C19_nt

#else // __cplusplus

extern void _ZN11S2355C19_ntC1Ev();
extern void _ZN11S2355C19_ntD1Ev();
Name_Map name_map_S2355C19_nt[] = {
  NSPAIR(_ZN11S2355C19_ntC1Ev),
  NSPAIR(_ZN11S2355C19_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2355C20_nt;
extern VTBL_ENTRY _ZTI11S2355C20_nt[];
extern  VTBL_ENTRY _ZTV11S2355C20_nt[];
static Base_Class bases_S2355C19_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2355C20_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI11S2355C19_nt[];
extern void _ZN11S2355C19_ntD1Ev();
extern void _ZN11S2355C19_ntD0Ev();
extern void _ZN11S2355C20_nt3v42Ev();
extern void _ZN11S2355C19_nt3v41Ev();
static  VTBL_ENTRY vtc_S2355C19_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2355C19_nt[0]),
  (VTBL_ENTRY)&_ZN11S2355C19_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2355C19_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2355C20_nt3v42Ev,
  (VTBL_ENTRY)&_ZN11S2355C19_nt3v41Ev,
};
extern VTBL_ENTRY _ZTI11S2355C19_nt[];
VTBL_ENTRY *P__ZTI11S2355C19_nt = _ZTI11S2355C19_nt; 
extern  VTBL_ENTRY _ZTV11S2355C19_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2355C26_nt  {
  int s2355c26f0[2];
};
//SIG(-1 S2355C26_nt) C1{ Fi[2]}



//skip512 S2355C26_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2355C27_nt  {
  int s2355c27f0[3];
  char s2355c27f1[256];
};
//SIG(1 S2355C27_nt) C1{ Fi[3] Fc[256]}



//skip512 S2355C27_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2355C25_nt  {
  int s2355c25f0[2];
  ::S2355C26_nt s2355c25f1[10];
  ::S2355C27_nt s2355c25f2[10];
};
//SIG(-1 S2355C25_nt) C1{ Fi[2] FC2{ Fi[2]}[10] FC3{ Fi[3] Fc[256]}[10]}



//skip512 S2355C25_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2355C31_nt  {
  virtual  ~S2355C31_nt(); // _ZN11S2355C31_ntD1Ev
  virtual void  v45(); // _ZN11S2355C31_nt3v45Ev
  virtual void  v46(); // _ZN11S2355C31_nt3v46Ev
  S2355C31_nt(); // tgen
};
//SIG(-1 S2355C31_nt) C1{ vd v1 v2}


 S2355C31_nt ::~S2355C31_nt(){ note_dtor("S2355C31_nt", this);}
void  S2355C31_nt ::v45(){vfunc_called(this, "_ZN11S2355C31_nt3v45Ev");}
void  S2355C31_nt ::v46(){vfunc_called(this, "_ZN11S2355C31_nt3v46Ev");}
S2355C31_nt ::S2355C31_nt(){ note_ctor("S2355C31_nt", this);} // tgen

//skip512 S2355C31_nt

#else // __cplusplus

extern void _ZN11S2355C31_ntC1Ev();
extern void _ZN11S2355C31_ntD1Ev();
Name_Map name_map_S2355C31_nt[] = {
  NSPAIR(_ZN11S2355C31_ntC1Ev),
  NSPAIR(_ZN11S2355C31_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S2355C31_nt[];
extern void _ZN11S2355C31_ntD1Ev();
extern void _ZN11S2355C31_ntD0Ev();
extern void _ZN11S2355C31_nt3v45Ev();
extern void _ZN11S2355C31_nt3v46Ev();
static  VTBL_ENTRY vtc_S2355C31_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2355C31_nt[0]),
  (VTBL_ENTRY)&_ZN11S2355C31_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2355C31_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2355C31_nt3v45Ev,
  (VTBL_ENTRY)&_ZN11S2355C31_nt3v46Ev,
};
extern VTBL_ENTRY _ZTI11S2355C31_nt[];
VTBL_ENTRY *P__ZTI11S2355C31_nt = _ZTI11S2355C31_nt; 
extern  VTBL_ENTRY _ZTV11S2355C31_nt[];
Class_Descriptor cd_S2355C31_nt = {  "S2355C31_nt", // class name
  0,0,//no base classes
  &(vtc_S2355C31_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S2355C31_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S2355C31_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  S2355C28_nt  : S5166C28_nt , S2355C31_nt {
  virtual  ~S2355C28_nt(); // _ZN11S2355C28_ntD1Ev
  virtual void  v43(); // _ZN11S2355C28_nt3v43Ev
  virtual void  v44(); // _ZN11S2355C28_nt3v44Ev
  S2355C28_nt(); // tgen
};
//SIG(-1 S2355C28_nt) C1{ BC2{ m Fp Fi[2] FC3{ m}} BC4{ vd v3 v4} vd v1 v2}


 S2355C28_nt ::~S2355C28_nt(){ note_dtor("S2355C28_nt", this);}
void  S2355C28_nt ::v43(){vfunc_called(this, "_ZN11S2355C28_nt3v43Ev");}
void  S2355C28_nt ::v44(){vfunc_called(this, "_ZN11S2355C28_nt3v44Ev");}
S2355C28_nt ::S2355C28_nt(){ note_ctor("S2355C28_nt", this);} // tgen

//skip512 S2355C28_nt

#else // __cplusplus

extern void _ZN11S2355C28_ntC1Ev();
extern void _ZN11S2355C28_ntD1Ev();
Name_Map name_map_S2355C28_nt[] = {
  NSPAIR(_ZN11S2355C28_ntC1Ev),
  NSPAIR(_ZN11S2355C28_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C28_nt;
extern VTBL_ENTRY _ZTI11S5166C28_nt[];
extern Class_Descriptor cd_S2355C31_nt;
extern VTBL_ENTRY _ZTI11S2355C31_nt[];
extern  VTBL_ENTRY _ZTV11S2355C31_nt[];
static Base_Class bases_S2355C28_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C28_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_S2355C31_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI11S2355C28_nt[];
extern void _ZN11S2355C28_ntD1Ev();
extern void _ZN11S2355C28_ntD0Ev();
extern void _ZN11S2355C31_nt3v45Ev();
extern void _ZN11S2355C31_nt3v46Ev();
extern void _ZN11S2355C28_nt3v43Ev();
extern void _ZN11S2355C28_nt3v44Ev();
static  VTBL_ENTRY vtc_S2355C28_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2355C28_nt[0]),
  (VTBL_ENTRY)&_ZN11S2355C28_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2355C28_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2355C31_nt3v45Ev,
  (VTBL_ENTRY)&_ZN11S2355C31_nt3v46Ev,
  (VTBL_ENTRY)&_ZN11S2355C28_nt3v43Ev,
  (VTBL_ENTRY)&_ZN11S2355C28_nt3v44Ev,
};
extern VTBL_ENTRY _ZTI11S2355C28_nt[];
VTBL_ENTRY *P__ZTI11S2355C28_nt = _ZTI11S2355C28_nt; 
extern  VTBL_ENTRY _ZTV11S2355C28_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2355C1  : S2355C2_nt {
  ::S2355C18_nt s2355c1f0;
  ::S2355C19_nt s2355c1f1;
  int s2355c1f2[4];
  ::S2355C25_nt s2355c1f3;
  int s2355c1f4;
  void *s2355c1f5[2];
  ::S2355C28_nt s2355c1f6;
  virtual  ~S2355C1(); // _ZN7S2355C1D1Ev
  virtual void  v1(); // _ZN7S2355C12v1Ev
  virtual void  v2(); // _ZN7S2355C12v2Ev
  virtual void  v3(); // _ZN7S2355C12v3Ev
  virtual void  v4(); // _ZN7S2355C12v4Ev
  S2355C1(); // tgen
};
//SIG(1 S2355C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd v8 v9 v10} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp Fc Fi} BC8{ BC9{ BC10{ vd v21 v22 v23} vd v24 v25 v26 FC11{ m Fp Fi[2] FC12{ m}} FC13{ m FL[4]} Fc} vd v27 v28 v29 v30} vd v31 v32 v33 v34 v35 v36 Fi[3] Fc FC14{ BC15{ m Fp Fi FC16{ m} FC17{ m}}}} vd v1 v2 v3 v4 FC18{ vd v37 v38 v39 v40 Fp} FC19{ BC20{ vd v42 FC21{ m FC15} Fp[3] Fc} v41 Fp} Fi[4] FC22{ Fi[2] FC23{ Fi[2]}[10] FC24{ Fi[3] Fc[256]}[10]} Fi Fp[2] FC25{ BC26{ m Fp Fi[2] FC17} BC27{ vd v45 v46} vd v43 v44}}


 S2355C1 ::~S2355C1(){ note_dtor("S2355C1", this);}
void  S2355C1 ::v1(){vfunc_called(this, "_ZN7S2355C12v1Ev");}
void  S2355C1 ::v2(){vfunc_called(this, "_ZN7S2355C12v2Ev");}
void  S2355C1 ::v3(){vfunc_called(this, "_ZN7S2355C12v3Ev");}
void  S2355C1 ::v4(){vfunc_called(this, "_ZN7S2355C12v4Ev");}
S2355C1 ::S2355C1(){ note_ctor("S2355C1", this);} // tgen

static void Test_S2355C1()
{
  extern Class_Descriptor cd_S2355C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(387,748)];
    init_test(&cd_S2355C1, buf);
    S2355C1 *dp, &lv = *(dp=new (buf) S2355C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3088,2988), "sizeof(S2355C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2355C1)");
    check_base_class_offset(lv, (S2355C4_nt*)(S2355C3_nt*)(S2355C2_nt*), 0, "S2355C1");
    check_base_class_offset(lv, (S2355C7_nt*)(S2355C3_nt*)(S2355C2_nt*), ABISELECT(40,28), "S2355C1");
    check_base_class_offset(lv, (S2355C3_nt*)(S2355C2_nt*), 0, "S2355C1");
    check_base_class_offset(lv, (S2355C10*)(S2355C9_nt*)(S2355C8_nt*)(S2355C2_nt*), ABISELECT(64,44), "S2355C1");
    check_base_class_offset(lv, (S2355C9_nt*)(S2355C8_nt*)(S2355C2_nt*), ABISELECT(64,44), "S2355C1");
    check_base_class_offset(lv, (S2355C8_nt*)(S2355C2_nt*), ABISELECT(64,44), "S2355C1");
    check_base_class_offset(lv, (S2355C2_nt*), 0, "S2355C1");
    check_field_offset(lv, s2355c1f0, ABISELECT(168,128), "S2355C1.s2355c1f0");
    check_field_offset(lv, s2355c1f1, ABISELECT(184,136), "S2355C1.s2355c1f1");
    check_field_offset(lv, s2355c1f2, ABISELECT(248,172), "S2355C1.s2355c1f2");
    check_field_offset(lv, s2355c1f3, ABISELECT(264,188), "S2355C1.s2355c1f3");
    check_field_offset(lv, s2355c1f4, ABISELECT(3032,2956), "S2355C1.s2355c1f4");
    check_field_offset(lv, s2355c1f5, ABISELECT(3040,2960), "S2355C1.s2355c1f5");
    check_field_offset(lv, s2355c1f6, ABISELECT(3056,2968), "S2355C1.s2355c1f6");
    test_class_info(&lv, &cd_S2355C1);
    dp->~S2355C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2355C1(Test_S2355C1, "S2355C1", ABISELECT(3088,2988));

#else // __cplusplus

extern void _ZN7S2355C1C1Ev();
extern void _ZN7S2355C1D1Ev();
Name_Map name_map_S2355C1[] = {
  NSPAIR(_ZN7S2355C1C1Ev),
  NSPAIR(_ZN7S2355C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2355C4_nt;
extern VTBL_ENTRY _ZTI10S2355C4_nt[];
extern  VTBL_ENTRY _ZTV10S2355C4_nt[];
extern Class_Descriptor cd_S2355C7_nt;
extern VTBL_ENTRY _ZTI10S2355C7_nt[];
extern  VTBL_ENTRY _ZTV10S2355C7_nt[];
extern Class_Descriptor cd_S2355C3_nt;
extern VTBL_ENTRY _ZTI10S2355C3_nt[];
extern  VTBL_ENTRY _ZTV10S2355C3_nt[];
extern Class_Descriptor cd_S2355C10;
extern VTBL_ENTRY _ZTI8S2355C10[];
extern  VTBL_ENTRY _ZTV8S2355C10[];
extern Class_Descriptor cd_S2355C9_nt;
extern VTBL_ENTRY _ZTI10S2355C9_nt[];
extern  VTBL_ENTRY _ZTV10S2355C9_nt[];
extern Class_Descriptor cd_S2355C8_nt;
extern VTBL_ENTRY _ZTI10S2355C8_nt[];
extern  VTBL_ENTRY _ZTV10S2355C8_nt[];
extern Class_Descriptor cd_S2355C2_nt;
extern VTBL_ENTRY _ZTI10S2355C2_nt[];
extern  VTBL_ENTRY _ZTV10S2355C2_nt[];
static Base_Class bases_S2355C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2355C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2355C7_nt,    ABISELECT(40,28), //bcp->offset
    27, //bcp->virtual_function_table_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_S2355C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2355C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2355C9_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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2355C8_nt,    ABISELECT(64,44), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2355C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2355C1[];
extern void _ZN7S2355C1D1Ev();
extern void _ZN7S2355C1D0Ev();
extern void _ZN10S2355C4_nt2v5Ev();
extern void _ZN10S2355C4_nt2v6Ev();
extern void _ZN10S2355C4_nt2v7Ev();
extern void _ZN10S2355C3_nt3v11Ev();
extern void _ZN10S2355C3_nt3v12Ev();
extern void _ZN10S2355C3_nt3v13Ev();
extern void _ZN10S2355C3_nt3v14Ev();
extern void _ZN10S2355C3_nt3v15Ev();
extern void _ZN10S2355C3_nt3v16Ev();
extern void _ZN10S2355C3_nt3v17Ev();
extern void _ZN10S2355C3_nt3v18Ev();
extern void _ZN10S2355C3_nt3v19Ev();
extern void _ZN10S2355C3_nt3v20Ev();
extern void _ZN10S2355C2_nt3v31Ev();
extern void _ZN10S2355C2_nt3v32Ev();
extern void _ZN10S2355C2_nt3v33Ev();
extern void _ZN10S2355C2_nt3v34Ev();
extern void _ZN10S2355C2_nt3v35Ev();
extern void _ZN10S2355C2_nt3v36Ev();
extern void _ZN7S2355C12v1Ev();
extern void _ZN7S2355C12v2Ev();
extern void _ZN7S2355C12v3Ev();
extern void _ZN7S2355C12v4Ev();
extern void ABISELECT(_ZThn40_N7S2355C1D1Ev,_ZThn28_N7S2355C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2355C1D0Ev,_ZThn28_N7S2355C1D0Ev)();
extern void _ZN10S2355C7_nt2v8Ev();
extern void _ZN10S2355C7_nt2v9Ev();
extern void _ZN10S2355C7_nt3v10Ev();
extern void ABISELECT(_ZThn64_N7S2355C1D1Ev,_ZThn44_N7S2355C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S2355C1D0Ev,_ZThn44_N7S2355C1D0Ev)();
extern void _ZN8S2355C103v21Ev();
extern void _ZN8S2355C103v22Ev();
extern void _ZN8S2355C103v23Ev();
extern void _ZN10S2355C9_nt3v24Ev();
extern void _ZN10S2355C9_nt3v25Ev();
extern void _ZN10S2355C9_nt3v26Ev();
extern void _ZN10S2355C8_nt3v27Ev();
extern void _ZN10S2355C8_nt3v28Ev();
extern void _ZN10S2355C8_nt3v29Ev();
extern void _ZN10S2355C8_nt3v30Ev();
static  VTBL_ENTRY vtc_S2355C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2355C1[0]),
  (VTBL_ENTRY)&_ZN7S2355C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2355C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2355C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2355C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2355C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2355C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2355C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2355C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2355C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2355C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2355C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2355C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN7S2355C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2355C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2355C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2355C12v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2355C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2355C1D1Ev,_ZThn28_N7S2355C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2355C1D0Ev,_ZThn28_N7S2355C1D0Ev),
  (VTBL_ENTRY)&_ZN10S2355C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2355C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2355C7_nt3v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2355C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2355C1D1Ev,_ZThn44_N7S2355C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2355C1D0Ev,_ZThn44_N7S2355C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2355C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2355C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2355C103v23Ev,
  (VTBL_ENTRY)&_ZN10S2355C9_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2355C9_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2355C9_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2355C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2355C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2355C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2355C8_nt3v30Ev,
};
extern VTBL_ENTRY _ZTI7S2355C1[];
extern  VTBL_ENTRY _ZTV7S2355C1[];
Class_Descriptor cd_S2355C1 = {  "S2355C1", // class name
  bases_S2355C1, 7,
  &(vtc_S2355C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3088,2988), // object size
  NSPAIRA(_ZTI7S2355C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2355C1),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1472C4  {
  int s1472c4f0;
  __tsi64 s1472c4f1;
  void *s1472c4f2[4];
  int s1472c4f3[2];
  void *s1472c4f4;
  ::S1378C5_nt s1472c4f5;
  void *s1472c4f6[2];
  virtual  ~S1472C4(); // _ZN7S1472C4D1Ev
  virtual void  v5(); // _ZN7S1472C42v5Ev
  virtual void  v6(); // _ZN7S1472C42v6Ev
  virtual void  v7(); // _ZN7S1472C42v7Ev
  virtual void  v8(); // _ZN7S1472C42v8Ev
  virtual void  v9(); // _ZN7S1472C42v9Ev
  virtual void  v10(); // _ZN7S1472C43v10Ev
  virtual void  v11(); // _ZN7S1472C43v11Ev
  virtual void  v12(); // _ZN7S1472C43v12Ev
  virtual void  v13(); // _ZN7S1472C43v13Ev
  virtual void  v14(); // _ZN7S1472C43v14Ev
  virtual void  v15(); // _ZN7S1472C43v15Ev
  virtual void  v16(); // _ZN7S1472C43v16Ev
  virtual void  v17(); // _ZN7S1472C43v17Ev
  virtual void  v18(); // _ZN7S1472C43v18Ev
  virtual void  v19(); // _ZN7S1472C43v19Ev
  virtual void  v20(); // _ZN7S1472C43v20Ev
  virtual void  v21(); // _ZN7S1472C43v21Ev
  virtual void  v22(); // _ZN7S1472C43v22Ev
  virtual void  v23(); // _ZN7S1472C43v23Ev
  virtual void  v24(); // _ZN7S1472C43v24Ev
  virtual void  v25(); // _ZN7S1472C43v25Ev
  virtual void  v26(); // _ZN7S1472C43v26Ev
  virtual void  v27(); // _ZN7S1472C43v27Ev
  virtual void  v28(); // _ZN7S1472C43v28Ev
  virtual void  v29(); // _ZN7S1472C43v29Ev
  virtual void  v30(); // _ZN7S1472C43v30Ev
  virtual void  v31(); // _ZN7S1472C43v31Ev
  virtual void  v32(); // _ZN7S1472C43v32Ev
  virtual void  v33(); // _ZN7S1472C43v33Ev
  virtual void  v34(); // _ZN7S1472C43v34Ev
  virtual void  v35(); // _ZN7S1472C43v35Ev
  virtual void  v36(); // _ZN7S1472C43v36Ev
  virtual void  v37(); // _ZN7S1472C43v37Ev
  virtual void  v38(); // _ZN7S1472C43v38Ev
  virtual void  v39(); // _ZN7S1472C43v39Ev
  virtual void  v40(); // _ZN7S1472C43v40Ev
  virtual void  v41(); // _ZN7S1472C43v41Ev
  virtual void  v42(); // _ZN7S1472C43v42Ev
  virtual void  v43(); // _ZN7S1472C43v43Ev
  virtual void  v44(); // _ZN7S1472C43v44Ev
  virtual void  v45(); // _ZN7S1472C43v45Ev
  virtual void  v46(); // _ZN7S1472C43v46Ev
  virtual void  v47(); // _ZN7S1472C43v47Ev
  virtual void  v48(); // _ZN7S1472C43v48Ev
  virtual void  v49(); // _ZN7S1472C43v49Ev
  virtual void  v50(); // _ZN7S1472C43v50Ev
  virtual void  v51(); // _ZN7S1472C43v51Ev
  virtual void  v52(); // _ZN7S1472C43v52Ev
  virtual void  v53(); // _ZN7S1472C43v53Ev
  virtual void  v54(); // _ZN7S1472C43v54Ev
  virtual void  v55(); // _ZN7S1472C43v55Ev
  virtual void  v56(); // _ZN7S1472C43v56Ev
  virtual void  v57(); // _ZN7S1472C43v57Ev
  virtual void  v58(); // _ZN7S1472C43v58Ev
  virtual void  v59(); // _ZN7S1472C43v59Ev
  virtual void  v60(); // _ZN7S1472C43v60Ev
  virtual void  v61(); // _ZN7S1472C43v61Ev
  virtual void  v62(); // _ZN7S1472C43v62Ev
  virtual void  v63(); // _ZN7S1472C43v63Ev
  virtual void  v64(); // _ZN7S1472C43v64Ev
  virtual void  v65(); // _ZN7S1472C43v65Ev
  virtual void  v66(); // _ZN7S1472C43v66Ev
  virtual void  v67(); // _ZN7S1472C43v67Ev
  virtual void  v68(); // _ZN7S1472C43v68Ev
  S1472C4(); // tgen
};
//SIG(-1 S1472C4) 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]}


 S1472C4 ::~S1472C4(){ note_dtor("S1472C4", this);}
void  S1472C4 ::v5(){vfunc_called(this, "_ZN7S1472C42v5Ev");}
void  S1472C4 ::v6(){vfunc_called(this, "_ZN7S1472C42v6Ev");}
void  S1472C4 ::v7(){vfunc_called(this, "_ZN7S1472C42v7Ev");}
void  S1472C4 ::v8(){vfunc_called(this, "_ZN7S1472C42v8Ev");}
void  S1472C4 ::v9(){vfunc_called(this, "_ZN7S1472C42v9Ev");}
void  S1472C4 ::v10(){vfunc_called(this, "_ZN7S1472C43v10Ev");}
void  S1472C4 ::v11(){vfunc_called(this, "_ZN7S1472C43v11Ev");}
void  S1472C4 ::v12(){vfunc_called(this, "_ZN7S1472C43v12Ev");}
void  S1472C4 ::v13(){vfunc_called(this, "_ZN7S1472C43v13Ev");}
void  S1472C4 ::v14(){vfunc_called(this, "_ZN7S1472C43v14Ev");}
void  S1472C4 ::v15(){vfunc_called(this, "_ZN7S1472C43v15Ev");}
void  S1472C4 ::v16(){vfunc_called(this, "_ZN7S1472C43v16Ev");}
void  S1472C4 ::v17(){vfunc_called(this, "_ZN7S1472C43v17Ev");}
void  S1472C4 ::v18(){vfunc_called(this, "_ZN7S1472C43v18Ev");}
void  S1472C4 ::v19(){vfunc_called(this, "_ZN7S1472C43v19Ev");}
void  S1472C4 ::v20(){vfunc_called(this, "_ZN7S1472C43v20Ev");}
void  S1472C4 ::v21(){vfunc_called(this, "_ZN7S1472C43v21Ev");}
void  S1472C4 ::v22(){vfunc_called(this, "_ZN7S1472C43v22Ev");}
void  S1472C4 ::v23(){vfunc_called(this, "_ZN7S1472C43v23Ev");}
void  S1472C4 ::v24(){vfunc_called(this, "_ZN7S1472C43v24Ev");}
void  S1472C4 ::v25(){vfunc_called(this, "_ZN7S1472C43v25Ev");}
void  S1472C4 ::v26(){vfunc_called(this, "_ZN7S1472C43v26Ev");}
void  S1472C4 ::v27(){vfunc_called(this, "_ZN7S1472C43v27Ev");}
void  S1472C4 ::v28(){vfunc_called(this, "_ZN7S1472C43v28Ev");}
void  S1472C4 ::v29(){vfunc_called(this, "_ZN7S1472C43v29Ev");}
void  S1472C4 ::v30(){vfunc_called(this, "_ZN7S1472C43v30Ev");}
void  S1472C4 ::v31(){vfunc_called(this, "_ZN7S1472C43v31Ev");}
void  S1472C4 ::v32(){vfunc_called(this, "_ZN7S1472C43v32Ev");}
void  S1472C4 ::v33(){vfunc_called(this, "_ZN7S1472C43v33Ev");}
void  S1472C4 ::v34(){vfunc_called(this, "_ZN7S1472C43v34Ev");}
void  S1472C4 ::v35(){vfunc_called(this, "_ZN7S1472C43v35Ev");}
void  S1472C4 ::v36(){vfunc_called(this, "_ZN7S1472C43v36Ev");}
void  S1472C4 ::v37(){vfunc_called(this, "_ZN7S1472C43v37Ev");}
void  S1472C4 ::v38(){vfunc_called(this, "_ZN7S1472C43v38Ev");}
void  S1472C4 ::v39(){vfunc_called(this, "_ZN7S1472C43v39Ev");}
void  S1472C4 ::v40(){vfunc_called(this, "_ZN7S1472C43v40Ev");}
void  S1472C4 ::v41(){vfunc_called(this, "_ZN7S1472C43v41Ev");}
void  S1472C4 ::v42(){vfunc_called(this, "_ZN7S1472C43v42Ev");}
void  S1472C4 ::v43(){vfunc_called(this, "_ZN7S1472C43v43Ev");}
void  S1472C4 ::v44(){vfunc_called(this, "_ZN7S1472C43v44Ev");}
void  S1472C4 ::v45(){vfunc_called(this, "_ZN7S1472C43v45Ev");}
void  S1472C4 ::v46(){vfunc_called(this, "_ZN7S1472C43v46Ev");}
void  S1472C4 ::v47(){vfunc_called(this, "_ZN7S1472C43v47Ev");}
void  S1472C4 ::v48(){vfunc_called(this, "_ZN7S1472C43v48Ev");}
void  S1472C4 ::v49(){vfunc_called(this, "_ZN7S1472C43v49Ev");}
void  S1472C4 ::v50(){vfunc_called(this, "_ZN7S1472C43v50Ev");}
void  S1472C4 ::v51(){vfunc_called(this, "_ZN7S1472C43v51Ev");}
void  S1472C4 ::v52(){vfunc_called(this, "_ZN7S1472C43v52Ev");}
void  S1472C4 ::v53(){vfunc_called(this, "_ZN7S1472C43v53Ev");}
void  S1472C4 ::v54(){vfunc_called(this, "_ZN7S1472C43v54Ev");}
void  S1472C4 ::v55(){vfunc_called(this, "_ZN7S1472C43v55Ev");}
void  S1472C4 ::v56(){vfunc_called(this, "_ZN7S1472C43v56Ev");}
void  S1472C4 ::v57(){vfunc_called(this, "_ZN7S1472C43v57Ev");}
void  S1472C4 ::v58(){vfunc_called(this, "_ZN7S1472C43v58Ev");}
void  S1472C4 ::v59(){vfunc_called(this, "_ZN7S1472C43v59Ev");}
void  S1472C4 ::v60(){vfunc_called(this, "_ZN7S1472C43v60Ev");}
void  S1472C4 ::v61(){vfunc_called(this, "_ZN7S1472C43v61Ev");}
void  S1472C4 ::v62(){vfunc_called(this, "_ZN7S1472C43v62Ev");}
void  S1472C4 ::v63(){vfunc_called(this, "_ZN7S1472C43v63Ev");}
void  S1472C4 ::v64(){vfunc_called(this, "_ZN7S1472C43v64Ev");}
void  S1472C4 ::v65(){vfunc_called(this, "_ZN7S1472C43v65Ev");}
void  S1472C4 ::v66(){vfunc_called(this, "_ZN7S1472C43v66Ev");}
void  S1472C4 ::v67(){vfunc_called(this, "_ZN7S1472C43v67Ev");}
void  S1472C4 ::v68(){vfunc_called(this, "_ZN7S1472C43v68Ev");}
S1472C4 ::S1472C4(){ note_ctor("S1472C4", this);} // tgen

static void Test_S1472C4()
{
  extern Class_Descriptor cd_S1472C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1472C4, buf);
    S1472C4 *dp, &lv = *(dp=new (buf) S1472C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1472C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1472C4)");
    check_field_offset(lv, s1472c4f0, ABISELECT(8,4), "S1472C4.s1472c4f0");
    check_field_offset(lv, s1472c4f1, ABISELECT(16,8), "S1472C4.s1472c4f1");
    check_field_offset(lv, s1472c4f2, ABISELECT(24,16), "S1472C4.s1472c4f2");
    check_field_offset(lv, s1472c4f3, ABISELECT(56,32), "S1472C4.s1472c4f3");
    check_field_offset(lv, s1472c4f4, ABISELECT(64,40), "S1472C4.s1472c4f4");
    check_field_offset(lv, s1472c4f5, ABISELECT(72,44), "S1472C4.s1472c4f5");
    check_field_offset(lv, s1472c4f6, ABISELECT(80,52), "S1472C4.s1472c4f6");
    test_class_info(&lv, &cd_S1472C4);
    dp->~S1472C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1472C4(Test_S1472C4, "S1472C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1472C4C1Ev();
extern void _ZN7S1472C4D1Ev();
Name_Map name_map_S1472C4[] = {
  NSPAIR(_ZN7S1472C4C1Ev),
  NSPAIR(_ZN7S1472C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1472C4[];
extern void _ZN7S1472C4D1Ev();
extern void _ZN7S1472C4D0Ev();
extern void _ZN7S1472C42v5Ev();
extern void _ZN7S1472C42v6Ev();
extern void _ZN7S1472C42v7Ev();
extern void _ZN7S1472C42v8Ev();
extern void _ZN7S1472C42v9Ev();
extern void _ZN7S1472C43v10Ev();
extern void _ZN7S1472C43v11Ev();
extern void _ZN7S1472C43v12Ev();
extern void _ZN7S1472C43v13Ev();
extern void _ZN7S1472C43v14Ev();
extern void _ZN7S1472C43v15Ev();
extern void _ZN7S1472C43v16Ev();
extern void _ZN7S1472C43v17Ev();
extern void _ZN7S1472C43v18Ev();
extern void _ZN7S1472C43v19Ev();
extern void _ZN7S1472C43v20Ev();
extern void _ZN7S1472C43v21Ev();
extern void _ZN7S1472C43v22Ev();
extern void _ZN7S1472C43v23Ev();
extern void _ZN7S1472C43v24Ev();
extern void _ZN7S1472C43v25Ev();
extern void _ZN7S1472C43v26Ev();
extern void _ZN7S1472C43v27Ev();
extern void _ZN7S1472C43v28Ev();
extern void _ZN7S1472C43v29Ev();
extern void _ZN7S1472C43v30Ev();
extern void _ZN7S1472C43v31Ev();
extern void _ZN7S1472C43v32Ev();
extern void _ZN7S1472C43v33Ev();
extern void _ZN7S1472C43v34Ev();
extern void _ZN7S1472C43v35Ev();
extern void _ZN7S1472C43v36Ev();
extern void _ZN7S1472C43v37Ev();
extern void _ZN7S1472C43v38Ev();
extern void _ZN7S1472C43v39Ev();
extern void _ZN7S1472C43v40Ev();
extern void _ZN7S1472C43v41Ev();
extern void _ZN7S1472C43v42Ev();
extern void _ZN7S1472C43v43Ev();
extern void _ZN7S1472C43v44Ev();
extern void _ZN7S1472C43v45Ev();
extern void _ZN7S1472C43v46Ev();
extern void _ZN7S1472C43v47Ev();
extern void _ZN7S1472C43v48Ev();
extern void _ZN7S1472C43v49Ev();
extern void _ZN7S1472C43v50Ev();
extern void _ZN7S1472C43v51Ev();
extern void _ZN7S1472C43v52Ev();
extern void _ZN7S1472C43v53Ev();
extern void _ZN7S1472C43v54Ev();
extern void _ZN7S1472C43v55Ev();
extern void _ZN7S1472C43v56Ev();
extern void _ZN7S1472C43v57Ev();
extern void _ZN7S1472C43v58Ev();
extern void _ZN7S1472C43v59Ev();
extern void _ZN7S1472C43v60Ev();
extern void _ZN7S1472C43v61Ev();
extern void _ZN7S1472C43v62Ev();
extern void _ZN7S1472C43v63Ev();
extern void _ZN7S1472C43v64Ev();
extern void _ZN7S1472C43v65Ev();
extern void _ZN7S1472C43v66Ev();
extern void _ZN7S1472C43v67Ev();
extern void _ZN7S1472C43v68Ev();
static  VTBL_ENTRY vtc_S1472C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1472C4[0]),
  (VTBL_ENTRY)&_ZN7S1472C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1472C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v68Ev,
};
extern VTBL_ENTRY _ZTI7S1472C4[];
extern  VTBL_ENTRY _ZTV7S1472C4[];
Class_Descriptor cd_S1472C4 = {  "S1472C4", // class name
  0,0,//no base classes
  &(vtc_S1472C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1472C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1472C4),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  S1472C3_nt  : S1472C4 {
  unsigned int s1472c3f0:1;
  unsigned int s1472c3f1:1;
  unsigned int s1472c3f2:1;
  unsigned int s1472c3f3:1;
  unsigned int s1472c3f4:1;
  unsigned int s1472c3f5:1;
  unsigned int s1472c3f6:1;
  ::S5166C37 s1472c3f7;
  virtual  ~S1472C3_nt(); // _ZN10S1472C3_ntD1Ev
  virtual void  v69(); // _ZN10S1472C3_nt3v69Ev
  virtual void  v70(); // _ZN10S1472C3_nt3v70Ev
  virtual void  v71(); // _ZN10S1472C3_nt3v71Ev
  virtual void  v72(); // _ZN10S1472C3_nt3v72Ev
  virtual void  v73(); // _ZN10S1472C3_nt3v73Ev
  virtual void  v74(); // _ZN10S1472C3_nt3v74Ev
  virtual void  v75(); // _ZN10S1472C3_nt3v75Ev
  virtual void  v76(); // _ZN10S1472C3_nt3v76Ev
  virtual void  v77(); // _ZN10S1472C3_nt3v77Ev
  virtual void  v78(); // _ZN10S1472C3_nt3v78Ev
  virtual void  v79(); // _ZN10S1472C3_nt3v79Ev
  virtual void  v80(); // _ZN10S1472C3_nt3v80Ev
  virtual void  v81(); // _ZN10S1472C3_nt3v81Ev
  virtual void  v82(); // _ZN10S1472C3_nt3v82Ev
  virtual void  v83(); // _ZN10S1472C3_nt3v83Ev
  virtual void  v84(); // _ZN10S1472C3_nt3v84Ev
  virtual void  v85(); // _ZN10S1472C3_nt3v85Ev
  virtual void  v86(); // _ZN10S1472C3_nt3v86Ev
  virtual void  v87(); // _ZN10S1472C3_nt3v87Ev
  virtual void  v88(); // _ZN10S1472C3_nt3v88Ev
  S1472C3_nt(); // tgen
};
//SIG(-1 S1472C3_nt) C1{ BC2{ vd 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 v84 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1472C3_nt ::~S1472C3_nt(){ note_dtor("S1472C3_nt", this);}
void  S1472C3_nt ::v69(){vfunc_called(this, "_ZN10S1472C3_nt3v69Ev");}
void  S1472C3_nt ::v70(){vfunc_called(this, "_ZN10S1472C3_nt3v70Ev");}
void  S1472C3_nt ::v71(){vfunc_called(this, "_ZN10S1472C3_nt3v71Ev");}
void  S1472C3_nt ::v72(){vfunc_called(this, "_ZN10S1472C3_nt3v72Ev");}
void  S1472C3_nt ::v73(){vfunc_called(this, "_ZN10S1472C3_nt3v73Ev");}
void  S1472C3_nt ::v74(){vfunc_called(this, "_ZN10S1472C3_nt3v74Ev");}
void  S1472C3_nt ::v75(){vfunc_called(this, "_ZN10S1472C3_nt3v75Ev");}
void  S1472C3_nt ::v76(){vfunc_called(this, "_ZN10S1472C3_nt3v76Ev");}
void  S1472C3_nt ::v77(){vfunc_called(this, "_ZN10S1472C3_nt3v77Ev");}
void  S1472C3_nt ::v78(){vfunc_called(this, "_ZN10S1472C3_nt3v78Ev");}
void  S1472C3_nt ::v79(){vfunc_called(this, "_ZN10S1472C3_nt3v79Ev");}
void  S1472C3_nt ::v80(){vfunc_called(this, "_ZN10S1472C3_nt3v80Ev");}
void  S1472C3_nt ::v81(){vfunc_called(this, "_ZN10S1472C3_nt3v81Ev");}
void  S1472C3_nt ::v82(){vfunc_called(this, "_ZN10S1472C3_nt3v82Ev");}
void  S1472C3_nt ::v83(){vfunc_called(this, "_ZN10S1472C3_nt3v83Ev");}
void  S1472C3_nt ::v84(){vfunc_called(this, "_ZN10S1472C3_nt3v84Ev");}
void  S1472C3_nt ::v85(){vfunc_called(this, "_ZN10S1472C3_nt3v85Ev");}
void  S1472C3_nt ::v86(){vfunc_called(this, "_ZN10S1472C3_nt3v86Ev");}
void  S1472C3_nt ::v87(){vfunc_called(this, "_ZN10S1472C3_nt3v87Ev");}
void  S1472C3_nt ::v88(){vfunc_called(this, "_ZN10S1472C3_nt3v88Ev");}
S1472C3_nt ::S1472C3_nt(){ note_ctor("S1472C3_nt", this);} // tgen

//skip512 S1472C3_nt

#else // __cplusplus

extern void _ZN10S1472C3_ntC1Ev();
extern void _ZN10S1472C3_ntD1Ev();
Name_Map name_map_S1472C3_nt[] = {
  NSPAIR(_ZN10S1472C3_ntC1Ev),
  NSPAIR(_ZN10S1472C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1472C4;
extern VTBL_ENTRY _ZTI7S1472C4[];
extern  VTBL_ENTRY _ZTV7S1472C4[];
static Base_Class bases_S1472C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1472C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI10S1472C3_nt[];
extern void _ZN10S1472C3_ntD1Ev();
extern void _ZN10S1472C3_ntD0Ev();
extern void _ZN7S1472C42v5Ev();
extern void _ZN7S1472C42v6Ev();
extern void _ZN7S1472C42v7Ev();
extern void _ZN7S1472C42v8Ev();
extern void _ZN7S1472C42v9Ev();
extern void _ZN7S1472C43v10Ev();
extern void _ZN7S1472C43v11Ev();
extern void _ZN7S1472C43v12Ev();
extern void _ZN7S1472C43v13Ev();
extern void _ZN7S1472C43v14Ev();
extern void _ZN7S1472C43v15Ev();
extern void _ZN7S1472C43v16Ev();
extern void _ZN7S1472C43v17Ev();
extern void _ZN7S1472C43v18Ev();
extern void _ZN7S1472C43v19Ev();
extern void _ZN7S1472C43v20Ev();
extern void _ZN7S1472C43v21Ev();
extern void _ZN7S1472C43v22Ev();
extern void _ZN7S1472C43v23Ev();
extern void _ZN7S1472C43v24Ev();
extern void _ZN7S1472C43v25Ev();
extern void _ZN7S1472C43v26Ev();
extern void _ZN7S1472C43v27Ev();
extern void _ZN7S1472C43v28Ev();
extern void _ZN7S1472C43v29Ev();
extern void _ZN7S1472C43v30Ev();
extern void _ZN7S1472C43v31Ev();
extern void _ZN7S1472C43v32Ev();
extern void _ZN7S1472C43v33Ev();
extern void _ZN7S1472C43v34Ev();
extern void _ZN7S1472C43v35Ev();
extern void _ZN7S1472C43v36Ev();
extern void _ZN7S1472C43v37Ev();
extern void _ZN7S1472C43v38Ev();
extern void _ZN7S1472C43v39Ev();
extern void _ZN7S1472C43v40Ev();
extern void _ZN7S1472C43v41Ev();
extern void _ZN7S1472C43v42Ev();
extern void _ZN7S1472C43v43Ev();
extern void _ZN7S1472C43v44Ev();
extern void _ZN7S1472C43v45Ev();
extern void _ZN7S1472C43v46Ev();
extern void _ZN7S1472C43v47Ev();
extern void _ZN7S1472C43v48Ev();
extern void _ZN7S1472C43v49Ev();
extern void _ZN7S1472C43v50Ev();
extern void _ZN7S1472C43v51Ev();
extern void _ZN7S1472C43v52Ev();
extern void _ZN7S1472C43v53Ev();
extern void _ZN7S1472C43v54Ev();
extern void _ZN7S1472C43v55Ev();
extern void _ZN7S1472C43v56Ev();
extern void _ZN7S1472C43v57Ev();
extern void _ZN7S1472C43v58Ev();
extern void _ZN7S1472C43v59Ev();
extern void _ZN7S1472C43v60Ev();
extern void _ZN7S1472C43v61Ev();
extern void _ZN7S1472C43v62Ev();
extern void _ZN7S1472C43v63Ev();
extern void _ZN7S1472C43v64Ev();
extern void _ZN7S1472C43v65Ev();
extern void _ZN7S1472C43v66Ev();
extern void _ZN7S1472C43v67Ev();
extern void _ZN7S1472C43v68Ev();
extern void _ZN10S1472C3_nt3v69Ev();
extern void _ZN10S1472C3_nt3v70Ev();
extern void _ZN10S1472C3_nt3v71Ev();
extern void _ZN10S1472C3_nt3v72Ev();
extern void _ZN10S1472C3_nt3v73Ev();
extern void _ZN10S1472C3_nt3v74Ev();
extern void _ZN10S1472C3_nt3v75Ev();
extern void _ZN10S1472C3_nt3v76Ev();
extern void _ZN10S1472C3_nt3v77Ev();
extern void _ZN10S1472C3_nt3v78Ev();
extern void _ZN10S1472C3_nt3v79Ev();
extern void _ZN10S1472C3_nt3v80Ev();
extern void _ZN10S1472C3_nt3v81Ev();
extern void _ZN10S1472C3_nt3v82Ev();
extern void _ZN10S1472C3_nt3v83Ev();
extern void _ZN10S1472C3_nt3v84Ev();
extern void _ZN10S1472C3_nt3v85Ev();
extern void _ZN10S1472C3_nt3v86Ev();
extern void _ZN10S1472C3_nt3v87Ev();
extern void _ZN10S1472C3_nt3v88Ev();
static  VTBL_ENTRY vtc_S1472C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1472C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1472C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v68Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v88Ev,
};
extern VTBL_ENTRY _ZTI10S1472C3_nt[];
VTBL_ENTRY *P__ZTI10S1472C3_nt = _ZTI10S1472C3_nt; 
extern  VTBL_ENTRY _ZTV10S1472C3_nt[];
Class_Descriptor cd_S1472C3_nt = {  "S1472C3_nt", // class name
  bases_S1472C3_nt, 1,
  &(vtc_S1472C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI10S1472C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1472C3_nt),88, //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  S1472C2_nt  : S1472C3_nt {
  virtual  ~S1472C2_nt(); // _ZN10S1472C2_ntD1Ev
  virtual void  v89(); // _ZN10S1472C2_nt3v89Ev
  virtual void  v90(); // _ZN10S1472C2_nt3v90Ev
  S1472C2_nt(); // tgen
};
//SIG(-1 S1472C2_nt) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2}


 S1472C2_nt ::~S1472C2_nt(){ note_dtor("S1472C2_nt", this);}
void  S1472C2_nt ::v89(){vfunc_called(this, "_ZN10S1472C2_nt3v89Ev");}
void  S1472C2_nt ::v90(){vfunc_called(this, "_ZN10S1472C2_nt3v90Ev");}
S1472C2_nt ::S1472C2_nt(){ note_ctor("S1472C2_nt", this);} // tgen

//skip512 S1472C2_nt

#else // __cplusplus

extern void _ZN10S1472C2_ntC1Ev();
extern void _ZN10S1472C2_ntD1Ev();
Name_Map name_map_S1472C2_nt[] = {
  NSPAIR(_ZN10S1472C2_ntC1Ev),
  NSPAIR(_ZN10S1472C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1472C4;
extern VTBL_ENTRY _ZTI7S1472C4[];
extern  VTBL_ENTRY _ZTV7S1472C4[];
extern Class_Descriptor cd_S1472C3_nt;
extern VTBL_ENTRY _ZTI10S1472C3_nt[];
extern  VTBL_ENTRY _ZTV10S1472C3_nt[];
static Base_Class bases_S1472C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1472C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1472C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI10S1472C2_nt[];
extern void _ZN10S1472C2_ntD1Ev();
extern void _ZN10S1472C2_ntD0Ev();
extern void _ZN7S1472C42v5Ev();
extern void _ZN7S1472C42v6Ev();
extern void _ZN7S1472C42v7Ev();
extern void _ZN7S1472C42v8Ev();
extern void _ZN7S1472C42v9Ev();
extern void _ZN7S1472C43v10Ev();
extern void _ZN7S1472C43v11Ev();
extern void _ZN7S1472C43v12Ev();
extern void _ZN7S1472C43v13Ev();
extern void _ZN7S1472C43v14Ev();
extern void _ZN7S1472C43v15Ev();
extern void _ZN7S1472C43v16Ev();
extern void _ZN7S1472C43v17Ev();
extern void _ZN7S1472C43v18Ev();
extern void _ZN7S1472C43v19Ev();
extern void _ZN7S1472C43v20Ev();
extern void _ZN7S1472C43v21Ev();
extern void _ZN7S1472C43v22Ev();
extern void _ZN7S1472C43v23Ev();
extern void _ZN7S1472C43v24Ev();
extern void _ZN7S1472C43v25Ev();
extern void _ZN7S1472C43v26Ev();
extern void _ZN7S1472C43v27Ev();
extern void _ZN7S1472C43v28Ev();
extern void _ZN7S1472C43v29Ev();
extern void _ZN7S1472C43v30Ev();
extern void _ZN7S1472C43v31Ev();
extern void _ZN7S1472C43v32Ev();
extern void _ZN7S1472C43v33Ev();
extern void _ZN7S1472C43v34Ev();
extern void _ZN7S1472C43v35Ev();
extern void _ZN7S1472C43v36Ev();
extern void _ZN7S1472C43v37Ev();
extern void _ZN7S1472C43v38Ev();
extern void _ZN7S1472C43v39Ev();
extern void _ZN7S1472C43v40Ev();
extern void _ZN7S1472C43v41Ev();
extern void _ZN7S1472C43v42Ev();
extern void _ZN7S1472C43v43Ev();
extern void _ZN7S1472C43v44Ev();
extern void _ZN7S1472C43v45Ev();
extern void _ZN7S1472C43v46Ev();
extern void _ZN7S1472C43v47Ev();
extern void _ZN7S1472C43v48Ev();
extern void _ZN7S1472C43v49Ev();
extern void _ZN7S1472C43v50Ev();
extern void _ZN7S1472C43v51Ev();
extern void _ZN7S1472C43v52Ev();
extern void _ZN7S1472C43v53Ev();
extern void _ZN7S1472C43v54Ev();
extern void _ZN7S1472C43v55Ev();
extern void _ZN7S1472C43v56Ev();
extern void _ZN7S1472C43v57Ev();
extern void _ZN7S1472C43v58Ev();
extern void _ZN7S1472C43v59Ev();
extern void _ZN7S1472C43v60Ev();
extern void _ZN7S1472C43v61Ev();
extern void _ZN7S1472C43v62Ev();
extern void _ZN7S1472C43v63Ev();
extern void _ZN7S1472C43v64Ev();
extern void _ZN7S1472C43v65Ev();
extern void _ZN7S1472C43v66Ev();
extern void _ZN7S1472C43v67Ev();
extern void _ZN7S1472C43v68Ev();
extern void _ZN10S1472C3_nt3v69Ev();
extern void _ZN10S1472C3_nt3v70Ev();
extern void _ZN10S1472C3_nt3v71Ev();
extern void _ZN10S1472C3_nt3v72Ev();
extern void _ZN10S1472C3_nt3v73Ev();
extern void _ZN10S1472C3_nt3v74Ev();
extern void _ZN10S1472C3_nt3v75Ev();
extern void _ZN10S1472C3_nt3v76Ev();
extern void _ZN10S1472C3_nt3v77Ev();
extern void _ZN10S1472C3_nt3v78Ev();
extern void _ZN10S1472C3_nt3v79Ev();
extern void _ZN10S1472C3_nt3v80Ev();
extern void _ZN10S1472C3_nt3v81Ev();
extern void _ZN10S1472C3_nt3v82Ev();
extern void _ZN10S1472C3_nt3v83Ev();
extern void _ZN10S1472C3_nt3v84Ev();
extern void _ZN10S1472C3_nt3v85Ev();
extern void _ZN10S1472C3_nt3v86Ev();
extern void _ZN10S1472C3_nt3v87Ev();
extern void _ZN10S1472C3_nt3v88Ev();
extern void _ZN10S1472C2_nt3v89Ev();
extern void _ZN10S1472C2_nt3v90Ev();
static  VTBL_ENTRY vtc_S1472C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1472C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1472C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1472C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v68Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1472C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1472C2_nt3v90Ev,
};
extern VTBL_ENTRY _ZTI10S1472C2_nt[];
VTBL_ENTRY *P__ZTI10S1472C2_nt = _ZTI10S1472C2_nt; 
extern  VTBL_ENTRY _ZTV10S1472C2_nt[];
Class_Descriptor cd_S1472C2_nt = {  "S1472C2_nt", // class name
  bases_S1472C2_nt, 2,
  &(vtc_S1472C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI10S1472C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1472C2_nt),90, //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  S1472C8_nt  {
  char s1472c8f0[4];
  ::S1378C22 s1472c8f1;
  int s1472c8f2[2];
  void  mf1472c8(); // _ZN10S1472C8_nt8mf1472c8Ev
};
//SIG(-1 S1472C8_nt) C1{ m Fc[4] FC2{ BC3{ BC4{ m Fp Fi[2]}}} Fi[2]}


void  S1472C8_nt ::mf1472c8(){}

//skip512 S1472C8_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S1472C7_nt  : S1472C8_nt {
  void *s1472c7f0;
};
//SIG(-1 S1472C7_nt) C1{ BC2{ m Fc[4] FC3{ BC4{ BC5{ m Fp Fi[2]}}} Fi[2]} Fp}



//skip512 S1472C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S1472C8_nt;
static Base_Class bases_S1472C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1472C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S1472C1  : S1472C2_nt {
  ::S1472C7_nt s1472c1f0;
  virtual  ~S1472C1(); // _ZN7S1472C1D1Ev
  virtual void  v1(); // _ZN7S1472C12v1Ev
  virtual void  v2(); // _ZN7S1472C12v2Ev
  virtual void  v3(); // _ZN7S1472C12v3Ev
  virtual void  v4(); // _ZN7S1472C12v4Ev
  S1472C1(); // tgen
};
//SIG(1 S1472C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v89 v90} vd v1 v2 v3 v4 FC7{ BC8{ m Fc[4] FC9{ BC10{ BC11{ m Fp Fi[2]}}} Fi[2]} Fp}}


 S1472C1 ::~S1472C1(){ note_dtor("S1472C1", this);}
void  S1472C1 ::v1(){vfunc_called(this, "_ZN7S1472C12v1Ev");}
void  S1472C1 ::v2(){vfunc_called(this, "_ZN7S1472C12v2Ev");}
void  S1472C1 ::v3(){vfunc_called(this, "_ZN7S1472C12v3Ev");}
void  S1472C1 ::v4(){vfunc_called(this, "_ZN7S1472C12v4Ev");}
S1472C1 ::S1472C1(){ note_ctor("S1472C1", this);} // tgen

static void Test_S1472C1()
{
  extern Class_Descriptor cd_S1472C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,24)];
    init_test(&cd_S1472C1, buf);
    S1472C1 *dp, &lv = *(dp=new (buf) S1472C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S1472C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1472C1)");
    check_base_class_offset(lv, (S1472C4*)(S1472C3_nt*)(S1472C2_nt*), 0, "S1472C1");
    check_base_class_offset(lv, (S1472C3_nt*)(S1472C2_nt*), 0, "S1472C1");
    check_base_class_offset(lv, (S1472C2_nt*), 0, "S1472C1");
    check_field_offset(lv, s1472c1f0, ABISELECT(104,64), "S1472C1.s1472c1f0");
    test_class_info(&lv, &cd_S1472C1);
    dp->~S1472C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1472C1(Test_S1472C1, "S1472C1", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN7S1472C1C1Ev();
extern void _ZN7S1472C1D1Ev();
Name_Map name_map_S1472C1[] = {
  NSPAIR(_ZN7S1472C1C1Ev),
  NSPAIR(_ZN7S1472C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1472C4;
extern VTBL_ENTRY _ZTI7S1472C4[];
extern  VTBL_ENTRY _ZTV7S1472C4[];
extern Class_Descriptor cd_S1472C3_nt;
extern VTBL_ENTRY _ZTI10S1472C3_nt[];
extern  VTBL_ENTRY _ZTV10S1472C3_nt[];
extern Class_Descriptor cd_S1472C2_nt;
extern VTBL_ENTRY _ZTI10S1472C2_nt[];
extern  VTBL_ENTRY _ZTV10S1472C2_nt[];
static Base_Class bases_S1472C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1472C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1472C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1472C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1472C1[];
extern void _ZN7S1472C1D1Ev();
extern void _ZN7S1472C1D0Ev();
extern void _ZN7S1472C42v5Ev();
extern void _ZN7S1472C42v6Ev();
extern void _ZN7S1472C42v7Ev();
extern void _ZN7S1472C42v8Ev();
extern void _ZN7S1472C42v9Ev();
extern void _ZN7S1472C43v10Ev();
extern void _ZN7S1472C43v11Ev();
extern void _ZN7S1472C43v12Ev();
extern void _ZN7S1472C43v13Ev();
extern void _ZN7S1472C43v14Ev();
extern void _ZN7S1472C43v15Ev();
extern void _ZN7S1472C43v16Ev();
extern void _ZN7S1472C43v17Ev();
extern void _ZN7S1472C43v18Ev();
extern void _ZN7S1472C43v19Ev();
extern void _ZN7S1472C43v20Ev();
extern void _ZN7S1472C43v21Ev();
extern void _ZN7S1472C43v22Ev();
extern void _ZN7S1472C43v23Ev();
extern void _ZN7S1472C43v24Ev();
extern void _ZN7S1472C43v25Ev();
extern void _ZN7S1472C43v26Ev();
extern void _ZN7S1472C43v27Ev();
extern void _ZN7S1472C43v28Ev();
extern void _ZN7S1472C43v29Ev();
extern void _ZN7S1472C43v30Ev();
extern void _ZN7S1472C43v31Ev();
extern void _ZN7S1472C43v32Ev();
extern void _ZN7S1472C43v33Ev();
extern void _ZN7S1472C43v34Ev();
extern void _ZN7S1472C43v35Ev();
extern void _ZN7S1472C43v36Ev();
extern void _ZN7S1472C43v37Ev();
extern void _ZN7S1472C43v38Ev();
extern void _ZN7S1472C43v39Ev();
extern void _ZN7S1472C43v40Ev();
extern void _ZN7S1472C43v41Ev();
extern void _ZN7S1472C43v42Ev();
extern void _ZN7S1472C43v43Ev();
extern void _ZN7S1472C43v44Ev();
extern void _ZN7S1472C43v45Ev();
extern void _ZN7S1472C43v46Ev();
extern void _ZN7S1472C43v47Ev();
extern void _ZN7S1472C43v48Ev();
extern void _ZN7S1472C43v49Ev();
extern void _ZN7S1472C43v50Ev();
extern void _ZN7S1472C43v51Ev();
extern void _ZN7S1472C43v52Ev();
extern void _ZN7S1472C43v53Ev();
extern void _ZN7S1472C43v54Ev();
extern void _ZN7S1472C43v55Ev();
extern void _ZN7S1472C43v56Ev();
extern void _ZN7S1472C43v57Ev();
extern void _ZN7S1472C43v58Ev();
extern void _ZN7S1472C43v59Ev();
extern void _ZN7S1472C43v60Ev();
extern void _ZN7S1472C43v61Ev();
extern void _ZN7S1472C43v62Ev();
extern void _ZN7S1472C43v63Ev();
extern void _ZN7S1472C43v64Ev();
extern void _ZN7S1472C43v65Ev();
extern void _ZN7S1472C43v66Ev();
extern void _ZN7S1472C43v67Ev();
extern void _ZN7S1472C43v68Ev();
extern void _ZN10S1472C3_nt3v69Ev();
extern void _ZN10S1472C3_nt3v70Ev();
extern void _ZN10S1472C3_nt3v71Ev();
extern void _ZN10S1472C3_nt3v72Ev();
extern void _ZN10S1472C3_nt3v73Ev();
extern void _ZN10S1472C3_nt3v74Ev();
extern void _ZN10S1472C3_nt3v75Ev();
extern void _ZN10S1472C3_nt3v76Ev();
extern void _ZN10S1472C3_nt3v77Ev();
extern void _ZN10S1472C3_nt3v78Ev();
extern void _ZN10S1472C3_nt3v79Ev();
extern void _ZN10S1472C3_nt3v80Ev();
extern void _ZN10S1472C3_nt3v81Ev();
extern void _ZN10S1472C3_nt3v82Ev();
extern void _ZN10S1472C3_nt3v83Ev();
extern void _ZN10S1472C3_nt3v84Ev();
extern void _ZN10S1472C3_nt3v85Ev();
extern void _ZN10S1472C3_nt3v86Ev();
extern void _ZN10S1472C3_nt3v87Ev();
extern void _ZN10S1472C3_nt3v88Ev();
extern void _ZN10S1472C2_nt3v89Ev();
extern void _ZN10S1472C2_nt3v90Ev();
extern void _ZN7S1472C12v1Ev();
extern void _ZN7S1472C12v2Ev();
extern void _ZN7S1472C12v3Ev();
extern void _ZN7S1472C12v4Ev();
static  VTBL_ENTRY vtc_S1472C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1472C1[0]),
  (VTBL_ENTRY)&_ZN7S1472C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1472C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1472C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1472C43v68Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1472C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1472C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1472C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN7S1472C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1472C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1472C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1472C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1472C1[];
extern  VTBL_ENTRY _ZTV7S1472C1[];
Class_Descriptor cd_S1472C1 = {  "S1472C1", // class name
  bases_S1472C1, 3,
  &(vtc_S1472C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI7S1472C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1472C1),94, //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  S19917C2  {
  __tsi64 s19917c2f0;
  int s19917c2f1;
  __tsi64 s19917c2f2;
  void *s19917c2f3;
  int s19917c2f4;
  void *s19917c2f5;
  long double s19917c2f6;
  __tsi64 s19917c2f7[6];
  void *s19917c2f8;
  virtual void  v1(); // _ZN8S19917C22v1Ev
  ~S19917C2(); // tgen
  S19917C2(); // tgen
};
//SIG(-1 S19917C2) C1{ v1 FL Fi FL Fp Fi Fp FD FL[6] Fp}


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

static void Test_S19917C2()
{
  extern Class_Descriptor cd_S19917C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,26)];
    init_test(&cd_S19917C2, buf);
    S19917C2 *dp, &lv = *(dp=new (buf) S19917C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,100), "sizeof(S19917C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19917C2)");
    check_field_offset(lv, s19917c2f0, ABISELECT(8,4), "S19917C2.s19917c2f0");
    check_field_offset(lv, s19917c2f1, ABISELECT(16,12), "S19917C2.s19917c2f1");
    check_field_offset(lv, s19917c2f2, ABISELECT(24,16), "S19917C2.s19917c2f2");
    check_field_offset(lv, s19917c2f3, ABISELECT(32,24), "S19917C2.s19917c2f3");
    check_field_offset(lv, s19917c2f4, ABISELECT(40,28), "S19917C2.s19917c2f4");
    check_field_offset(lv, s19917c2f5, ABISELECT(48,32), "S19917C2.s19917c2f5");
    check_field_offset(lv, s19917c2f6, ABISELECT(64,36), "S19917C2.s19917c2f6");
    check_field_offset(lv, s19917c2f7, ABISELECT(80,48), "S19917C2.s19917c2f7");
    check_field_offset(lv, s19917c2f8, ABISELECT(128,96), "S19917C2.s19917c2f8");
    test_class_info(&lv, &cd_S19917C2);
    dp->~S19917C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19917C2(Test_S19917C2, "S19917C2", ABISELECT(144,100));

#else // __cplusplus

extern void _ZN8S19917C2C1Ev();
extern void _ZN8S19917C2D1Ev();
Name_Map name_map_S19917C2[] = {
  NSPAIR(_ZN8S19917C2C1Ev),
  NSPAIR(_ZN8S19917C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19917C2[];
extern void _ZN8S19917C22v1Ev();
static  VTBL_ENTRY vtc_S19917C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C2[0]),
  (VTBL_ENTRY)&_ZN8S19917C22v1Ev,
};
extern VTBL_ENTRY _ZTI8S19917C2[];
extern  VTBL_ENTRY _ZTV8S19917C2[];
Class_Descriptor cd_S19917C2 = {  "S19917C2", // class name
  0,0,//no base classes
  &(vtc_S19917C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,100), // object size
  NSPAIRA(_ZTI8S19917C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19917C2),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  S19917C5  {
  void *s19917c5f0;
  long double s19917c5f1;
  int s19917c5f2;
  void *s19917c5f3;
  void  mf19917c5(); // _ZN8S19917C59mf19917c5Ev
  virtual  ~S19917C5(); // _ZN8S19917C5D1Ev
  S19917C5(); // tgen
};
//SIG(-1 S19917C5) C1{ vd m Fp FD Fi Fp}


void  S19917C5 ::mf19917c5(){}
 S19917C5 ::~S19917C5(){ note_dtor("S19917C5", this);}
S19917C5 ::S19917C5(){ note_ctor("S19917C5", this);} // tgen

static void Test_S19917C5()
{
  extern Class_Descriptor cd_S19917C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,8)];
    init_test(&cd_S19917C5, buf);
    S19917C5 *dp, &lv = *(dp=new (buf) S19917C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S19917C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19917C5)");
    check_field_offset(lv, s19917c5f0, ABISELECT(8,4), "S19917C5.s19917c5f0");
    check_field_offset(lv, s19917c5f1, ABISELECT(16,8), "S19917C5.s19917c5f1");
    check_field_offset(lv, s19917c5f2, ABISELECT(32,20), "S19917C5.s19917c5f2");
    check_field_offset(lv, s19917c5f3, ABISELECT(40,24), "S19917C5.s19917c5f3");
    test_class_info(&lv, &cd_S19917C5);
    dp->~S19917C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19917C5(Test_S19917C5, "S19917C5", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S19917C5C1Ev();
extern void _ZN8S19917C5D1Ev();
Name_Map name_map_S19917C5[] = {
  NSPAIR(_ZN8S19917C5C1Ev),
  NSPAIR(_ZN8S19917C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19917C5[];
extern void _ZN8S19917C5D1Ev();
extern void _ZN8S19917C5D0Ev();
static  VTBL_ENTRY vtc_S19917C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C5[0]),
  (VTBL_ENTRY)&_ZN8S19917C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C5D0Ev,
};
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
Class_Descriptor cd_S19917C5 = {  "S19917C5", // class name
  0,0,//no base classes
  &(vtc_S19917C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S19917C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19917C5),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  S19917C4  : S19917C5 {
  int s19917c4f0;
  void *s19917c4f1[4];
  long double s19917c4f2[5];
  void *s19917c4f3[2];
  ::S19917C5 s19917c4f4;
  long s19917c4f5[3];
  virtual  ~S19917C4(); // _ZN8S19917C4D1Ev
  virtual void  v6(); // _ZN8S19917C42v6Ev
  virtual void  v7(); // _ZN8S19917C42v7Ev
  S19917C4(); // tgen
};
//SIG(-1 S19917C4) C1{ BC2{ vd m Fp FD Fi Fp} vd v1 v2 Fi Fp[4] FD[5] Fp[2] FC2 Fl[3]}


 S19917C4 ::~S19917C4(){ note_dtor("S19917C4", this);}
void  S19917C4 ::v6(){vfunc_called(this, "_ZN8S19917C42v6Ev");}
void  S19917C4 ::v7(){vfunc_called(this, "_ZN8S19917C42v7Ev");}
S19917C4 ::S19917C4(){ note_ctor("S19917C4", this);} // tgen

static void Test_S19917C4()
{
  extern Class_Descriptor cd_S19917C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,40)];
    init_test(&cd_S19917C4, buf);
    S19917C4 *dp, &lv = *(dp=new (buf) S19917C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,156), "sizeof(S19917C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19917C4)");
    check_base_class_offset(lv, (S19917C5*), 0, "S19917C4");
    check_field_offset(lv, s19917c4f0, ABISELECT(48,28), "S19917C4.s19917c4f0");
    check_field_offset(lv, s19917c4f1, ABISELECT(56,32), "S19917C4.s19917c4f1");
    check_field_offset(lv, s19917c4f2, ABISELECT(96,48), "S19917C4.s19917c4f2");
    check_field_offset(lv, s19917c4f3, ABISELECT(176,108), "S19917C4.s19917c4f3");
    check_field_offset(lv, s19917c4f4, ABISELECT(192,116), "S19917C4.s19917c4f4");
    check_field_offset(lv, s19917c4f5, ABISELECT(240,144), "S19917C4.s19917c4f5");
    test_class_info(&lv, &cd_S19917C4);
    dp->~S19917C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19917C4(Test_S19917C4, "S19917C4", ABISELECT(272,156));

#else // __cplusplus

extern void _ZN8S19917C4C1Ev();
extern void _ZN8S19917C4D1Ev();
Name_Map name_map_S19917C4[] = {
  NSPAIR(_ZN8S19917C4C1Ev),
  NSPAIR(_ZN8S19917C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
static Base_Class bases_S19917C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S19917C4[];
extern void _ZN8S19917C4D1Ev();
extern void _ZN8S19917C4D0Ev();
extern void _ZN8S19917C42v6Ev();
extern void _ZN8S19917C42v7Ev();
static  VTBL_ENTRY vtc_S19917C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C4[0]),
  (VTBL_ENTRY)&_ZN8S19917C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19917C42v7Ev,
};
extern VTBL_ENTRY _ZTI8S19917C4[];
extern  VTBL_ENTRY _ZTV8S19917C4[];
Class_Descriptor cd_S19917C4 = {  "S19917C4", // class name
  bases_S19917C4, 1,
  &(vtc_S19917C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,156), // object size
  NSPAIRA(_ZTI8S19917C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19917C4),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  S19917C3  {
  ::S19917C4 s19917c3f0;
  long double s19917c3f1[3];
  void *s19917c3f2;
  void  mf19917c3(); // _ZN8S19917C39mf19917c3Ev
  virtual  ~S19917C3(); // _ZN8S19917C3D1Ev
  S19917C3(); // tgen
};
//SIG(-1 S19917C3) C1{ vd m FC2{ BC3{ vd m Fp FD Fi Fp} vd v1 v2 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} FD[3] Fp}


void  S19917C3 ::mf19917c3(){}
 S19917C3 ::~S19917C3(){ note_dtor("S19917C3", this);}
S19917C3 ::S19917C3(){ note_ctor("S19917C3", this);} // tgen

static void Test_S19917C3()
{
  extern Class_Descriptor cd_S19917C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,51)];
    init_test(&cd_S19917C3, buf);
    S19917C3 *dp, &lv = *(dp=new (buf) S19917C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,200), "sizeof(S19917C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19917C3)");
    check_field_offset(lv, s19917c3f0, ABISELECT(16,4), "S19917C3.s19917c3f0");
    check_field_offset(lv, s19917c3f1, ABISELECT(288,160), "S19917C3.s19917c3f1");
    check_field_offset(lv, s19917c3f2, ABISELECT(336,196), "S19917C3.s19917c3f2");
    test_class_info(&lv, &cd_S19917C3);
    dp->~S19917C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19917C3(Test_S19917C3, "S19917C3", ABISELECT(352,200));

#else // __cplusplus

extern void _ZN8S19917C3C1Ev();
extern void _ZN8S19917C3D1Ev();
Name_Map name_map_S19917C3[] = {
  NSPAIR(_ZN8S19917C3C1Ev),
  NSPAIR(_ZN8S19917C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19917C3[];
extern void _ZN8S19917C3D1Ev();
extern void _ZN8S19917C3D0Ev();
static  VTBL_ENTRY vtc_S19917C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C3[0]),
  (VTBL_ENTRY)&_ZN8S19917C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C3D0Ev,
};
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
Class_Descriptor cd_S19917C3 = {  "S19917C3", // class name
  0,0,//no base classes
  &(vtc_S19917C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,200), // object size
  NSPAIRA(_ZTI8S19917C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19917C3),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  S19917C9  : S19917C5 {
  __tsi64 s19917c9f0[2];
  ::S19917C5 s19917c9f1;
  int s19917c9f2[3];
  void *s19917c9f3[4];
  ::S19917C4 s19917c9f4;
  char s19917c9f5:5;
  virtual void  v2(); // _ZN8S19917C92v2Ev
  virtual void  v3(); // _ZN8S19917C92v3Ev
  ~S19917C9(); // tgen
  S19917C9(); // tgen
};
//SIG(-1 S19917C9) C1{ BC2{ vd m Fp FD Fi Fp} v1 v2 FL[2] FC2 Fi[3] Fp[4] FC3{ BC2 vd v3 v4 Fi Fp[4] FD[5] Fp[2] FC2 Fl[3]} Fc:5}


void  S19917C9 ::v2(){vfunc_called(this, "_ZN8S19917C92v2Ev");}
void  S19917C9 ::v3(){vfunc_called(this, "_ZN8S19917C92v3Ev");}
S19917C9 ::~S19917C9(){ note_dtor("S19917C9", this);} // tgen
S19917C9 ::S19917C9(){ note_ctor("S19917C9", this);} // tgen

static void Test_S19917C9()
{
  extern Class_Descriptor cd_S19917C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(29,66)];
    init_test(&cd_S19917C9, buf);
    S19917C9 *dp, &lv = *(dp=new (buf) S19917C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,260), "sizeof(S19917C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19917C9)");
    check_base_class_offset(lv, (S19917C5*), 0, "S19917C9");
    check_field_offset(lv, s19917c9f0, ABISELECT(48,28), "S19917C9.s19917c9f0");
    check_field_offset(lv, s19917c9f1, ABISELECT(64,44), "S19917C9.s19917c9f1");
    check_field_offset(lv, s19917c9f2, ABISELECT(112,72), "S19917C9.s19917c9f2");
    check_field_offset(lv, s19917c9f3, ABISELECT(128,84), "S19917C9.s19917c9f3");
    check_field_offset(lv, s19917c9f4, ABISELECT(160,100), "S19917C9.s19917c9f4");
    set_bf_and_test(lv, s19917c9f5, ABISELECT(432,256), 0, 5, 1, "S19917C9");
    set_bf_and_test(lv, s19917c9f5, ABISELECT(432,256), 0, 5, hide_sll(1LL<<4), "S19917C9");
    test_class_info(&lv, &cd_S19917C9);
    dp->~S19917C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19917C9(Test_S19917C9, "S19917C9", ABISELECT(448,260));

#else // __cplusplus

extern void _ZN8S19917C9C1Ev();
extern void _ZN8S19917C9D1Ev();
Name_Map name_map_S19917C9[] = {
  NSPAIR(_ZN8S19917C9C1Ev),
  NSPAIR(_ZN8S19917C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
static Base_Class bases_S19917C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S19917C9[];
extern void _ZN8S19917C9D1Ev();
extern void _ZN8S19917C9D0Ev();
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY vtc_S19917C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C9[0]),
  (VTBL_ENTRY)&_ZN8S19917C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern VTBL_ENTRY _ZTI8S19917C9[];
extern  VTBL_ENTRY _ZTV8S19917C9[];
Class_Descriptor cd_S19917C9 = {  "S19917C9", // class name
  bases_S19917C9, 1,
  &(vtc_S19917C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,260), // object size
  NSPAIRA(_ZTI8S19917C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19917C9),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  S19917C8  : virtual S19917C9 , S19917C5 {
  int s19917c8f0;
  virtual  ~S19917C8(); // _ZN8S19917C8D2Ev
  virtual void  v4(); // _ZN8S19917C82v4Ev
  S19917C8(); // tgen
};
//SIG(-1 S19917C8) C1{ VBC2{ BC3{ vd m Fp FD Fi Fp} v2 v3 FL[2] FC3 Fi[3] Fp[4] FC4{ BC3 vd v4 v5 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} Fc:5} BC3 vd v1 Fi}


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

static void Test_S19917C8()
{
  extern Class_Descriptor cd_S19917C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,74)];
    init_test(&cd_S19917C8, buf);
    S19917C8 *dp, &lv = *(dp=new (buf) S19917C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,292), "sizeof(S19917C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19917C8)");
    check_base_class_offset(lv, (S19917C5*)(S19917C9*), ABISELECT(64,32), "S19917C8");
    check_base_class_offset(lv, (S19917C9*), ABISELECT(64,32), "S19917C8");
    /*is_ambiguous_... S19917C8::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*), 0, "S19917C8");
    check_field_offset(lv, s19917c8f0, ABISELECT(48,28), "S19917C8.s19917c8f0");
    test_class_info(&lv, &cd_S19917C8);
    dp->~S19917C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19917C8(Test_S19917C8, "S19917C8", ABISELECT(512,292));

#else // __cplusplus

extern void _ZN8S19917C8C1Ev();
extern void _ZN8S19917C8D2Ev();
Name_Map name_map_S19917C8[] = {
  NSPAIR(_ZN8S19917C8C1Ev),
  NSPAIR(_ZN8S19917C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C9;
extern VTBL_ENTRY _ZTI8S19917C9[];
extern  VTBL_ENTRY _ZTV8S19917C9[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
static Base_Class bases_S19917C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    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
    1, //immediately_derived
  0, 0},
  {&cd_S19917C9,    ABISELECT(64,32), //bcp->offset
    6, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19917C8[];
extern void _ZN8S19917C8D1Ev();
extern void _ZN8S19917C8D0Ev();
extern void _ZN8S19917C82v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S19917C8D1Ev,_ZThn32_N8S19917C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S19917C8D0Ev,_ZThn32_N8S19917C8D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY vtc_S19917C8[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&_ZN8S19917C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern VTBL_ENTRY _ZTV8S19917C8[];
static  VTT_ENTRY vtt_S19917C8[] = {
  {&(_ZTV8S19917C8[3]),  3,15},
  {&(_ZTV8S19917C8[11]),  11,15},
};
extern VTBL_ENTRY _ZTI8S19917C8[];
extern  VTBL_ENTRY _ZTV8S19917C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19917C8[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19917C8D0Ev,_ZThn32_N8S19917C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19917C8D1Ev,_ZThn32_N8S19917C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19917C8 = {  "S19917C8", // class name
  bases_S19917C8, 3,
  &(vtc_S19917C8[0]), // expected_vtbl_contents
  &(vtt_S19917C8[0]), // expected_vtt_contents
  ABISELECT(512,292), // object size
  NSPAIRA(_ZTI8S19917C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19917C8),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19917C8),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19917C11  {
  __tsi64 s19917c11f0;
  int s19917c11f1;
  ::S19917C4 s19917c11f2;
  int s19917c11f3;
  ::S19917C5 s19917c11f4;
  void *s19917c11f5;
  int s19917c11f6;
  ::S19917C4 s19917c11f7;
  long double s19917c11f8;
  virtual  ~S19917C11(); // _ZN9S19917C11D1Ev
  virtual void  v5(); // _ZN9S19917C112v5Ev
  S19917C11(); // tgen
};
//SIG(-1 S19917C11) C1{ vd v1 FL Fi FC2{ BC3{ vd m Fp FD Fi Fp} vd v2 v3 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} Fi FC3 Fp Fi FC2 FD}


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

static void Test_S19917C11()
{
  extern Class_Descriptor cd_S19917C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(43,96)];
    init_test(&cd_S19917C11, buf);
    S19917C11 *dp, &lv = *(dp=new (buf) S19917C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(672,380), "sizeof(S19917C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19917C11)");
    check_field_offset(lv, s19917c11f0, ABISELECT(8,4), "S19917C11.s19917c11f0");
    check_field_offset(lv, s19917c11f1, ABISELECT(16,12), "S19917C11.s19917c11f1");
    check_field_offset(lv, s19917c11f2, ABISELECT(32,16), "S19917C11.s19917c11f2");
    check_field_offset(lv, s19917c11f3, ABISELECT(304,172), "S19917C11.s19917c11f3");
    check_field_offset(lv, s19917c11f4, ABISELECT(320,176), "S19917C11.s19917c11f4");
    check_field_offset(lv, s19917c11f5, ABISELECT(368,204), "S19917C11.s19917c11f5");
    check_field_offset(lv, s19917c11f6, ABISELECT(376,208), "S19917C11.s19917c11f6");
    check_field_offset(lv, s19917c11f7, ABISELECT(384,212), "S19917C11.s19917c11f7");
    check_field_offset(lv, s19917c11f8, ABISELECT(656,368), "S19917C11.s19917c11f8");
    test_class_info(&lv, &cd_S19917C11);
    dp->~S19917C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19917C11(Test_S19917C11, "S19917C11", ABISELECT(672,380));

#else // __cplusplus

extern void _ZN9S19917C11C1Ev();
extern void _ZN9S19917C11D1Ev();
Name_Map name_map_S19917C11[] = {
  NSPAIR(_ZN9S19917C11C1Ev),
  NSPAIR(_ZN9S19917C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19917C11[];
extern void _ZN9S19917C11D1Ev();
extern void _ZN9S19917C11D0Ev();
extern void _ZN9S19917C112v5Ev();
static  VTBL_ENTRY vtc_S19917C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19917C11[0]),
  (VTBL_ENTRY)&_ZN9S19917C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19917C11D0Ev,
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
};
extern VTBL_ENTRY _ZTI9S19917C11[];
extern  VTBL_ENTRY _ZTV9S19917C11[];
Class_Descriptor cd_S19917C11 = {  "S19917C11", // class name
  0,0,//no base classes
  &(vtc_S19917C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(672,380), // object size
  NSPAIRA(_ZTI9S19917C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19917C11),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S19917C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19917C10  : virtual S19917C9 , S19917C8 , S19917C11 , virtual S19917C3 {
  ::S19917C12_nt s19917c10f0;
  long double s19917c10f1[10];
  ::S19917C8 s19917c10f2;
  ::S19917C11 s19917c10f3;
  int s19917c10f4;
  virtual  ~S19917C10(); // _ZN9S19917C10D2Ev
  S19917C10(); // tgen
};
//SIG(-1 S19917C10) C1{ VBC2{ BC3{ vd m Fp FD Fi Fp} v1 v2 FL[2] FC3 Fi[3] Fp[4] FC4{ BC3 vd v5 v6 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} Fc:5} BC5{ VBC2 BC3 vd v3 Fi} BC6{ vd v4 FL Fi FC4 Fi FC3 Fp Fi FC4 FD} VBC7{ vd m FC4 FD[3] Fp} vd FC8{} FD[10] FC5 FC6 Fi}


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

static void Test_S19917C10()
{
  extern Class_Descriptor cd_S19917C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(183,419)];
    init_test(&cd_S19917C10, buf);
    S19917C10 *dp, &lv = *(dp=new (buf) S19917C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2912,1672), "sizeof(S19917C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19917C10)");
    check_base_class_offset(lv, (S19917C5*)(S19917C9*), ABISELECT(2112,1212), "S19917C10");
    check_base_class_offset(lv, (S19917C9*), ABISELECT(2112,1212), "S19917C10");
    check_base_class_offset(lv, (S19917C9*)(S19917C8*), ABISELECT(2112,1212), "S19917C10");
    /*is_ambiguous_... S19917C8::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19917C8*), 0, "S19917C10");
    check_base_class_offset(lv, (S19917C8*), 0, "S19917C10");
    check_base_class_offset(lv, (S19917C11*), ABISELECT(64,32), "S19917C10");
    check_base_class_offset(lv, (S19917C3*), ABISELECT(2560,1472), "S19917C10");
    check_field_offset(lv, s19917c10f0, ABISELECT(736,412), "S19917C10.s19917c10f0");
    check_field_offset(lv, s19917c10f1, ABISELECT(752,416), "S19917C10.s19917c10f1");
    check_field_offset(lv, s19917c10f2, ABISELECT(912,536), "S19917C10.s19917c10f2");
    check_field_offset(lv, s19917c10f3, ABISELECT(1424,828), "S19917C10.s19917c10f3");
    check_field_offset(lv, s19917c10f4, ABISELECT(2096,1208), "S19917C10.s19917c10f4");
    test_class_info(&lv, &cd_S19917C10);
    dp->~S19917C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19917C10(Test_S19917C10, "S19917C10", ABISELECT(2912,1672));

#else // __cplusplus

extern void _ZN9S19917C10C1Ev();
extern void _ZN9S19917C10D2Ev();
Name_Map name_map_S19917C10[] = {
  NSPAIR(_ZN9S19917C10C1Ev),
  NSPAIR(_ZN9S19917C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C9;
extern VTBL_ENTRY _ZTI8S19917C9[];
extern  VTBL_ENTRY _ZTV8S19917C9[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C8;
extern VTBL_ENTRY _ZTI8S19917C8[];
extern  VTBL_ENTRY _ZTV8S19917C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19917C8[];
extern Class_Descriptor cd_S19917C11;
extern VTBL_ENTRY _ZTI9S19917C11[];
extern  VTBL_ENTRY _ZTV9S19917C11[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
static Base_Class bases_S19917C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    ABISELECT(2112,1212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19917C9,    ABISELECT(2112,1212), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //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_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19917C8,    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},
  {&cd_S19917C11,    ABISELECT(64,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19917C3,    ABISELECT(2560,1472), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19917C10[];
extern void _ZN9S19917C10D1Ev();
extern void _ZN9S19917C10D0Ev();
extern void _ZN8S19917C82v4Ev();
extern void ABISELECT(_ZThn64_N9S19917C10D1Ev,_ZThn32_N9S19917C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S19917C10D0Ev,_ZThn32_N9S19917C10D0Ev)();
extern void _ZN9S19917C112v5Ev();
extern void ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev)();
extern void ABISELECT(_ZThn2112_N9S19917C10D1Ev,_ZThn1212_N9S19917C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev)();
extern void ABISELECT(_ZThn2112_N9S19917C10D0Ev,_ZThn1212_N9S19917C10D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev)();
extern void ABISELECT(_ZThn2560_N9S19917C10D1Ev,_ZThn1472_N9S19917C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev)();
extern void ABISELECT(_ZThn2560_N9S19917C10D0Ev,_ZThn1472_N9S19917C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19917C10[] = {
  ABISELECT(2560,1472),
  ABISELECT(2112,1212),
  0,
  (VTBL_ENTRY)&(_ZTI9S19917C10[0]),
  (VTBL_ENTRY)&_ZN9S19917C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19917C10D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19917C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S19917C10D1Ev,_ZThn32_N9S19917C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S19917C10D0Ev,_ZThn32_N9S19917C10D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
  0,
  0,
  ABISELECT(-2112,-1212),
  ABISELECT(-2112,-1212),
  (VTBL_ENTRY)&(_ZTI9S19917C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
  ABISELECT(-2560,-1472),
  ABISELECT(-2560,-1472),
  (VTBL_ENTRY)&(_ZTI9S19917C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S19917C10[];
extern void _ZN8S19917C8D1Ev();
extern void _ZN8S19917C8D0Ev();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C8__9S19917C10[] = {
  ABISELECT(2112,1212),
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&_ZN8S19917C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev)();
extern void ABISELECT(_ZThn2112_N8S19917C8D1Ev,_ZThn1212_N8S19917C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev)();
extern void ABISELECT(_ZThn2112_N8S19917C8D0Ev,_ZThn1212_N8S19917C8D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__8S19917C8__9S19917C10[] = {
  0,
  0,
  ABISELECT(-2112,-1212),
  ABISELECT(-2112,-1212),
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
static  VTT_ENTRY vtt_S19917C10[] = {
  {&(_ZTV9S19917C10[4]),  4,26},
  {&(_tg__ZTV8S19917C8__9S19917C10[3]),  3,6},
  {&(_tg__ZTV8S19917C9__8S19917C8__9S19917C10[5]),  5,9},
  {&(_ZTV9S19917C10[17]),  17,26},
  {&(_ZTV9S19917C10[24]),  24,26},
};
extern VTBL_ENTRY _ZTI9S19917C10[];
extern  VTBL_ENTRY _ZTV9S19917C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19917C10[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S19917C8D0Ev,_ZThn1212_N8S19917C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S19917C8D1Ev,_ZThn1212_N8S19917C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N9S19917C10D0Ev,_ZThn1472_N9S19917C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N9S19917C10D0Ev,_ZThn1212_N9S19917C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N9S19917C10D1Ev,_ZThn1472_N9S19917C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N9S19917C10D1Ev,_ZThn1212_N9S19917C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19917C10 = {  "S19917C10", // class name
  bases_S19917C10, 6,
  &(vtc_S19917C10[0]), // expected_vtbl_contents
  &(vtt_S19917C10[0]), // expected_vtt_contents
  ABISELECT(2912,1672), // object size
  NSPAIRA(_ZTI9S19917C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19917C10),26, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19917C10),5, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19917C7  : virtual S19917C3 , virtual S19917C8 , S19917C10 , virtual S19917C11 , virtual S19917C4 {
  int s19917c7f0;
  char s19917c7f1;
  char s19917c7f2:8;
  long double s19917c7f3[8];
  int s19917c7f4;
  char s19917c7f5;
  void *s19917c7f6;
  virtual  ~S19917C7(); // _ZN8S19917C7D2Ev
  S19917C7(); // tgen
};
//SIG(-1 S19917C7) C1{ VBC2{ vd m FC3{ BC4{ vd m Fp FD Fi Fp} vd v5 v6 Fi Fp[4] FD[5] Fp[2] FC4 Fl[3]} FD[3] Fp} VBC5{ VBC6{ BC4 v1 v2 FL[2] FC4 Fi[3] Fp[4] FC3 Fc:5} BC4 vd v3 Fi} BC7{ VBC6 BC5 BC8{ vd v4 FL Fi FC3 Fi FC4 Fp Fi FC3 FD} VBC2 vd FC9{} FD[10] FC5 FC8 Fi} VBC8 VBC3 vd Fi Fc Fc:8 FD[8] Fi Fc Fp}


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

static void Test_S19917C7()
{
  extern Class_Descriptor cd_S19917C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(255,590)];
    init_test(&cd_S19917C7, buf);
    S19917C7 *dp, &lv = *(dp=new (buf) S19917C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4064,2356), "sizeof(S19917C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19917C7)");
    check_base_class_offset(lv, (S19917C3*), ABISELECT(2256,1328), "S19917C7");
    check_base_class_offset(lv, (S19917C3*)(S19917C10*), ABISELECT(2256,1328), "S19917C7");
    check_base_class_offset(lv, (S19917C5*)(S19917C9*), ABISELECT(2672,1560), "S19917C7");
    /*is_ambiguous_... S19917C7::S19917C8 */ AMB_check_base_class_offset(lv, (S19917C9*)(S19917C8*), ABISELECT(2672,1560), "S19917C7");
    check_base_class_offset(lv, (S19917C9*)(S19917C10*), ABISELECT(2672,1560), "S19917C7");
    check_base_class_offset(lv, (S19917C9*)(S19917C8*)(S19917C10*), ABISELECT(2672,1560), "S19917C7");
    /*is_ambiguous_... S19917C7::S19917C8 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19917C8*), ABISELECT(2608,1528), "S19917C7");
    /*is_ambiguous_... S19917C7::S19917C8 */ AMB_check_base_class_offset(lv, (S19917C8*), ABISELECT(2608,1528), "S19917C7");
    /*is_ambiguous_... S19917C8::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19917C8*)(S19917C10*), 0, "S19917C7");
    check_base_class_offset(lv, (S19917C8*)(S19917C10*), 0, "S19917C7");
    check_base_class_offset(lv, (S19917C11*)(S19917C10*), ABISELECT(64,32), "S19917C7");
    check_base_class_offset(lv, (S19917C10*), 0, "S19917C7");
    /*is_ambiguous_... S19917C7::S19917C11 */ AMB_check_base_class_offset(lv, (S19917C11*), ABISELECT(3120,1820), "S19917C7");
    check_base_class_offset(lv, (S19917C5*)(S19917C4*), ABISELECT(3792,2200), "S19917C7");
    check_base_class_offset(lv, (S19917C4*), ABISELECT(3792,2200), "S19917C7");
    check_field_offset(lv, s19917c7f0, ABISELECT(2100,1212), "S19917C7.s19917c7f0");
    check_field_offset(lv, s19917c7f1, ABISELECT(2104,1216), "S19917C7.s19917c7f1");
    set_bf_and_test(lv, s19917c7f2, ABISELECT(2105,1217), 0, 8, 1, "S19917C7");
    set_bf_and_test(lv, s19917c7f2, ABISELECT(2105,1217), 0, 8, hide_sll(1LL<<7), "S19917C7");
    check_field_offset(lv, s19917c7f3, ABISELECT(2112,1220), "S19917C7.s19917c7f3");
    check_field_offset(lv, s19917c7f4, ABISELECT(2240,1316), "S19917C7.s19917c7f4");
    check_field_offset(lv, s19917c7f5, ABISELECT(2244,1320), "S19917C7.s19917c7f5");
    check_field_offset(lv, s19917c7f6, ABISELECT(2248,1324), "S19917C7.s19917c7f6");
    test_class_info(&lv, &cd_S19917C7);
    dp->~S19917C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19917C7(Test_S19917C7, "S19917C7", ABISELECT(4064,2356));

#else // __cplusplus

extern void _ZN8S19917C7C1Ev();
extern void _ZN8S19917C7D2Ev();
Name_Map name_map_S19917C7[] = {
  NSPAIR(_ZN8S19917C7C1Ev),
  NSPAIR(_ZN8S19917C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C9;
extern VTBL_ENTRY _ZTI8S19917C9[];
extern  VTBL_ENTRY _ZTV8S19917C9[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C8;
extern VTBL_ENTRY _ZTI8S19917C8[];
extern  VTBL_ENTRY _ZTV8S19917C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19917C8[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C8;
extern VTBL_ENTRY _ZTI8S19917C8[];
extern  VTBL_ENTRY _ZTV8S19917C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19917C8[];
extern Class_Descriptor cd_S19917C11;
extern VTBL_ENTRY _ZTI9S19917C11[];
extern  VTBL_ENTRY _ZTV9S19917C11[];
extern Class_Descriptor cd_S19917C10;
extern VTBL_ENTRY _ZTI9S19917C10[];
extern  VTBL_ENTRY _ZTV9S19917C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19917C10[];
extern Class_Descriptor cd_S19917C11;
extern VTBL_ENTRY _ZTI9S19917C11[];
extern  VTBL_ENTRY _ZTV9S19917C11[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C4;
extern VTBL_ENTRY _ZTI8S19917C4[];
extern  VTBL_ENTRY _ZTV8S19917C4[];
static Base_Class bases_S19917C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C3,    ABISELECT(2256,1328), //bcp->offset
    15, //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
  1, 1},
  {&cd_S19917C5,    ABISELECT(2672,1560), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19917C9,    ABISELECT(2672,1560), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(2608,1528), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19917C8,    ABISELECT(2608,1528), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19917C8,    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
    10, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19917C11,    ABISELECT(64,32), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19917C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19917C11,    ABISELECT(3120,1820), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C5,    ABISELECT(3792,2200), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19917C4,    ABISELECT(3792,2200), //bcp->offset
    44, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19917C7[];
extern void _ZN8S19917C7D1Ev();
extern void _ZN8S19917C7D0Ev();
extern void _ZN8S19917C82v4Ev();
extern void ABISELECT(_ZThn64_N8S19917C7D1Ev,_ZThn32_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn64_N8S19917C7D0Ev,_ZThn32_N8S19917C7D0Ev)();
extern void _ZN9S19917C112v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn2256_N8S19917C7D1Ev,_ZThn1328_N8S19917C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev)();
extern void ABISELECT(_ZThn2256_N8S19917C7D0Ev,_ZThn1328_N8S19917C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19917C7D1Ev,_ZTv0_n16_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn2608_N8S19917C7D1Ev,_ZThn1528_N8S19917C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19917C7D0Ev,_ZTv0_n16_N8S19917C7D0Ev)();
extern void ABISELECT(_ZThn2608_N8S19917C7D0Ev,_ZThn1528_N8S19917C7D0Ev)() __attribute__((weak));
extern void _ZN8S19917C82v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn2672_N8S19917C7D1Ev,_ZThn1560_N8S19917C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev)();
extern void ABISELECT(_ZThn2672_N8S19917C7D0Ev,_ZThn1560_N8S19917C7D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn3120_N8S19917C7D1Ev,_ZThn1820_N8S19917C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev)();
extern void ABISELECT(_ZThn3120_N8S19917C7D0Ev,_ZThn1820_N8S19917C7D0Ev)() __attribute__((weak));
extern void _ZN9S19917C112v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn3792_N8S19917C7D1Ev,_ZThn2200_N8S19917C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev)();
extern void ABISELECT(_ZThn3792_N8S19917C7D0Ev,_ZThn2200_N8S19917C7D0Ev)() __attribute__((weak));
extern void _ZN8S19917C42v6Ev();
extern void _ZN8S19917C42v7Ev();
static  VTBL_ENTRY vtc_S19917C7[] = {
  ABISELECT(3792,2200),
  ABISELECT(3120,1820),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&_ZN8S19917C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19917C7D1Ev,_ZThn32_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19917C7D0Ev,_ZThn32_N8S19917C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev),
  0,
  ABISELECT(-2608,-1528),
  ABISELECT(64,32),
  ABISELECT(-2608,-1528),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19917C7D1Ev,_ZTv0_n16_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19917C7D0Ev,_ZTv0_n16_N8S19917C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
  0,
  ABISELECT(-3120,-1820),
  ABISELECT(-3120,-1820),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
  0,
  0,
  ABISELECT(-3792,-2200),
  ABISELECT(-3792,-2200),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19917C42v7Ev,
};
extern VTBL_ENTRY _ZTV8S19917C7[];
extern void _ZN9S19917C10D1Ev();
extern void _ZN9S19917C10D0Ev();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19917C10__8S19917C7[] = {
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI9S19917C10[0]),
  (VTBL_ENTRY)&_ZN9S19917C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19917C10D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void _ZN8S19917C8D1Ev();
extern void _ZN8S19917C8D0Ev();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C89S19917C10__A1__8S19917C7[] = {
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&_ZN8S19917C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev)();
extern void ABISELECT(_ZThn2672_N8S19917C8D1Ev,_ZThn1560_N8S19917C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev)();
extern void ABISELECT(_ZThn2672_N8S19917C8D0Ev,_ZThn1560_N8S19917C8D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__8S19917C89S19917C10__A1__8S19917C7[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19917C10D1Ev,_ZThn1560_N9S19917C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev)();
extern void ABISELECT(_ZThn2672_N9S19917C10D0Ev,_ZThn1560_N9S19917C10D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__9S19917C10__8S19917C7[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI9S19917C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev)();
extern void ABISELECT(_ZThn2256_N9S19917C10D1Ev,_ZThn1328_N9S19917C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev)();
extern void ABISELECT(_ZThn2256_N9S19917C10D0Ev,_ZThn1328_N9S19917C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__9S19917C10__8S19917C7[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI9S19917C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev),
};
extern void _ZN8S19917C8D1Ev();
extern void _ZN8S19917C8D0Ev();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C8__8S19917C7[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&_ZN8S19917C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S19917C8D1Ev,_ZThn32_N8S19917C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S19917C8D0Ev,_ZThn32_N8S19917C8D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__8S19917C8__8S19917C7[] = {
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
static  VTT_ENTRY vtt_S19917C7[] = {
  {&(_ZTV8S19917C7[7]),  7,53},
  {&(_tg__ZTV9S19917C10__8S19917C7[4]),  4,7},
  {&(_tg__ZTV8S19917C89S19917C10__A1__8S19917C7[3]),  3,6},
  {&(_tg__ZTV8S19917C9__8S19917C89S19917C10__A1__8S19917C7[5]),  5,9},
  {&(_tg__ZTV8S19917C9__9S19917C10__8S19917C7[5]),  5,9},
  {&(_tg__ZTV8S19917C3__9S19917C10__8S19917C7[3]),  3,5},
  {&(_ZTV8S19917C7[18]),  18,53},
  {&(_ZTV8S19917C7[25]),  25,53},
  {&(_ZTV8S19917C7[33]),  33,53},
  {&(_ZTV8S19917C7[41]),  41,53},
  {&(_ZTV8S19917C7[49]),  49,53},
  {&(_tg__ZTV8S19917C8__8S19917C7[3]),  3,6},
  {&(_tg__ZTV8S19917C9__8S19917C8__8S19917C7[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S19917C7[];
extern  VTBL_ENTRY _ZTV8S19917C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19917C7[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S19917C10D0Ev,_ZThn1328_N9S19917C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19917C10D0Ev,_ZThn1560_N9S19917C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S19917C10D1Ev,_ZThn1328_N9S19917C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19917C10D1Ev,_ZThn1560_N9S19917C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19917C8D0Ev,_ZThn32_N8S19917C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19917C8D0Ev,_ZThn1560_N8S19917C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19917C8D1Ev,_ZThn32_N8S19917C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19917C8D1Ev,_ZThn1560_N8S19917C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19917C7D0Ev,_ZTv0_n16_N8S19917C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S19917C7D0Ev,_ZThn1528_N8S19917C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19917C7D1Ev,_ZTv0_n16_N8S19917C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S19917C7D1Ev,_ZThn1528_N8S19917C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3792_N8S19917C7D0Ev,_ZThn2200_N8S19917C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N8S19917C7D0Ev,_ZThn1820_N8S19917C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19917C7D0Ev,_ZThn1560_N8S19917C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S19917C7D0Ev,_ZThn1328_N8S19917C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3792_N8S19917C7D1Ev,_ZThn2200_N8S19917C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N8S19917C7D1Ev,_ZThn1820_N8S19917C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19917C7D1Ev,_ZThn1560_N8S19917C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S19917C7D1Ev,_ZThn1328_N8S19917C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19917C7 = {  "S19917C7", // class name
  bases_S19917C7, 12,
  &(vtc_S19917C7[0]), // expected_vtbl_contents
  &(vtt_S19917C7[0]), // expected_vtt_contents
  ABISELECT(4064,2356), // object size
  NSPAIRA(_ZTI8S19917C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19917C7),53, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19917C7),13, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19917C13  : virtual S19917C5 , virtual S19917C11 , virtual S19917C7 {
  short s19917c13f0;
  ::S19917C7 s19917c13f1[5];
  ::S19917C10 s19917c13f2;
  int s19917c13f3;
  void *s19917c13f4;
  char s19917c13f5:8;
  ::S19917C10 s19917c13f6;
  int s19917c13f7;
  __tsi64 s19917c13f8[3];
  ::S19917C7 s19917c13f9;
  long double s19917c13f10;
  virtual  ~S19917C13(); // _ZN9S19917C13D2Ev
  virtual void  v8(); // _ZN9S19917C132v8Ev
  S19917C13(); // tgen
};
//SIG(-1 S19917C13) C1{ VBC2{ vd m Fp FD Fi Fp} VBC3{ vd v2 FL Fi FC4{ BC2 vd v6 v7 Fi Fp[4] FD[5] Fp[2] FC2 Fl[3]} Fi FC2 Fp Fi FC4 FD} VBC5{ VBC6{ vd m FC4 FD[3] Fp} VBC7{ VBC8{ BC2 v3 v4 FL[2] FC2 Fi[3] Fp[4] FC4 Fc:5} BC2 vd v5 Fi} BC9{ VBC8 BC7 BC3 VBC6 vd FC10{} FD[10] FC7 FC3 Fi} VBC3 VBC4 vd Fi Fc Fc:8 FD[8] Fi Fc Fp} vd v1 Fs FC5[5] FC9 Fi Fp Fc:8 FC9 Fi FL[3] FC5 FD}


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

static void Test_S19917C13()
{
  extern Class_Descriptor cd_S19917C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2152,4982)];
    init_test(&cd_S19917C13, buf);
    S19917C13 *dp, &lv = *(dp=new (buf) S19917C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(34416,19924), "sizeof(S19917C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19917C13)");
    /*is_ambiguous_... S19917C13::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*), ABISELECT(30304,17540), "S19917C13");
    /*is_ambiguous_... S19917C13::S19917C11 */ AMB_check_base_class_offset(lv, (S19917C11*), ABISELECT(30352,17568), "S19917C13");
    /*is_ambiguous_... S19917C7::S19917C11 */ AMB_check_base_class_offset(lv, (S19917C11*)(S19917C7*), ABISELECT(30352,17568), "S19917C13");
    check_base_class_offset(lv, (S19917C3*)(S19917C7*), ABISELECT(33280,19276), "S19917C13");
    check_base_class_offset(lv, (S19917C3*)(S19917C10*)(S19917C7*), ABISELECT(33280,19276), "S19917C13");
    check_base_class_offset(lv, (S19917C5*)(S19917C9*), ABISELECT(33696,19508), "S19917C13");
    /*is_ambiguous_... S19917C13::S19917C8 */ AMB_check_base_class_offset(lv, (S19917C9*)(S19917C8*), ABISELECT(33696,19508), "S19917C13");
    check_base_class_offset(lv, (S19917C9*)(S19917C10*)(S19917C7*), ABISELECT(33696,19508), "S19917C13");
    check_base_class_offset(lv, (S19917C9*)(S19917C8*)(S19917C10*)(S19917C7*), ABISELECT(33696,19508), "S19917C13");
    /*is_ambiguous_... S19917C13::S19917C8 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19917C8*), ABISELECT(33632,19476), "S19917C13");
    /*is_ambiguous_... S19917C7::S19917C8 */ AMB_check_base_class_offset(lv, (S19917C8*)(S19917C7*), ABISELECT(33632,19476), "S19917C13");
    /*is_ambiguous_... S19917C8::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19917C8*)(S19917C10*)(S19917C7*), ABISELECT(31024,17948), "S19917C13");
    check_base_class_offset(lv, (S19917C8*)(S19917C10*)(S19917C7*), ABISELECT(31024,17948), "S19917C13");
    check_base_class_offset(lv, (S19917C11*)(S19917C10*)(S19917C7*), ABISELECT(31088,17980), "S19917C13");
    check_base_class_offset(lv, (S19917C10*)(S19917C7*), ABISELECT(31024,17948), "S19917C13");
    check_base_class_offset(lv, (S19917C5*)(S19917C4*), ABISELECT(34144,19768), "S19917C13");
    check_base_class_offset(lv, (S19917C4*)(S19917C7*), ABISELECT(34144,19768), "S19917C13");
    check_base_class_offset(lv, (S19917C7*), ABISELECT(31024,17948), "S19917C13");
    check_field_offset(lv, s19917c13f0, ABISELECT(8,4), "S19917C13.s19917c13f0");
    check_field_offset(lv, s19917c13f1, ABISELECT(16,8), "S19917C13.s19917c13f1");
    check_field_offset(lv, s19917c13f2, ABISELECT(20336,11788), "S19917C13.s19917c13f2");
    check_field_offset(lv, s19917c13f3, ABISELECT(23248,13460), "S19917C13.s19917c13f3");
    check_field_offset(lv, s19917c13f4, ABISELECT(23256,13464), "S19917C13.s19917c13f4");
    set_bf_and_test(lv, s19917c13f5, ABISELECT(23264,13468), 0, 8, 1, "S19917C13");
    set_bf_and_test(lv, s19917c13f5, ABISELECT(23264,13468), 0, 8, hide_sll(1LL<<7), "S19917C13");
    check_field_offset(lv, s19917c13f6, ABISELECT(23280,13472), "S19917C13.s19917c13f6");
    check_field_offset(lv, s19917c13f7, ABISELECT(26192,15144), "S19917C13.s19917c13f7");
    check_field_offset(lv, s19917c13f8, ABISELECT(26200,15148), "S19917C13.s19917c13f8");
    check_field_offset(lv, s19917c13f9, ABISELECT(26224,15172), "S19917C13.s19917c13f9");
    check_field_offset(lv, s19917c13f10, ABISELECT(30288,17528), "S19917C13.s19917c13f10");
    test_class_info(&lv, &cd_S19917C13);
    dp->~S19917C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19917C13(Test_S19917C13, "S19917C13", ABISELECT(34416,19924));

#else // __cplusplus

extern void _ZN9S19917C13C1Ev();
extern void _ZN9S19917C13D2Ev();
Name_Map name_map_S19917C13[] = {
  NSPAIR(_ZN9S19917C13C1Ev),
  NSPAIR(_ZN9S19917C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C11;
extern VTBL_ENTRY _ZTI9S19917C11[];
extern  VTBL_ENTRY _ZTV9S19917C11[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C9;
extern VTBL_ENTRY _ZTI8S19917C9[];
extern  VTBL_ENTRY _ZTV8S19917C9[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C8;
extern VTBL_ENTRY _ZTI8S19917C8[];
extern  VTBL_ENTRY _ZTV8S19917C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19917C8[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C8;
extern VTBL_ENTRY _ZTI8S19917C8[];
extern  VTBL_ENTRY _ZTV8S19917C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19917C8[];
extern Class_Descriptor cd_S19917C11;
extern VTBL_ENTRY _ZTI9S19917C11[];
extern  VTBL_ENTRY _ZTV9S19917C11[];
extern Class_Descriptor cd_S19917C10;
extern VTBL_ENTRY _ZTI9S19917C10[];
extern  VTBL_ENTRY _ZTV9S19917C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19917C10[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C4;
extern VTBL_ENTRY _ZTI8S19917C4[];
extern  VTBL_ENTRY _ZTV8S19917C4[];
extern Class_Descriptor cd_S19917C7;
extern VTBL_ENTRY _ZTI8S19917C7[];
extern  VTBL_ENTRY _ZTV8S19917C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19917C7[];
static Base_Class bases_S19917C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    ABISELECT(30304,17540), //bcp->offset
    12, //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_S19917C11,    ABISELECT(30352,17568), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C3,    ABISELECT(33280,19276), //bcp->offset
    42, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(33696,19508), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19917C9,    ABISELECT(33696,19508), //bcp->offset
    55, //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
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(33632,19476), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19917C8,    ABISELECT(33632,19476), //bcp->offset
    47, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(31024,17948), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S19917C8,    ABISELECT(31024,17948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19917C11,    ABISELECT(31088,17980), //bcp->offset
    37, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19917C10,    ABISELECT(31024,17948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19917C5,    ABISELECT(34144,19768), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S19917C4,    ABISELECT(34144,19768), //bcp->offset
    64, //bcp->virtual_function_table_offset
    5, //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
    13, //immediately_derived
  0, 1},
  {&cd_S19917C7,    ABISELECT(31024,17948), //bcp->offset
    24, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19917C13[];
extern void _ZN9S19917C13D1Ev();
extern void _ZN9S19917C13D0Ev();
extern void _ZN9S19917C132v8Ev();
extern void ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev)();
extern void ABISELECT(_ZThn30304_N9S19917C13D1Ev,_ZThn17540_N9S19917C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev)();
extern void ABISELECT(_ZThn30304_N9S19917C13D0Ev,_ZThn17540_N9S19917C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev)();
extern void ABISELECT(_ZThn30352_N9S19917C13D1Ev,_ZThn17568_N9S19917C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev)();
extern void ABISELECT(_ZThn30352_N9S19917C13D0Ev,_ZThn17568_N9S19917C13D0Ev)() __attribute__((weak));
extern void _ZN9S19917C112v5Ev();
extern void ABISELECT(_ZTv0_n64_N9S19917C13D1Ev,_ZTv0_n32_N9S19917C13D1Ev)();
extern void ABISELECT(_ZThn31024_N9S19917C13D1Ev,_ZThn17948_N9S19917C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19917C13D0Ev,_ZTv0_n32_N9S19917C13D0Ev)();
extern void ABISELECT(_ZThn31024_N9S19917C13D0Ev,_ZThn17948_N9S19917C13D0Ev)() __attribute__((weak));
extern void _ZN8S19917C82v4Ev();
extern void ABISELECT(_ZTvn64_n64_N9S19917C13D1Ev,_ZTvn32_n32_N9S19917C13D1Ev)();
extern void ABISELECT(_ZTvn64_n64_N9S19917C13D0Ev,_ZTvn32_n32_N9S19917C13D0Ev)();
extern void _ZN9S19917C112v5Ev();
extern void ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev)();
extern void ABISELECT(_ZThn33280_N9S19917C13D1Ev,_ZThn19276_N9S19917C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev)();
extern void ABISELECT(_ZThn33280_N9S19917C13D0Ev,_ZThn19276_N9S19917C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19917C13D1Ev,_ZTv0_n16_N9S19917C13D1Ev)();
extern void ABISELECT(_ZThn33632_N9S19917C13D1Ev,_ZThn19476_N9S19917C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19917C13D0Ev,_ZTv0_n16_N9S19917C13D0Ev)();
extern void ABISELECT(_ZThn33632_N9S19917C13D0Ev,_ZThn19476_N9S19917C13D0Ev)() __attribute__((weak));
extern void _ZN8S19917C82v4Ev();
extern void ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev)();
extern void ABISELECT(_ZThn33696_N9S19917C13D1Ev,_ZThn19508_N9S19917C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev)();
extern void ABISELECT(_ZThn33696_N9S19917C13D0Ev,_ZThn19508_N9S19917C13D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev)();
extern void ABISELECT(_ZThn34144_N9S19917C13D1Ev,_ZThn19768_N9S19917C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev)();
extern void ABISELECT(_ZThn34144_N9S19917C13D0Ev,_ZThn19768_N9S19917C13D0Ev)() __attribute__((weak));
extern void _ZN8S19917C42v6Ev();
extern void _ZN8S19917C42v7Ev();
static  VTBL_ENTRY vtc_S19917C13[] = {
  ABISELECT(34144,19768),
  ABISELECT(33696,19508),
  ABISELECT(33632,19476),
  ABISELECT(33280,19276),
  ABISELECT(31024,17948),
  ABISELECT(30352,17568),
  ABISELECT(30304,17540),
  0,
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&_ZN9S19917C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19917C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19917C132v8Ev,
  ABISELECT(-30304,-17540),
  ABISELECT(-30304,-17540),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev),
  0,
  ABISELECT(-30352,-17568),
  ABISELECT(-30352,-17568),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
  ABISELECT(64,32),
  0,
  ABISELECT(-31024,-17948),
  ABISELECT(3120,1820),
  ABISELECT(-672,-380),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  ABISELECT(-31024,-17948),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19917C13D1Ev,_ZTv0_n32_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19917C13D0Ev,_ZTv0_n32_N9S19917C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
  ABISELECT(-31088,-17980),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N9S19917C13D1Ev,_ZTvn32_n32_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N9S19917C13D0Ev,_ZTvn32_n32_N9S19917C13D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
  ABISELECT(-33280,-19276),
  ABISELECT(-33280,-19276),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev),
  0,
  ABISELECT(-33632,-19476),
  ABISELECT(64,32),
  ABISELECT(-33632,-19476),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19917C13D1Ev,_ZTv0_n16_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19917C13D0Ev,_ZTv0_n16_N9S19917C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
  0,
  0,
  ABISELECT(-33696,-19508),
  ABISELECT(-33696,-19508),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
  0,
  0,
  ABISELECT(-34144,-19768),
  ABISELECT(-34144,-19768),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19917C42v7Ev,
};
extern VTBL_ENTRY _ZTV9S19917C13[];
extern void _ZN8S19917C7D1Ev();
extern void _ZN8S19917C7D0Ev();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C7__9S19917C13[] = {
  ABISELECT(3120,1820),
  ABISELECT(-672,-380),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&_ZN8S19917C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void _ZN9S19917C10D1Ev();
extern void _ZN9S19917C10D0Ev();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19917C108S19917C7__9S19917C13[] = {
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI9S19917C10[0]),
  (VTBL_ENTRY)&_ZN9S19917C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19917C10D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void _ZN8S19917C8D1Ev();
extern void _ZN8S19917C8D0Ev();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C89S19917C108S19917C7__A1__9S19917C13[] = {
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&_ZN8S19917C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev)();
extern void ABISELECT(_ZThn2672_N8S19917C8D1Ev,_ZThn1560_N8S19917C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev)();
extern void ABISELECT(_ZThn2672_N8S19917C8D0Ev,_ZThn1560_N8S19917C8D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__8S19917C89S19917C108S19917C7__A1__9S19917C13[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19917C10D1Ev,_ZThn1560_N9S19917C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev)();
extern void ABISELECT(_ZThn2672_N9S19917C10D0Ev,_ZThn1560_N9S19917C10D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__9S19917C108S19917C7__9S19917C13[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI9S19917C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev)();
extern void ABISELECT(_ZThn2256_N9S19917C10D1Ev,_ZThn1328_N9S19917C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev)();
extern void ABISELECT(_ZThn2256_N9S19917C10D0Ev,_ZThn1328_N9S19917C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__9S19917C108S19917C7__9S19917C13[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI9S19917C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn2256_N8S19917C7D1Ev,_ZThn1328_N8S19917C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev)();
extern void ABISELECT(_ZThn2256_N8S19917C7D0Ev,_ZThn1328_N8S19917C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__8S19917C7__9S19917C13[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19917C7D1Ev,_ZTv0_n16_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn2608_N8S19917C7D1Ev,_ZThn1528_N8S19917C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19917C7D0Ev,_ZTv0_n16_N8S19917C7D0Ev)();
extern void ABISELECT(_ZThn2608_N8S19917C7D0Ev,_ZThn1528_N8S19917C7D0Ev)() __attribute__((weak));
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C8__8S19917C7__9S19917C13[] = {
  0,
  ABISELECT(-2608,-1528),
  ABISELECT(64,32),
  ABISELECT(-2608,-1528),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19917C7D1Ev,_ZTv0_n16_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19917C7D0Ev,_ZTv0_n16_N8S19917C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn2672_N8S19917C7D1Ev,_ZThn1560_N8S19917C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev)();
extern void ABISELECT(_ZThn2672_N8S19917C7D0Ev,_ZThn1560_N8S19917C7D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__8S19917C7__9S19917C13[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev)();
extern void _ZN9S19917C112v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19917C11__A1__8S19917C7__9S19917C13[] = {
  0,
  ABISELECT(672,380),
  ABISELECT(672,380),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn3120_N8S19917C7D1Ev,_ZThn1820_N8S19917C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev)();
extern void ABISELECT(_ZThn3120_N8S19917C7D0Ev,_ZThn1820_N8S19917C7D0Ev)() __attribute__((weak));
extern void _ZN8S19917C42v6Ev();
extern void _ZN8S19917C42v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C4__8S19917C7__9S19917C13[] = {
  0,
  0,
  ABISELECT(-3120,-1820),
  ABISELECT(-3120,-1820),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19917C42v7Ev,
};
extern void _ZN8S19917C8D1Ev();
extern void _ZN8S19917C8D0Ev();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C8__9S19917C13[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&_ZN8S19917C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S19917C8D1Ev,_ZThn32_N8S19917C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S19917C8D0Ev,_ZThn32_N8S19917C8D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__8S19917C8__9S19917C13[] = {
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
static  VTT_ENTRY vtt_S19917C13[] = {
  {&(_ZTV9S19917C13[9]),  9,73},
  {&(_ZTV9S19917C13[15]),  15,73},
  {&(_ZTV9S19917C13[21]),  21,73},
  {&(_ZTV9S19917C13[34]),  34,73},
  {&(_ZTV9S19917C13[45]),  45,73},
  {&(_ZTV9S19917C13[52]),  52,73},
  {&(_ZTV9S19917C13[60]),  60,73},
  {&(_ZTV9S19917C13[39]),  39,73},
  {&(_ZTV9S19917C13[69]),  69,73},
  {&(_tg__ZTV8S19917C7__9S19917C13[7]),  7,10},
  {&(_tg__ZTV9S19917C108S19917C7__9S19917C13[4]),  4,7},
  {&(_tg__ZTV8S19917C89S19917C108S19917C7__A1__9S19917C13[3]),  3,6},
  {&(_tg__ZTV8S19917C9__8S19917C89S19917C108S19917C7__A1__9S19917C13[5]),  5,9},
  {&(_tg__ZTV8S19917C9__9S19917C108S19917C7__9S19917C13[5]),  5,9},
  {&(_tg__ZTV8S19917C3__9S19917C108S19917C7__9S19917C13[3]),  3,5},
  {&(_tg__ZTV8S19917C3__8S19917C7__9S19917C13[3]),  3,5},
  {&(_tg__ZTV8S19917C8__8S19917C7__9S19917C13[5]),  5,8},
  {&(_tg__ZTV8S19917C9__8S19917C7__9S19917C13[5]),  5,9},
  {&(_tg__ZTV9S19917C11__A1__8S19917C7__9S19917C13[4]),  4,7},
  {&(_tg__ZTV8S19917C4__8S19917C7__9S19917C13[5]),  5,9},
  {&(_tg__ZTV8S19917C8__9S19917C13[3]),  3,6},
  {&(_tg__ZTV8S19917C9__8S19917C8__9S19917C13[5]),  5,9},
};
extern VTBL_ENTRY _ZTI9S19917C13[];
extern  VTBL_ENTRY _ZTV9S19917C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19917C13[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19917C7D0Ev,_ZTv0_n16_N8S19917C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S19917C7D0Ev,_ZThn1528_N8S19917C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19917C7D1Ev,_ZTv0_n16_N8S19917C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S19917C7D1Ev,_ZThn1528_N8S19917C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N8S19917C7D0Ev,_ZThn1820_N8S19917C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19917C7D0Ev,_ZThn1560_N8S19917C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S19917C7D0Ev,_ZThn1328_N8S19917C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N8S19917C7D1Ev,_ZThn1820_N8S19917C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19917C7D1Ev,_ZThn1560_N8S19917C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S19917C7D1Ev,_ZThn1328_N8S19917C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S19917C10D0Ev,_ZThn1328_N9S19917C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19917C10D0Ev,_ZThn1560_N9S19917C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S19917C10D1Ev,_ZThn1328_N9S19917C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19917C10D1Ev,_ZThn1560_N9S19917C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19917C8D0Ev,_ZThn32_N8S19917C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19917C8D0Ev,_ZThn1560_N8S19917C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19917C8D1Ev,_ZThn32_N8S19917C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19917C8D1Ev,_ZThn1560_N8S19917C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19917C13D0Ev,_ZTv0_n16_N9S19917C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33632_N9S19917C13D0Ev,_ZThn19476_N9S19917C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19917C13D1Ev,_ZTv0_n16_N9S19917C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33632_N9S19917C13D1Ev,_ZThn19476_N9S19917C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19917C13D0Ev,_ZTv0_n32_N9S19917C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn31024_N9S19917C13D0Ev,_ZThn17948_N9S19917C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19917C13D1Ev,_ZTv0_n32_N9S19917C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn31024_N9S19917C13D1Ev,_ZThn17948_N9S19917C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34144_N9S19917C13D0Ev,_ZThn19768_N9S19917C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33696_N9S19917C13D0Ev,_ZThn19508_N9S19917C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33280_N9S19917C13D0Ev,_ZThn19276_N9S19917C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30352_N9S19917C13D0Ev,_ZThn17568_N9S19917C13D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30304_N9S19917C13D0Ev,_ZThn17540_N9S19917C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34144_N9S19917C13D1Ev,_ZThn19768_N9S19917C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33696_N9S19917C13D1Ev,_ZThn19508_N9S19917C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33280_N9S19917C13D1Ev,_ZThn19276_N9S19917C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30352_N9S19917C13D1Ev,_ZThn17568_N9S19917C13D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30304_N9S19917C13D1Ev,_ZThn17540_N9S19917C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19917C13 = {  "S19917C13", // class name
  bases_S19917C13, 14,
  &(vtc_S19917C13[0]), // expected_vtbl_contents
  &(vtt_S19917C13[0]), // expected_vtt_contents
  ABISELECT(34416,19924), // object size
  NSPAIRA(_ZTI9S19917C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19917C13),73, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19917C13),22, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19917C14  : virtual S19917C9 , virtual S19917C5 , S19917C3 {
  ::S19917C12_nt s19917c14f0;
  void *s19917c14f1;
  long double s19917c14f2[3];
  ::S19917C3 s19917c14f3;
  ::S19917C4 s19917c14f4;
  ~S19917C14(); // tgen
  S19917C14(); // tgen
};
//SIG(-1 S19917C14) C1{ VBC2{ BC3{ vd m Fp FD Fi Fp} v1 v2 FL[2] FC3 Fi[3] Fp[4] FC4{ BC3 vd v3 v4 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} Fc:5} VBC3 BC5{ vd m FC4 FD[3] Fp} FC6{} Fp FD[3] FC5 FC4}


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

static void Test_S19917C14()
{
  extern Class_Descriptor cd_S19917C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(97,223)];
    init_test(&cd_S19917C14, buf);
    S19917C14 *dp, &lv = *(dp=new (buf) S19917C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1536,888), "sizeof(S19917C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19917C14)");
    check_base_class_offset(lv, (S19917C5*)(S19917C9*), ABISELECT(1040,600), "S19917C14");
    check_base_class_offset(lv, (S19917C9*), ABISELECT(1040,600), "S19917C14");
    /*is_ambiguous_... S19917C14::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*), ABISELECT(1488,860), "S19917C14");
    check_base_class_offset(lv, (S19917C3*), 0, "S19917C14");
    check_field_offset(lv, s19917c14f0, ABISELECT(344,200), "S19917C14.s19917c14f0");
    check_field_offset(lv, s19917c14f1, ABISELECT(352,204), "S19917C14.s19917c14f1");
    check_field_offset(lv, s19917c14f2, ABISELECT(368,208), "S19917C14.s19917c14f2");
    check_field_offset(lv, s19917c14f3, ABISELECT(416,244), "S19917C14.s19917c14f3");
    check_field_offset(lv, s19917c14f4, ABISELECT(768,444), "S19917C14.s19917c14f4");
    test_class_info(&lv, &cd_S19917C14);
    dp->~S19917C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19917C14(Test_S19917C14, "S19917C14", ABISELECT(1536,888));

#else // __cplusplus

extern void _ZN9S19917C14C1Ev();
extern void _ZN9S19917C14D1Ev();
Name_Map name_map_S19917C14[] = {
  NSPAIR(_ZN9S19917C14C1Ev),
  NSPAIR(_ZN9S19917C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C9;
extern VTBL_ENTRY _ZTI8S19917C9[];
extern  VTBL_ENTRY _ZTV8S19917C9[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
static Base_Class bases_S19917C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    ABISELECT(1040,600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19917C9,    ABISELECT(1040,600), //bcp->offset
    6, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C5,    ABISELECT(1488,860), //bcp->offset
    15, //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},
  {&cd_S19917C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S19917C14[];
extern void _ZN9S19917C14D1Ev();
extern void _ZN9S19917C14D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19917C14D1Ev,_ZTv0_n12_N9S19917C14D1Ev)();
extern void ABISELECT(_ZThn1040_N9S19917C14D1Ev,_ZThn600_N9S19917C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C14D0Ev,_ZTv0_n12_N9S19917C14D0Ev)();
extern void ABISELECT(_ZThn1040_N9S19917C14D0Ev,_ZThn600_N9S19917C14D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S19917C14D1Ev,_ZTv0_n12_N9S19917C14D1Ev)();
extern void ABISELECT(_ZThn1488_N9S19917C14D1Ev,_ZThn860_N9S19917C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C14D0Ev,_ZTv0_n12_N9S19917C14D0Ev)();
extern void ABISELECT(_ZThn1488_N9S19917C14D0Ev,_ZThn860_N9S19917C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19917C14[] = {
  ABISELECT(1488,860),
  ABISELECT(1040,600),
  0,
  (VTBL_ENTRY)&(_ZTI9S19917C14[0]),
  (VTBL_ENTRY)&_ZN9S19917C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19917C14D0Ev,
  0,
  0,
  ABISELECT(-1040,-600),
  ABISELECT(-1040,-600),
  (VTBL_ENTRY)&(_ZTI9S19917C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C14D1Ev,_ZTv0_n12_N9S19917C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C14D0Ev,_ZTv0_n12_N9S19917C14D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
  ABISELECT(-1488,-860),
  ABISELECT(-1488,-860),
  (VTBL_ENTRY)&(_ZTI9S19917C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C14D1Ev,_ZTv0_n12_N9S19917C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C14D0Ev,_ZTv0_n12_N9S19917C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S19917C14[];
static  VTT_ENTRY vtt_S19917C14[] = {
  {&(_ZTV9S19917C14[4]),  4,20},
  {&(_ZTV9S19917C14[11]),  11,20},
  {&(_ZTV9S19917C14[18]),  18,20},
};
extern VTBL_ENTRY _ZTI9S19917C14[];
extern  VTBL_ENTRY _ZTV9S19917C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19917C14[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C14D0Ev,_ZTv0_n12_N9S19917C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N9S19917C14D0Ev,_ZThn860_N9S19917C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1040_N9S19917C14D0Ev,_ZThn600_N9S19917C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C14D1Ev,_ZTv0_n12_N9S19917C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N9S19917C14D1Ev,_ZThn860_N9S19917C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1040_N9S19917C14D1Ev,_ZThn600_N9S19917C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19917C14 = {  "S19917C14", // class name
  bases_S19917C14, 4,
  &(vtc_S19917C14[0]), // expected_vtbl_contents
  &(vtt_S19917C14[0]), // expected_vtt_contents
  ABISELECT(1536,888), // object size
  NSPAIRA(_ZTI9S19917C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19917C14),20, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19917C14),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19917C6  : virtual S19917C7 , virtual S19917C13 , S19917C14 , S19917C4 {
  void *s19917c6f0[4];
  short s19917c6f1;
  int s19917c6f2[9];
  void *s19917c6f3;
  unsigned char s19917c6f4:1;
  virtual void  v9(); // _ZN8S19917C62v9Ev
  ~S19917C6(); // tgen
  S19917C6(); // tgen
};
//SIG(-1 S19917C6) C1{ VBC2{ VBC3{ vd m FC4{ BC5{ vd m Fp FD Fi Fp} vd v6 v7 Fi Fp[4] FD[5] Fp[2] FC5 Fl[3]} FD[3] Fp} VBC6{ VBC7{ BC5 v2 v3 FL[2] FC5 Fi[3] Fp[4] FC4 Fc:5} BC5 vd v4 Fi} BC8{ VBC7 BC6 BC9{ vd v5 FL Fi FC4 Fi FC5 Fp Fi FC4 FD} VBC3 vd FC10{} FD[10] FC6 FC9 Fi} VBC9 VBC4 vd Fi Fc Fc:8 FD[8] Fi Fc Fp} VBC11{ VBC5 VBC9 VBC2 vd v8 Fs FC2[5] FC8 Fi Fp Fc:8 FC8 Fi FL[3] FC2 FD} BC12{ VBC7 VBC5 BC3 FC10 Fp FD[3] FC3 FC4} BC4 v1 Fp[4] Fs Fi[9] Fp Fc:1}


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

static void Test_S19917C6()
{
  extern Class_Descriptor cd_S19917C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2239,5187)];
    init_test(&cd_S19917C6, buf);
    S19917C6 *dp, &lv = *(dp=new (buf) S19917C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(35808,20744), "sizeof(S19917C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19917C6)");
    check_base_class_offset(lv, (S19917C3*)(S19917C7*), ABISELECT(3648,2148), "S19917C6");
    check_base_class_offset(lv, (S19917C3*)(S19917C10*)(S19917C7*), ABISELECT(3648,2148), "S19917C6");
    check_base_class_offset(lv, (S19917C5*)(S19917C9*), ABISELECT(4064,2380), "S19917C6");
    /*is_ambiguous_... S19917C6::S19917C8 */ AMB_check_base_class_offset(lv, (S19917C9*)(S19917C8*), ABISELECT(4064,2380), "S19917C6");
    check_base_class_offset(lv, (S19917C9*)(S19917C10*)(S19917C7*), ABISELECT(4064,2380), "S19917C6");
    check_base_class_offset(lv, (S19917C9*)(S19917C8*)(S19917C10*)(S19917C7*), ABISELECT(4064,2380), "S19917C6");
    check_base_class_offset(lv, (S19917C9*)(S19917C14*), ABISELECT(4064,2380), "S19917C6");
    /*is_ambiguous_... S19917C6::S19917C8 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19917C8*), ABISELECT(4000,2348), "S19917C6");
    /*is_ambiguous_... S19917C7::S19917C8 */ AMB_check_base_class_offset(lv, (S19917C8*)(S19917C7*), ABISELECT(4000,2348), "S19917C6");
    /*is_ambiguous_... S19917C8::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19917C8*)(S19917C10*)(S19917C7*), ABISELECT(1392,820), "S19917C6");
    check_base_class_offset(lv, (S19917C8*)(S19917C10*)(S19917C7*), ABISELECT(1392,820), "S19917C6");
    check_base_class_offset(lv, (S19917C11*)(S19917C10*)(S19917C7*), ABISELECT(1456,852), "S19917C6");
    check_base_class_offset(lv, (S19917C10*)(S19917C7*), ABISELECT(1392,820), "S19917C6");
    /*is_ambiguous_... S19917C7::S19917C11 */ AMB_check_base_class_offset(lv, (S19917C11*)(S19917C7*), ABISELECT(4512,2640), "S19917C6");
    /*is_ambiguous_... S19917C13::S19917C11 */ AMB_check_base_class_offset(lv, (S19917C11*)(S19917C13*), ABISELECT(4512,2640), "S19917C6");
    /*is_ambiguous_... S19917C6::S19917C4 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19917C4*), ABISELECT(5184,3020), "S19917C6");
    check_base_class_offset(lv, (S19917C4*)(S19917C7*), ABISELECT(5184,3020), "S19917C6");
    check_base_class_offset(lv, (S19917C7*), ABISELECT(1392,820), "S19917C6");
    check_base_class_offset(lv, (S19917C7*)(S19917C13*), ABISELECT(1392,820), "S19917C6");
    /*is_ambiguous_... S19917C13::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19917C13*), ABISELECT(35760,20716), "S19917C6");
    /*is_ambiguous_... S19917C14::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19917C14*), ABISELECT(35760,20716), "S19917C6");
    check_base_class_offset(lv, (S19917C13*), ABISELECT(5456,3176), "S19917C6");
    check_base_class_offset(lv, (S19917C3*)(S19917C14*), 0, "S19917C6");
    check_base_class_offset(lv, (S19917C14*), 0, "S19917C6");
    /*is_ambiguous_... S19917C6::S19917C4 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19917C4*), ABISELECT(1040,600), "S19917C6");
    /*is_ambiguous_... S19917C6::S19917C4 */ AMB_check_base_class_offset(lv, (S19917C4*), ABISELECT(1040,600), "S19917C6");
    check_field_offset(lv, s19917c6f0, ABISELECT(1304,756), "S19917C6.s19917c6f0");
    check_field_offset(lv, s19917c6f1, ABISELECT(1336,772), "S19917C6.s19917c6f1");
    check_field_offset(lv, s19917c6f2, ABISELECT(1340,776), "S19917C6.s19917c6f2");
    check_field_offset(lv, s19917c6f3, ABISELECT(1376,812), "S19917C6.s19917c6f3");
    set_bf_and_test(lv, s19917c6f4, ABISELECT(1384,816), 0, 1, 1, "S19917C6");
    test_class_info(&lv, &cd_S19917C6);
    dp->~S19917C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19917C6(Test_S19917C6, "S19917C6", ABISELECT(35808,20744));

#else // __cplusplus

extern void _ZN8S19917C6C1Ev();
extern void _ZN8S19917C6D1Ev();
Name_Map name_map_S19917C6[] = {
  NSPAIR(_ZN8S19917C6C1Ev),
  NSPAIR(_ZN8S19917C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C9;
extern VTBL_ENTRY _ZTI8S19917C9[];
extern  VTBL_ENTRY _ZTV8S19917C9[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C8;
extern VTBL_ENTRY _ZTI8S19917C8[];
extern  VTBL_ENTRY _ZTV8S19917C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19917C8[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C8;
extern VTBL_ENTRY _ZTI8S19917C8[];
extern  VTBL_ENTRY _ZTV8S19917C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19917C8[];
extern Class_Descriptor cd_S19917C11;
extern VTBL_ENTRY _ZTI9S19917C11[];
extern  VTBL_ENTRY _ZTV9S19917C11[];
extern Class_Descriptor cd_S19917C10;
extern VTBL_ENTRY _ZTI9S19917C10[];
extern  VTBL_ENTRY _ZTV9S19917C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19917C10[];
extern Class_Descriptor cd_S19917C11;
extern VTBL_ENTRY _ZTI9S19917C11[];
extern  VTBL_ENTRY _ZTV9S19917C11[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C4;
extern VTBL_ENTRY _ZTI8S19917C4[];
extern  VTBL_ENTRY _ZTV8S19917C4[];
extern Class_Descriptor cd_S19917C7;
extern VTBL_ENTRY _ZTI8S19917C7[];
extern  VTBL_ENTRY _ZTV8S19917C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19917C7[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C13;
extern VTBL_ENTRY _ZTI9S19917C13[];
extern  VTBL_ENTRY _ZTV9S19917C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19917C13[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
extern Class_Descriptor cd_S19917C14;
extern VTBL_ENTRY _ZTI9S19917C14[];
extern  VTBL_ENTRY _ZTV9S19917C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19917C14[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C4;
extern VTBL_ENTRY _ZTI8S19917C4[];
extern  VTBL_ENTRY _ZTV8S19917C4[];
static Base_Class bases_S19917C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C3,    ABISELECT(3648,2148), //bcp->offset
    37, //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
    8, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(4064,2380), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19917C9,    ABISELECT(4064,2380), //bcp->offset
    50, //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
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(4000,2348), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19917C8,    ABISELECT(4000,2348), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(1392,820), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19917C8,    ABISELECT(1392,820), //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
    8, //immediately_derived
  0, 0},
  {&cd_S19917C11,    ABISELECT(1456,852), //bcp->offset
    32, //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
    11, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19917C10,    ABISELECT(1392,820), //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
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19917C11,    ABISELECT(4512,2640), //bcp->offset
    59, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(5184,3020), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19917C4,    ABISELECT(5184,3020), //bcp->offset
    66, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19917C7,    ABISELECT(1392,820), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C5,    ABISELECT(35760,20716), //bcp->offset
    89, //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
    14, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19917C13,    ABISELECT(5456,3176), //bcp->offset
    75, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    16, //immediately_derived
  0, 0},
  {&cd_S19917C14,    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
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19917C5,    ABISELECT(1040,600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19917C4,    ABISELECT(1040,600), //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
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19917C6[];
extern void _ZN8S19917C6D1Ev();
extern void _ZN8S19917C6D0Ev();
extern void _ZN8S19917C62v9Ev();
extern void ABISELECT(_ZThn1040_N8S19917C6D1Ev,_ZThn600_N8S19917C6D1Ev)();
extern void ABISELECT(_ZThn1040_N8S19917C6D0Ev,_ZThn600_N8S19917C6D0Ev)();
extern void _ZN8S19917C42v6Ev();
extern void _ZN8S19917C42v7Ev();
extern void ABISELECT(_ZTv0_n64_N8S19917C6D1Ev,_ZTv0_n32_N8S19917C6D1Ev)();
extern void ABISELECT(_ZThn1392_N8S19917C6D1Ev,_ZThn820_N8S19917C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19917C6D0Ev,_ZTv0_n32_N8S19917C6D0Ev)();
extern void ABISELECT(_ZThn1392_N8S19917C6D0Ev,_ZThn820_N8S19917C6D0Ev)() __attribute__((weak));
extern void _ZN8S19917C82v4Ev();
extern void ABISELECT(_ZTvn64_n64_N8S19917C6D1Ev,_ZTvn32_n32_N8S19917C6D1Ev)();
extern void ABISELECT(_ZTvn64_n64_N8S19917C6D0Ev,_ZTvn32_n32_N8S19917C6D0Ev)();
extern void _ZN9S19917C112v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev)();
extern void ABISELECT(_ZThn3648_N8S19917C6D1Ev,_ZThn2148_N8S19917C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev)();
extern void ABISELECT(_ZThn3648_N8S19917C6D0Ev,_ZThn2148_N8S19917C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19917C6D1Ev,_ZTv0_n16_N8S19917C6D1Ev)();
extern void ABISELECT(_ZThn4000_N8S19917C6D1Ev,_ZThn2348_N8S19917C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19917C6D0Ev,_ZTv0_n16_N8S19917C6D0Ev)();
extern void ABISELECT(_ZThn4000_N8S19917C6D0Ev,_ZThn2348_N8S19917C6D0Ev)() __attribute__((weak));
extern void _ZN8S19917C82v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev)();
extern void ABISELECT(_ZThn4064_N8S19917C6D1Ev,_ZThn2380_N8S19917C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev)();
extern void ABISELECT(_ZThn4064_N8S19917C6D0Ev,_ZThn2380_N8S19917C6D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev)();
extern void ABISELECT(_ZThn4512_N8S19917C6D1Ev,_ZThn2640_N8S19917C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev)();
extern void ABISELECT(_ZThn4512_N8S19917C6D0Ev,_ZThn2640_N8S19917C6D0Ev)() __attribute__((weak));
extern void _ZN9S19917C112v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev)();
extern void ABISELECT(_ZThn5184_N8S19917C6D1Ev,_ZThn3020_N8S19917C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev)();
extern void ABISELECT(_ZThn5184_N8S19917C6D0Ev,_ZThn3020_N8S19917C6D0Ev)() __attribute__((weak));
extern void _ZN8S19917C42v6Ev();
extern void _ZN8S19917C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S19917C6D1Ev,_ZTv0_n40_N8S19917C6D1Ev)();
extern void ABISELECT(_ZThn5456_N8S19917C6D1Ev,_ZThn3176_N8S19917C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19917C6D0Ev,_ZTv0_n40_N8S19917C6D0Ev)();
extern void ABISELECT(_ZThn5456_N8S19917C6D0Ev,_ZThn3176_N8S19917C6D0Ev)() __attribute__((weak));
extern void _ZN9S19917C132v8Ev();
extern void ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev)();
extern void ABISELECT(_ZThn35760_N8S19917C6D1Ev,_ZThn20716_N8S19917C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev)();
extern void ABISELECT(_ZThn35760_N8S19917C6D0Ev,_ZThn20716_N8S19917C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19917C6[] = {
  ABISELECT(5456,3176),
  ABISELECT(5184,3020),
  ABISELECT(4512,2640),
  ABISELECT(4000,2348),
  ABISELECT(3648,2148),
  ABISELECT(1392,820),
  ABISELECT(35760,20716),
  ABISELECT(4064,2380),
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&_ZN8S19917C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C62v9Ev,
  ABISELECT(-1040,-600),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1040_N8S19917C6D1Ev,_ZThn600_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1040_N8S19917C6D0Ev,_ZThn600_N8S19917C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19917C42v7Ev,
  ABISELECT(64,32),
  0,
  ABISELECT(-1392,-820),
  ABISELECT(3792,2200),
  ABISELECT(3120,1820),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  ABISELECT(-1392,-820),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19917C6D1Ev,_ZTv0_n32_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19917C6D0Ev,_ZTv0_n32_N8S19917C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
  ABISELECT(-1456,-852),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S19917C6D1Ev,_ZTvn32_n32_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S19917C6D0Ev,_ZTvn32_n32_N8S19917C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
  ABISELECT(-3648,-2148),
  ABISELECT(-3648,-2148),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev),
  0,
  ABISELECT(-4000,-2348),
  ABISELECT(64,32),
  ABISELECT(-4000,-2348),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19917C6D1Ev,_ZTv0_n16_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19917C6D0Ev,_ZTv0_n16_N8S19917C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
  0,
  0,
  ABISELECT(-4064,-2380),
  ABISELECT(-4064,-2380),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
  0,
  ABISELECT(-4512,-2640),
  ABISELECT(-4512,-2640),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
  0,
  0,
  ABISELECT(-5184,-3020),
  ABISELECT(-5184,-3020),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19917C42v7Ev,
  0,
  ABISELECT(-5456,-3176),
  ABISELECT(-272,-156),
  ABISELECT(-1392,-796),
  ABISELECT(-1456,-828),
  ABISELECT(-1808,-1028),
  ABISELECT(-4064,-2356),
  ABISELECT(-944,-536),
  ABISELECT(30304,17540),
  ABISELECT(-5456,-3176),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19917C6D1Ev,_ZTv0_n40_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19917C6D0Ev,_ZTv0_n40_N8S19917C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C132v8Ev,
  ABISELECT(-35760,-20716),
  ABISELECT(-35760,-20716),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S19917C6[];
extern void _ZN9S19917C14D1Ev();
extern void _ZN9S19917C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19917C14__8S19917C6[] = {
  ABISELECT(35760,20716),
  ABISELECT(4064,2380),
  0,
  (VTBL_ENTRY)&(_ZTI9S19917C14[0]),
  (VTBL_ENTRY)&_ZN9S19917C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19917C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C14D1Ev,_ZTv0_n12_N9S19917C14D1Ev)();
extern void ABISELECT(_ZThn4064_N9S19917C14D1Ev,_ZThn2380_N9S19917C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C14D0Ev,_ZTv0_n12_N9S19917C14D0Ev)();
extern void ABISELECT(_ZThn4064_N9S19917C14D0Ev,_ZThn2380_N9S19917C14D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__9S19917C14__8S19917C6[] = {
  0,
  0,
  ABISELECT(-4064,-2380),
  ABISELECT(-4064,-2380),
  (VTBL_ENTRY)&(_ZTI9S19917C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C14D1Ev,_ZTv0_n12_N9S19917C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C14D0Ev,_ZTv0_n12_N9S19917C14D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C14D1Ev,_ZTv0_n12_N9S19917C14D1Ev)();
extern void ABISELECT(_ZThn35760_N9S19917C14D1Ev,_ZThn20716_N9S19917C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C14D0Ev,_ZTv0_n12_N9S19917C14D0Ev)();
extern void ABISELECT(_ZThn35760_N9S19917C14D0Ev,_ZThn20716_N9S19917C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C5__A1__9S19917C14__8S19917C6[] = {
  ABISELECT(-35760,-20716),
  ABISELECT(-35760,-20716),
  (VTBL_ENTRY)&(_ZTI9S19917C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C14D1Ev,_ZTv0_n12_N9S19917C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C14D0Ev,_ZTv0_n12_N9S19917C14D0Ev),
};
extern void _ZN8S19917C7D1Ev();
extern void _ZN8S19917C7D0Ev();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C7__8S19917C6[] = {
  ABISELECT(3792,2200),
  ABISELECT(3120,1820),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&_ZN8S19917C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void _ZN9S19917C10D1Ev();
extern void _ZN9S19917C10D0Ev();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19917C108S19917C7__8S19917C6[] = {
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI9S19917C10[0]),
  (VTBL_ENTRY)&_ZN9S19917C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19917C10D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void _ZN8S19917C8D1Ev();
extern void _ZN8S19917C8D0Ev();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C89S19917C108S19917C7__A1__8S19917C6[] = {
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&_ZN8S19917C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev)();
extern void ABISELECT(_ZThn2672_N8S19917C8D1Ev,_ZThn1560_N8S19917C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev)();
extern void ABISELECT(_ZThn2672_N8S19917C8D0Ev,_ZThn1560_N8S19917C8D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__8S19917C89S19917C108S19917C7__A1__8S19917C6[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19917C10D1Ev,_ZThn1560_N9S19917C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev)();
extern void ABISELECT(_ZThn2672_N9S19917C10D0Ev,_ZThn1560_N9S19917C10D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__9S19917C108S19917C7__8S19917C6[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI9S19917C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev)();
extern void ABISELECT(_ZThn2256_N9S19917C10D1Ev,_ZThn1328_N9S19917C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev)();
extern void ABISELECT(_ZThn2256_N9S19917C10D0Ev,_ZThn1328_N9S19917C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__9S19917C108S19917C7__8S19917C6[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI9S19917C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn2256_N8S19917C7D1Ev,_ZThn1328_N8S19917C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev)();
extern void ABISELECT(_ZThn2256_N8S19917C7D0Ev,_ZThn1328_N8S19917C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__8S19917C7__8S19917C6[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19917C7D1Ev,_ZTv0_n16_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn2608_N8S19917C7D1Ev,_ZThn1528_N8S19917C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19917C7D0Ev,_ZTv0_n16_N8S19917C7D0Ev)();
extern void ABISELECT(_ZThn2608_N8S19917C7D0Ev,_ZThn1528_N8S19917C7D0Ev)() __attribute__((weak));
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C8__8S19917C7__8S19917C6[] = {
  0,
  ABISELECT(-2608,-1528),
  ABISELECT(64,32),
  ABISELECT(-2608,-1528),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19917C7D1Ev,_ZTv0_n16_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19917C7D0Ev,_ZTv0_n16_N8S19917C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn2672_N8S19917C7D1Ev,_ZThn1560_N8S19917C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev)();
extern void ABISELECT(_ZThn2672_N8S19917C7D0Ev,_ZThn1560_N8S19917C7D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__8S19917C7__8S19917C6[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn3120_N8S19917C7D1Ev,_ZThn1820_N8S19917C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev)();
extern void ABISELECT(_ZThn3120_N8S19917C7D0Ev,_ZThn1820_N8S19917C7D0Ev)() __attribute__((weak));
extern void _ZN9S19917C112v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19917C11__A1__8S19917C7__8S19917C6[] = {
  0,
  ABISELECT(-3120,-1820),
  ABISELECT(-3120,-1820),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn3792_N8S19917C7D1Ev,_ZThn2200_N8S19917C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev)();
extern void ABISELECT(_ZThn3792_N8S19917C7D0Ev,_ZThn2200_N8S19917C7D0Ev)() __attribute__((weak));
extern void _ZN8S19917C42v6Ev();
extern void _ZN8S19917C42v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C4__8S19917C7__8S19917C6[] = {
  0,
  0,
  ABISELECT(-3792,-2200),
  ABISELECT(-3792,-2200),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19917C42v7Ev,
};
extern void _ZN8S19917C8D1Ev();
extern void _ZN8S19917C8D0Ev();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C8__8S19917C6[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&_ZN8S19917C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S19917C8D1Ev,_ZThn32_N8S19917C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S19917C8D0Ev,_ZThn32_N8S19917C8D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__8S19917C8__8S19917C6[] = {
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern void _ZN9S19917C13D1Ev();
extern void _ZN9S19917C13D0Ev();
extern void _ZN9S19917C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19917C13__8S19917C6[] = {
  ABISELECT(-272,-156),
  ABISELECT(-1392,-796),
  ABISELECT(-1456,-828),
  ABISELECT(-1808,-1028),
  ABISELECT(-4064,-2356),
  ABISELECT(-944,-536),
  ABISELECT(30304,17540),
  0,
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&_ZN9S19917C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19917C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19917C132v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev)();
extern void ABISELECT(_ZThn30304_N9S19917C13D1Ev,_ZThn17540_N9S19917C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev)();
extern void ABISELECT(_ZThn30304_N9S19917C13D0Ev,_ZThn17540_N9S19917C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C5__9S19917C13__8S19917C6[] = {
  ABISELECT(-30304,-17540),
  ABISELECT(-30304,-17540),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev)();
extern void _ZN9S19917C112v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19917C11__9S19917C13__8S19917C6[] = {
  0,
  ABISELECT(944,536),
  ABISELECT(944,536),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
};
extern void ABISELECT(_ZTv0_n64_N9S19917C13D1Ev,_ZTv0_n32_N9S19917C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19917C13D0Ev,_ZTv0_n32_N9S19917C13D0Ev)();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C7__9S19917C13__8S19917C6[] = {
  ABISELECT(64,32),
  0,
  ABISELECT(4064,2356),
  ABISELECT(3792,2200),
  ABISELECT(3120,1820),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  ABISELECT(4064,2356),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19917C13D1Ev,_ZTv0_n32_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19917C13D0Ev,_ZTv0_n32_N9S19917C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19917C3__9S19917C13__8S19917C6[] = {
  ABISELECT(1808,1028),
  ABISELECT(1808,1028),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19917C13D1Ev,_ZTv0_n16_N9S19917C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19917C13D0Ev,_ZTv0_n16_N9S19917C13D0Ev)();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C8__9S19917C13__8S19917C6[] = {
  0,
  ABISELECT(1456,828),
  ABISELECT(64,32),
  ABISELECT(1456,828),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19917C13D1Ev,_ZTv0_n16_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19917C13D0Ev,_ZTv0_n16_N9S19917C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev)();
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__9S19917C13__8S19917C6[] = {
  0,
  0,
  ABISELECT(1392,796),
  ABISELECT(1392,796),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern void ABISELECT(_ZTvn64_n64_N9S19917C13D1Ev,_ZTvn32_n32_N9S19917C13D1Ev)();
extern void ABISELECT(_ZTvn64_n64_N9S19917C13D0Ev,_ZTvn32_n32_N9S19917C13D0Ev)();
extern void _ZN9S19917C112v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19917C119S19917C108S19917C7__A1__9S19917C13__8S19917C6[] = {
  ABISELECT(4000,2324),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N9S19917C13D1Ev,_ZTvn32_n32_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N9S19917C13D0Ev,_ZTvn32_n32_N9S19917C13D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev)();
extern void _ZN8S19917C42v6Ev();
extern void _ZN8S19917C42v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C4__9S19917C13__8S19917C6[] = {
  0,
  0,
  ABISELECT(272,156),
  ABISELECT(272,156),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19917C42v7Ev,
};
static  VTT_ENTRY vtt_S19917C6[] = {
  {&(_ZTV8S19917C6[10]),  10,94},
  {&(_tg__ZTV9S19917C14__8S19917C6[4]),  4,6},
  {&(_tg__ZTV8S19917C9__9S19917C14__8S19917C6[5]),  5,9},
  {&(_tg__ZTV8S19917C5__A1__9S19917C14__8S19917C6[3]),  3,5},
  {&(_ZTV8S19917C6[29]),  29,94},
  {&(_ZTV8S19917C6[40]),  40,94},
  {&(_ZTV8S19917C6[47]),  47,94},
  {&(_ZTV8S19917C6[55]),  55,94},
  {&(_ZTV8S19917C6[34]),  34,94},
  {&(_ZTV8S19917C6[63]),  63,94},
  {&(_ZTV8S19917C6[71]),  71,94},
  {&(_ZTV8S19917C6[86]),  86,94},
  {&(_ZTV8S19917C6[92]),  92,94},
  {&(_tg__ZTV8S19917C7__8S19917C6[7]),  7,10},
  {&(_tg__ZTV9S19917C108S19917C7__8S19917C6[4]),  4,7},
  {&(_tg__ZTV8S19917C89S19917C108S19917C7__A1__8S19917C6[3]),  3,6},
  {&(_tg__ZTV8S19917C9__8S19917C89S19917C108S19917C7__A1__8S19917C6[5]),  5,9},
  {&(_tg__ZTV8S19917C9__9S19917C108S19917C7__8S19917C6[5]),  5,9},
  {&(_tg__ZTV8S19917C3__9S19917C108S19917C7__8S19917C6[3]),  3,5},
  {&(_tg__ZTV8S19917C3__8S19917C7__8S19917C6[3]),  3,5},
  {&(_tg__ZTV8S19917C8__8S19917C7__8S19917C6[5]),  5,8},
  {&(_tg__ZTV8S19917C9__8S19917C7__8S19917C6[5]),  5,9},
  {&(_tg__ZTV9S19917C11__A1__8S19917C7__8S19917C6[4]),  4,7},
  {&(_tg__ZTV8S19917C4__8S19917C7__8S19917C6[5]),  5,9},
  {&(_tg__ZTV8S19917C8__8S19917C6[3]),  3,6},
  {&(_tg__ZTV8S19917C9__8S19917C8__8S19917C6[5]),  5,9},
  {&(_tg__ZTV9S19917C13__8S19917C6[9]),  9,12},
  {&(_tg__ZTV8S19917C5__9S19917C13__8S19917C6[3]),  3,5},
  {&(_tg__ZTV9S19917C11__9S19917C13__8S19917C6[4]),  4,7},
  {&(_tg__ZTV8S19917C7__9S19917C13__8S19917C6[10]),  10,13},
  {&(_tg__ZTV8S19917C3__9S19917C13__8S19917C6[3]),  3,5},
  {&(_tg__ZTV8S19917C8__9S19917C13__8S19917C6[5]),  5,8},
  {&(_tg__ZTV8S19917C9__9S19917C13__8S19917C6[5]),  5,9},
  {&(_tg__ZTV9S19917C119S19917C108S19917C7__A1__9S19917C13__8S19917C6[2]),  2,5},
  {&(_tg__ZTV8S19917C4__9S19917C13__8S19917C6[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S19917C6[];
extern  VTBL_ENTRY _ZTV8S19917C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19917C6[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30304_N9S19917C13D0Ev,_ZThn17540_N9S19917C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30304_N9S19917C13D1Ev,_ZThn17540_N9S19917C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19917C7D0Ev,_ZTv0_n16_N8S19917C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S19917C7D0Ev,_ZThn1528_N8S19917C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19917C7D1Ev,_ZTv0_n16_N8S19917C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S19917C7D1Ev,_ZThn1528_N8S19917C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3792_N8S19917C7D0Ev,_ZThn2200_N8S19917C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N8S19917C7D0Ev,_ZThn1820_N8S19917C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19917C7D0Ev,_ZThn1560_N8S19917C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S19917C7D0Ev,_ZThn1328_N8S19917C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3792_N8S19917C7D1Ev,_ZThn2200_N8S19917C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N8S19917C7D1Ev,_ZThn1820_N8S19917C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19917C7D1Ev,_ZThn1560_N8S19917C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S19917C7D1Ev,_ZThn1328_N8S19917C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S19917C10D0Ev,_ZThn1328_N9S19917C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19917C10D0Ev,_ZThn1560_N9S19917C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S19917C10D1Ev,_ZThn1328_N9S19917C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19917C10D1Ev,_ZThn1560_N9S19917C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19917C8D0Ev,_ZThn32_N8S19917C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19917C8D0Ev,_ZThn1560_N8S19917C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19917C8D1Ev,_ZThn32_N8S19917C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19917C8D1Ev,_ZThn1560_N8S19917C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C14D0Ev,_ZTv0_n12_N9S19917C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35760_N9S19917C14D0Ev,_ZThn20716_N9S19917C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4064_N9S19917C14D0Ev,_ZThn2380_N9S19917C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C14D1Ev,_ZTv0_n12_N9S19917C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35760_N9S19917C14D1Ev,_ZThn20716_N9S19917C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4064_N9S19917C14D1Ev,_ZThn2380_N9S19917C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19917C6D0Ev,_ZTv0_n40_N8S19917C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S19917C6D0Ev,_ZThn3176_N8S19917C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19917C6D1Ev,_ZTv0_n40_N8S19917C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S19917C6D1Ev,_ZThn3176_N8S19917C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19917C6D0Ev,_ZTv0_n16_N8S19917C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4000_N8S19917C6D0Ev,_ZThn2348_N8S19917C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19917C6D1Ev,_ZTv0_n16_N8S19917C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4000_N8S19917C6D1Ev,_ZThn2348_N8S19917C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35760_N8S19917C6D0Ev,_ZThn20716_N8S19917C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5184_N8S19917C6D0Ev,_ZThn3020_N8S19917C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4512_N8S19917C6D0Ev,_ZThn2640_N8S19917C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4064_N8S19917C6D0Ev,_ZThn2380_N8S19917C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S19917C6D0Ev,_ZThn2148_N8S19917C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35760_N8S19917C6D1Ev,_ZThn20716_N8S19917C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5184_N8S19917C6D1Ev,_ZThn3020_N8S19917C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4512_N8S19917C6D1Ev,_ZThn2640_N8S19917C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4064_N8S19917C6D1Ev,_ZThn2380_N8S19917C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S19917C6D1Ev,_ZThn2148_N8S19917C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19917C6D0Ev,_ZTv0_n32_N8S19917C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S19917C6D0Ev,_ZThn820_N8S19917C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19917C6D1Ev,_ZTv0_n32_N8S19917C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S19917C6D1Ev,_ZThn820_N8S19917C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19917C6 = {  "S19917C6", // class name
  bases_S19917C6, 19,
  &(vtc_S19917C6[0]), // expected_vtbl_contents
  &(vtt_S19917C6[0]), // expected_vtt_contents
  ABISELECT(35808,20744), // object size
  NSPAIRA(_ZTI8S19917C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19917C6),94, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19917C6),35, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19917C1  : virtual S19917C2 , virtual S19917C3 , S19917C6 {
  __tsi64 s19917c1f0;
  void *s19917c1f1;
  int s19917c1f2[2];
  virtual  ~S19917C1(); // _ZN8S19917C1D2Ev
  S19917C1(); // tgen
};
//SIG(1 S19917C1) C1{ VBC2{ v1 FL Fi FL Fp Fi Fp FD FL[6] Fp} VBC3{ vd m FC4{ BC5{ vd m Fp FD Fi Fp} vd v6 v7 Fi Fp[4] FD[5] Fp[2] FC5 Fl[3]} FD[3] Fp} BC6{ VBC7{ VBC3 VBC8{ VBC9{ BC5 v2 v3 FL[2] FC5 Fi[3] Fp[4] FC4 Fc:5} BC5 vd v4 Fi} BC10{ VBC9 BC8 BC11{ vd v5 FL Fi FC4 Fi FC5 Fp Fi FC4 FD} VBC3 vd FC12{} FD[10] FC8 FC11 Fi} VBC11 VBC4 vd Fi Fc Fc:8 FD[8] Fi Fc Fp} VBC13{ VBC5 VBC11 VBC7 vd v8 Fs FC7[5] FC10 Fi Fp Fc:8 FC10 Fi FL[3] FC7 FD} BC14{ VBC9 VBC5 BC3 FC12 Fp FD[3] FC3 FC4} BC4 v9 Fp[4] Fs Fi[9] Fp Fc:1} vd FL Fp Fi[2]}


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

static void Test_S19917C1()
{
  extern Class_Descriptor cd_S19917C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2250,5217)];
    init_test(&cd_S19917C1, buf);
    S19917C1 *dp, &lv = *(dp=new (buf) S19917C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(35984,20864), "sizeof(S19917C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19917C1)");
    check_base_class_offset(lv, (S19917C2*), ABISELECT(1424,840), "S19917C1");
    /*is_ambiguous_... S19917C1::S19917C3 */ AMB_check_base_class_offset(lv, (S19917C3*), ABISELECT(1568,940), "S19917C1");
    check_base_class_offset(lv, (S19917C3*)(S19917C7*), ABISELECT(1568,940), "S19917C1");
    check_base_class_offset(lv, (S19917C3*)(S19917C10*)(S19917C7*), ABISELECT(1568,940), "S19917C1");
    check_base_class_offset(lv, (S19917C5*)(S19917C9*), ABISELECT(4240,2500), "S19917C1");
    /*is_ambiguous_... S19917C1::S19917C8 */ AMB_check_base_class_offset(lv, (S19917C9*)(S19917C8*), ABISELECT(4240,2500), "S19917C1");
    check_base_class_offset(lv, (S19917C9*)(S19917C10*)(S19917C7*), ABISELECT(4240,2500), "S19917C1");
    check_base_class_offset(lv, (S19917C9*)(S19917C8*)(S19917C10*)(S19917C7*), ABISELECT(4240,2500), "S19917C1");
    check_base_class_offset(lv, (S19917C9*)(S19917C14*)(S19917C6*), ABISELECT(4240,2500), "S19917C1");
    /*is_ambiguous_... S19917C1::S19917C8 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19917C8*), ABISELECT(4176,2468), "S19917C1");
    /*is_ambiguous_... S19917C7::S19917C8 */ AMB_check_base_class_offset(lv, (S19917C8*)(S19917C7*), ABISELECT(4176,2468), "S19917C1");
    /*is_ambiguous_... S19917C8::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19917C8*)(S19917C10*)(S19917C7*), ABISELECT(1920,1140), "S19917C1");
    check_base_class_offset(lv, (S19917C8*)(S19917C10*)(S19917C7*), ABISELECT(1920,1140), "S19917C1");
    check_base_class_offset(lv, (S19917C11*)(S19917C10*)(S19917C7*), ABISELECT(1984,1172), "S19917C1");
    check_base_class_offset(lv, (S19917C10*)(S19917C7*), ABISELECT(1920,1140), "S19917C1");
    /*is_ambiguous_... S19917C7::S19917C11 */ AMB_check_base_class_offset(lv, (S19917C11*)(S19917C7*), ABISELECT(4688,2760), "S19917C1");
    /*is_ambiguous_... S19917C13::S19917C11 */ AMB_check_base_class_offset(lv, (S19917C11*)(S19917C13*), ABISELECT(4688,2760), "S19917C1");
    /*is_ambiguous_... S19917C1::S19917C4 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19917C4*), ABISELECT(5360,3140), "S19917C1");
    check_base_class_offset(lv, (S19917C4*)(S19917C7*), ABISELECT(5360,3140), "S19917C1");
    check_base_class_offset(lv, (S19917C7*)(S19917C6*), ABISELECT(1920,1140), "S19917C1");
    check_base_class_offset(lv, (S19917C7*)(S19917C13*), ABISELECT(1920,1140), "S19917C1");
    /*is_ambiguous_... S19917C13::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19917C13*), ABISELECT(35936,20836), "S19917C1");
    /*is_ambiguous_... S19917C14::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19917C14*)(S19917C6*), ABISELECT(35936,20836), "S19917C1");
    check_base_class_offset(lv, (S19917C13*)(S19917C6*), ABISELECT(5632,3296), "S19917C1");
    check_base_class_offset(lv, (S19917C3*)(S19917C14*)(S19917C6*), 0, "S19917C1");
    check_base_class_offset(lv, (S19917C14*)(S19917C6*), 0, "S19917C1");
    /*is_ambiguous_... S19917C6::S19917C4 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19917C4*)(S19917C6*), ABISELECT(1040,600), "S19917C1");
    /*is_ambiguous_... S19917C6::S19917C4 */ AMB_check_base_class_offset(lv, (S19917C4*)(S19917C6*), ABISELECT(1040,600), "S19917C1");
    check_base_class_offset(lv, (S19917C6*), 0, "S19917C1");
    check_field_offset(lv, s19917c1f0, ABISELECT(1392,820), "S19917C1.s19917c1f0");
    check_field_offset(lv, s19917c1f1, ABISELECT(1400,828), "S19917C1.s19917c1f1");
    check_field_offset(lv, s19917c1f2, ABISELECT(1408,832), "S19917C1.s19917c1f2");
    test_class_info(&lv, &cd_S19917C1);
    dp->~S19917C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19917C1(Test_S19917C1, "S19917C1", ABISELECT(35984,20864));

#else // __cplusplus

extern void _ZN8S19917C1C1Ev();
extern void _ZN8S19917C1D2Ev();
Name_Map name_map_S19917C1[] = {
  NSPAIR(_ZN8S19917C1C1Ev),
  NSPAIR(_ZN8S19917C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C2;
extern VTBL_ENTRY _ZTI8S19917C2[];
extern  VTBL_ENTRY _ZTV8S19917C2[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C9;
extern VTBL_ENTRY _ZTI8S19917C9[];
extern  VTBL_ENTRY _ZTV8S19917C9[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C8;
extern VTBL_ENTRY _ZTI8S19917C8[];
extern  VTBL_ENTRY _ZTV8S19917C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19917C8[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C8;
extern VTBL_ENTRY _ZTI8S19917C8[];
extern  VTBL_ENTRY _ZTV8S19917C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19917C8[];
extern Class_Descriptor cd_S19917C11;
extern VTBL_ENTRY _ZTI9S19917C11[];
extern  VTBL_ENTRY _ZTV9S19917C11[];
extern Class_Descriptor cd_S19917C10;
extern VTBL_ENTRY _ZTI9S19917C10[];
extern  VTBL_ENTRY _ZTV9S19917C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19917C10[];
extern Class_Descriptor cd_S19917C11;
extern VTBL_ENTRY _ZTI9S19917C11[];
extern  VTBL_ENTRY _ZTV9S19917C11[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C4;
extern VTBL_ENTRY _ZTI8S19917C4[];
extern  VTBL_ENTRY _ZTV8S19917C4[];
extern Class_Descriptor cd_S19917C7;
extern VTBL_ENTRY _ZTI8S19917C7[];
extern  VTBL_ENTRY _ZTV8S19917C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19917C7[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C13;
extern VTBL_ENTRY _ZTI9S19917C13[];
extern  VTBL_ENTRY _ZTV9S19917C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19917C13[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
extern Class_Descriptor cd_S19917C14;
extern VTBL_ENTRY _ZTI9S19917C14[];
extern  VTBL_ENTRY _ZTV9S19917C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19917C14[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C4;
extern VTBL_ENTRY _ZTI8S19917C4[];
extern  VTBL_ENTRY _ZTV8S19917C4[];
extern Class_Descriptor cd_S19917C6;
extern VTBL_ENTRY _ZTI8S19917C6[];
extern  VTBL_ENTRY _ZTV8S19917C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19917C6[];
static Base_Class bases_S19917C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C2,    ABISELECT(1424,840), //bcp->offset
    20, //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
  1, 1},
  {&cd_S19917C3,    ABISELECT(1568,940), //bcp->offset
    24, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C5,    ABISELECT(4240,2500), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19917C9,    ABISELECT(4240,2500), //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
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(4176,2468), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19917C8,    ABISELECT(4176,2468), //bcp->offset
    47, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(1920,1140), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S19917C8,    ABISELECT(1920,1140), //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
    11, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19917C11,    ABISELECT(1984,1172), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19917C10,    ABISELECT(1920,1140), //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
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19917C11,    ABISELECT(4688,2760), //bcp->offset
    64, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(5360,3140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19917C4,    ABISELECT(5360,3140), //bcp->offset
    71, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19917C7,    ABISELECT(1920,1140), //bcp->offset
    29, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(35936,20836), //bcp->offset
    94, //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
    15, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19917C13,    ABISELECT(5632,3296), //bcp->offset
    80, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S19917C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19917C14,    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
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19917C5,    ABISELECT(1040,600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19917C4,    ABISELECT(1040,600), //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
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19917C6,    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
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19917C1[];
extern void _ZN8S19917C1D1Ev();
extern void _ZN8S19917C1D0Ev();
extern void _ZN8S19917C62v9Ev();
extern void ABISELECT(_ZThn1040_N8S19917C1D1Ev,_ZThn600_N8S19917C1D1Ev)();
extern void ABISELECT(_ZThn1040_N8S19917C1D0Ev,_ZThn600_N8S19917C1D0Ev)();
extern void _ZN8S19917C42v6Ev();
extern void _ZN8S19917C42v7Ev();
extern void _ZN8S19917C22v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S19917C1D1Ev,_ZTv0_n12_N8S19917C1D1Ev)();
extern void ABISELECT(_ZThn1568_N8S19917C1D1Ev,_ZThn940_N8S19917C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C1D0Ev,_ZTv0_n12_N8S19917C1D0Ev)();
extern void ABISELECT(_ZThn1568_N8S19917C1D0Ev,_ZThn940_N8S19917C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19917C1D1Ev,_ZTv0_n32_N8S19917C1D1Ev)();
extern void ABISELECT(_ZThn1920_N8S19917C1D1Ev,_ZThn1140_N8S19917C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19917C1D0Ev,_ZTv0_n32_N8S19917C1D0Ev)();
extern void ABISELECT(_ZThn1920_N8S19917C1D0Ev,_ZThn1140_N8S19917C1D0Ev)() __attribute__((weak));
extern void _ZN8S19917C82v4Ev();
extern void ABISELECT(_ZTvn64_n64_N8S19917C1D1Ev,_ZTvn32_n32_N8S19917C1D1Ev)();
extern void ABISELECT(_ZTvn64_n64_N8S19917C1D0Ev,_ZTvn32_n32_N8S19917C1D0Ev)();
extern void _ZN9S19917C112v5Ev();
extern void ABISELECT(_ZTv0_n32_N8S19917C1D1Ev,_ZTv0_n16_N8S19917C1D1Ev)();
extern void ABISELECT(_ZThn4176_N8S19917C1D1Ev,_ZThn2468_N8S19917C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19917C1D0Ev,_ZTv0_n16_N8S19917C1D0Ev)();
extern void ABISELECT(_ZThn4176_N8S19917C1D0Ev,_ZThn2468_N8S19917C1D0Ev)() __attribute__((weak));
extern void _ZN8S19917C82v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S19917C1D1Ev,_ZTv0_n12_N8S19917C1D1Ev)();
extern void ABISELECT(_ZThn4240_N8S19917C1D1Ev,_ZThn2500_N8S19917C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C1D0Ev,_ZTv0_n12_N8S19917C1D0Ev)();
extern void ABISELECT(_ZThn4240_N8S19917C1D0Ev,_ZThn2500_N8S19917C1D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S19917C1D1Ev,_ZTv0_n12_N8S19917C1D1Ev)();
extern void ABISELECT(_ZThn4688_N8S19917C1D1Ev,_ZThn2760_N8S19917C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C1D0Ev,_ZTv0_n12_N8S19917C1D0Ev)();
extern void ABISELECT(_ZThn4688_N8S19917C1D0Ev,_ZThn2760_N8S19917C1D0Ev)() __attribute__((weak));
extern void _ZN9S19917C112v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S19917C1D1Ev,_ZTv0_n12_N8S19917C1D1Ev)();
extern void ABISELECT(_ZThn5360_N8S19917C1D1Ev,_ZThn3140_N8S19917C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C1D0Ev,_ZTv0_n12_N8S19917C1D0Ev)();
extern void ABISELECT(_ZThn5360_N8S19917C1D0Ev,_ZThn3140_N8S19917C1D0Ev)() __attribute__((weak));
extern void _ZN8S19917C42v6Ev();
extern void _ZN8S19917C42v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S19917C1D1Ev,_ZTv0_n40_N8S19917C1D1Ev)();
extern void ABISELECT(_ZThn5632_N8S19917C1D1Ev,_ZThn3296_N8S19917C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19917C1D0Ev,_ZTv0_n40_N8S19917C1D0Ev)();
extern void ABISELECT(_ZThn5632_N8S19917C1D0Ev,_ZThn3296_N8S19917C1D0Ev)() __attribute__((weak));
extern void _ZN9S19917C132v8Ev();
extern void ABISELECT(_ZTv0_n24_N8S19917C1D1Ev,_ZTv0_n12_N8S19917C1D1Ev)();
extern void ABISELECT(_ZThn35936_N8S19917C1D1Ev,_ZThn20836_N8S19917C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C1D0Ev,_ZTv0_n12_N8S19917C1D0Ev)();
extern void ABISELECT(_ZThn35936_N8S19917C1D0Ev,_ZThn20836_N8S19917C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19917C1[] = {
  ABISELECT(1424,840),
  ABISELECT(5632,3296),
  ABISELECT(5360,3140),
  ABISELECT(4688,2760),
  ABISELECT(4176,2468),
  ABISELECT(1568,940),
  ABISELECT(1920,1140),
  ABISELECT(35936,20836),
  ABISELECT(4240,2500),
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C1[0]),
  (VTBL_ENTRY)&_ZN8S19917C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C62v9Ev,
  ABISELECT(-1040,-600),
  (VTBL_ENTRY)&(_ZTI8S19917C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1040_N8S19917C1D1Ev,_ZThn600_N8S19917C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1040_N8S19917C1D0Ev,_ZThn600_N8S19917C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19917C42v7Ev,
  0,
  ABISELECT(-1424,-840),
  (VTBL_ENTRY)&(_ZTI8S19917C1[0]),
  (VTBL_ENTRY)&_ZN8S19917C22v1Ev,
  ABISELECT(-1568,-940),
  ABISELECT(-1568,-940),
  (VTBL_ENTRY)&(_ZTI8S19917C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C1D1Ev,_ZTv0_n12_N8S19917C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C1D0Ev,_ZTv0_n12_N8S19917C1D0Ev),
  ABISELECT(64,32),
  0,
  ABISELECT(-1920,-1140),
  ABISELECT(3440,2000),
  ABISELECT(2768,1620),
  ABISELECT(2256,1328),
  ABISELECT(-352,-200),
  ABISELECT(2320,1360),
  ABISELECT(-1920,-1140),
  (VTBL_ENTRY)&(_ZTI8S19917C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19917C1D1Ev,_ZTv0_n32_N8S19917C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19917C1D0Ev,_ZTv0_n32_N8S19917C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
  ABISELECT(-1984,-1172),
  (VTBL_ENTRY)&(_ZTI8S19917C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S19917C1D1Ev,_ZTvn32_n32_N8S19917C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S19917C1D0Ev,_ZTvn32_n32_N8S19917C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
  0,
  ABISELECT(-4176,-2468),
  ABISELECT(64,32),
  ABISELECT(-4176,-2468),
  (VTBL_ENTRY)&(_ZTI8S19917C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19917C1D1Ev,_ZTv0_n16_N8S19917C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19917C1D0Ev,_ZTv0_n16_N8S19917C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
  0,
  0,
  ABISELECT(-4240,-2500),
  ABISELECT(-4240,-2500),
  (VTBL_ENTRY)&(_ZTI8S19917C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C1D1Ev,_ZTv0_n12_N8S19917C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C1D0Ev,_ZTv0_n12_N8S19917C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
  0,
  ABISELECT(-4688,-2760),
  ABISELECT(-4688,-2760),
  (VTBL_ENTRY)&(_ZTI8S19917C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C1D1Ev,_ZTv0_n12_N8S19917C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C1D0Ev,_ZTv0_n12_N8S19917C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
  0,
  0,
  ABISELECT(-5360,-3140),
  ABISELECT(-5360,-3140),
  (VTBL_ENTRY)&(_ZTI8S19917C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C1D1Ev,_ZTv0_n12_N8S19917C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C1D0Ev,_ZTv0_n12_N8S19917C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19917C42v7Ev,
  0,
  ABISELECT(-5632,-3296),
  ABISELECT(-272,-156),
  ABISELECT(-1392,-796),
  ABISELECT(-1456,-828),
  ABISELECT(-4064,-2356),
  ABISELECT(-3712,-2156),
  ABISELECT(-944,-536),
  ABISELECT(30304,17540),
  ABISELECT(-5632,-3296),
  (VTBL_ENTRY)&(_ZTI8S19917C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19917C1D1Ev,_ZTv0_n40_N8S19917C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19917C1D0Ev,_ZTv0_n40_N8S19917C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C132v8Ev,
  ABISELECT(-35936,-20836),
  ABISELECT(-35936,-20836),
  (VTBL_ENTRY)&(_ZTI8S19917C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C1D1Ev,_ZTv0_n12_N8S19917C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C1D0Ev,_ZTv0_n12_N8S19917C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19917C1[];
extern void _ZN8S19917C6D1Ev();
extern void _ZN8S19917C6D0Ev();
extern void _ZN8S19917C62v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C6__8S19917C1[] = {
  ABISELECT(5632,3296),
  ABISELECT(5360,3140),
  ABISELECT(4688,2760),
  ABISELECT(4176,2468),
  ABISELECT(1568,940),
  ABISELECT(1920,1140),
  ABISELECT(35936,20836),
  ABISELECT(4240,2500),
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&_ZN8S19917C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C62v9Ev,
};
extern void _ZN9S19917C14D1Ev();
extern void _ZN9S19917C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19917C148S19917C6__8S19917C1[] = {
  ABISELECT(35936,20836),
  ABISELECT(4240,2500),
  0,
  (VTBL_ENTRY)&(_ZTI9S19917C14[0]),
  (VTBL_ENTRY)&_ZN9S19917C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19917C14D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C14D1Ev,_ZTv0_n12_N9S19917C14D1Ev)();
extern void ABISELECT(_ZThn4240_N9S19917C14D1Ev,_ZThn2500_N9S19917C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C14D0Ev,_ZTv0_n12_N9S19917C14D0Ev)();
extern void ABISELECT(_ZThn4240_N9S19917C14D0Ev,_ZThn2500_N9S19917C14D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__9S19917C148S19917C6__8S19917C1[] = {
  0,
  0,
  ABISELECT(-4240,-2500),
  ABISELECT(-4240,-2500),
  (VTBL_ENTRY)&(_ZTI9S19917C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C14D1Ev,_ZTv0_n12_N9S19917C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C14D0Ev,_ZTv0_n12_N9S19917C14D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C14D1Ev,_ZTv0_n12_N9S19917C14D1Ev)();
extern void ABISELECT(_ZThn35936_N9S19917C14D1Ev,_ZThn20836_N9S19917C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C14D0Ev,_ZTv0_n12_N9S19917C14D0Ev)();
extern void ABISELECT(_ZThn35936_N9S19917C14D0Ev,_ZThn20836_N9S19917C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C5__A1__9S19917C148S19917C6__8S19917C1[] = {
  ABISELECT(-35936,-20836),
  ABISELECT(-35936,-20836),
  (VTBL_ENTRY)&(_ZTI9S19917C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C14D1Ev,_ZTv0_n12_N9S19917C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C14D0Ev,_ZTv0_n12_N9S19917C14D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S19917C6D1Ev,_ZTv0_n32_N8S19917C6D1Ev)();
extern void ABISELECT(_ZThn1920_N8S19917C6D1Ev,_ZThn1140_N8S19917C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19917C6D0Ev,_ZTv0_n32_N8S19917C6D0Ev)();
extern void ABISELECT(_ZThn1920_N8S19917C6D0Ev,_ZThn1140_N8S19917C6D0Ev)() __attribute__((weak));
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C7__8S19917C6__8S19917C1[] = {
  ABISELECT(64,32),
  0,
  ABISELECT(-1920,-1140),
  ABISELECT(3440,2000),
  ABISELECT(2768,1620),
  ABISELECT(2256,1328),
  ABISELECT(-352,-200),
  ABISELECT(2320,1360),
  ABISELECT(-1920,-1140),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19917C6D1Ev,_ZTv0_n32_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19917C6D0Ev,_ZTv0_n32_N8S19917C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev)();
extern void ABISELECT(_ZThn1568_N8S19917C6D1Ev,_ZThn940_N8S19917C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev)();
extern void ABISELECT(_ZThn1568_N8S19917C6D0Ev,_ZThn940_N8S19917C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__8S19917C6__8S19917C1[] = {
  ABISELECT(-1568,-940),
  ABISELECT(-1568,-940),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19917C6D1Ev,_ZTv0_n16_N8S19917C6D1Ev)();
extern void ABISELECT(_ZThn4176_N8S19917C6D1Ev,_ZThn2468_N8S19917C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19917C6D0Ev,_ZTv0_n16_N8S19917C6D0Ev)();
extern void ABISELECT(_ZThn4176_N8S19917C6D0Ev,_ZThn2468_N8S19917C6D0Ev)() __attribute__((weak));
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C8__8S19917C6__8S19917C1[] = {
  0,
  ABISELECT(-4176,-2468),
  ABISELECT(64,32),
  ABISELECT(-4176,-2468),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19917C6D1Ev,_ZTv0_n16_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19917C6D0Ev,_ZTv0_n16_N8S19917C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev)();
extern void ABISELECT(_ZThn4240_N8S19917C6D1Ev,_ZThn2500_N8S19917C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev)();
extern void ABISELECT(_ZThn4240_N8S19917C6D0Ev,_ZThn2500_N8S19917C6D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__8S19917C6__8S19917C1[] = {
  0,
  0,
  ABISELECT(-4240,-2500),
  ABISELECT(-4240,-2500),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern void ABISELECT(_ZTvn64_n64_N8S19917C6D1Ev,_ZTvn32_n32_N8S19917C6D1Ev)();
extern void ABISELECT(_ZTvn64_n64_N8S19917C6D0Ev,_ZTvn32_n32_N8S19917C6D0Ev)();
extern void _ZN9S19917C112v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19917C119S19917C108S19917C7__8S19917C6__8S19917C1[] = {
  ABISELECT(-1984,-1172),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S19917C6D1Ev,_ZTvn32_n32_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S19917C6D0Ev,_ZTvn32_n32_N8S19917C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev)();
extern void ABISELECT(_ZThn4688_N8S19917C6D1Ev,_ZThn2760_N8S19917C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev)();
extern void ABISELECT(_ZThn4688_N8S19917C6D0Ev,_ZThn2760_N8S19917C6D0Ev)() __attribute__((weak));
extern void _ZN9S19917C112v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19917C11__A1__8S19917C6__8S19917C1[] = {
  0,
  ABISELECT(-4688,-2760),
  ABISELECT(-4688,-2760),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev)();
extern void ABISELECT(_ZThn5360_N8S19917C6D1Ev,_ZThn3140_N8S19917C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev)();
extern void ABISELECT(_ZThn5360_N8S19917C6D0Ev,_ZThn3140_N8S19917C6D0Ev)() __attribute__((weak));
extern void _ZN8S19917C42v6Ev();
extern void _ZN8S19917C42v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C4__8S19917C6__8S19917C1[] = {
  0,
  0,
  ABISELECT(-5360,-3140),
  ABISELECT(-5360,-3140),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19917C42v7Ev,
};
extern void ABISELECT(_ZTv0_n80_N8S19917C6D1Ev,_ZTv0_n40_N8S19917C6D1Ev)();
extern void ABISELECT(_ZThn5632_N8S19917C6D1Ev,_ZThn3296_N8S19917C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19917C6D0Ev,_ZTv0_n40_N8S19917C6D0Ev)();
extern void ABISELECT(_ZThn5632_N8S19917C6D0Ev,_ZThn3296_N8S19917C6D0Ev)() __attribute__((weak));
extern void _ZN9S19917C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19917C13__8S19917C6__8S19917C1[] = {
  0,
  ABISELECT(-5632,-3296),
  ABISELECT(-272,-156),
  ABISELECT(-1392,-796),
  ABISELECT(-1456,-828),
  ABISELECT(-4064,-2356),
  ABISELECT(-3712,-2156),
  ABISELECT(-944,-536),
  ABISELECT(30304,17540),
  ABISELECT(-5632,-3296),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19917C6D1Ev,_ZTv0_n40_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19917C6D0Ev,_ZTv0_n40_N8S19917C6D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C132v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev)();
extern void ABISELECT(_ZThn35936_N8S19917C6D1Ev,_ZThn20836_N8S19917C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev)();
extern void ABISELECT(_ZThn35936_N8S19917C6D0Ev,_ZThn20836_N8S19917C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C5__A4__8S19917C6__8S19917C1[] = {
  ABISELECT(-35936,-20836),
  ABISELECT(-35936,-20836),
  (VTBL_ENTRY)&(_ZTI8S19917C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev),
};
extern void _ZN8S19917C7D1Ev();
extern void _ZN8S19917C7D0Ev();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C7__8S19917C1[] = {
  ABISELECT(3440,2000),
  ABISELECT(2768,1620),
  ABISELECT(2256,1328),
  ABISELECT(-352,-200),
  ABISELECT(2320,1360),
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&_ZN8S19917C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void _ZN9S19917C10D1Ev();
extern void _ZN9S19917C10D0Ev();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19917C108S19917C7__8S19917C1[] = {
  ABISELECT(-352,-200),
  ABISELECT(2320,1360),
  0,
  (VTBL_ENTRY)&(_ZTI9S19917C10[0]),
  (VTBL_ENTRY)&_ZN9S19917C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19917C10D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void _ZN8S19917C8D1Ev();
extern void _ZN8S19917C8D0Ev();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C89S19917C108S19917C7__A1__8S19917C1[] = {
  ABISELECT(2320,1360),
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&_ZN8S19917C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev)();
extern void ABISELECT(_ZThn2320_N8S19917C8D1Ev,_ZThn1360_N8S19917C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev)();
extern void ABISELECT(_ZThn2320_N8S19917C8D0Ev,_ZThn1360_N8S19917C8D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__8S19917C89S19917C108S19917C7__A1__8S19917C1[] = {
  0,
  0,
  ABISELECT(-2320,-1360),
  ABISELECT(-2320,-1360),
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev)();
extern void ABISELECT(_ZThn2320_N9S19917C10D1Ev,_ZThn1360_N9S19917C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev)();
extern void ABISELECT(_ZThn2320_N9S19917C10D0Ev,_ZThn1360_N9S19917C10D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__9S19917C108S19917C7__8S19917C1[] = {
  0,
  0,
  ABISELECT(-2320,-1360),
  ABISELECT(-2320,-1360),
  (VTBL_ENTRY)&(_ZTI9S19917C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19917C3__9S19917C108S19917C7__8S19917C1[] = {
  ABISELECT(352,200),
  ABISELECT(352,200),
  (VTBL_ENTRY)&(_ZTI9S19917C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19917C3__8S19917C7__8S19917C1[] = {
  ABISELECT(352,200),
  ABISELECT(352,200),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19917C7D1Ev,_ZTv0_n16_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn2256_N8S19917C7D1Ev,_ZThn1328_N8S19917C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19917C7D0Ev,_ZTv0_n16_N8S19917C7D0Ev)();
extern void ABISELECT(_ZThn2256_N8S19917C7D0Ev,_ZThn1328_N8S19917C7D0Ev)() __attribute__((weak));
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C8__8S19917C7__8S19917C1[] = {
  0,
  ABISELECT(-2256,-1328),
  ABISELECT(64,32),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19917C7D1Ev,_ZTv0_n16_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19917C7D0Ev,_ZTv0_n16_N8S19917C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn2320_N8S19917C7D1Ev,_ZThn1360_N8S19917C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev)();
extern void ABISELECT(_ZThn2320_N8S19917C7D0Ev,_ZThn1360_N8S19917C7D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__8S19917C7__8S19917C1[] = {
  0,
  0,
  ABISELECT(-2320,-1360),
  ABISELECT(-2320,-1360),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn2768_N8S19917C7D1Ev,_ZThn1620_N8S19917C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev)();
extern void ABISELECT(_ZThn2768_N8S19917C7D0Ev,_ZThn1620_N8S19917C7D0Ev)() __attribute__((weak));
extern void _ZN9S19917C112v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19917C11__A1__8S19917C7__8S19917C1[] = {
  0,
  ABISELECT(-2768,-1620),
  ABISELECT(-2768,-1620),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev)();
extern void ABISELECT(_ZThn3440_N8S19917C7D1Ev,_ZThn2000_N8S19917C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev)();
extern void ABISELECT(_ZThn3440_N8S19917C7D0Ev,_ZThn2000_N8S19917C7D0Ev)() __attribute__((weak));
extern void _ZN8S19917C42v6Ev();
extern void _ZN8S19917C42v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C4__8S19917C7__8S19917C1[] = {
  0,
  0,
  ABISELECT(-3440,-2000),
  ABISELECT(-3440,-2000),
  (VTBL_ENTRY)&(_ZTI8S19917C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19917C42v7Ev,
};
extern void _ZN8S19917C8D1Ev();
extern void _ZN8S19917C8D0Ev();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C8__8S19917C1[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&_ZN8S19917C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19917C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S19917C8D1Ev,_ZThn32_N8S19917C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S19917C8D0Ev,_ZThn32_N8S19917C8D0Ev)() __attribute__((weak));
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__8S19917C8__8S19917C1[] = {
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19917C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern void _ZN9S19917C13D1Ev();
extern void _ZN9S19917C13D0Ev();
extern void _ZN9S19917C132v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19917C13__8S19917C1[] = {
  ABISELECT(-272,-156),
  ABISELECT(-1392,-796),
  ABISELECT(-1456,-828),
  ABISELECT(-4064,-2356),
  ABISELECT(-3712,-2156),
  ABISELECT(-944,-536),
  ABISELECT(30304,17540),
  0,
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&_ZN9S19917C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19917C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19917C132v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev)();
extern void ABISELECT(_ZThn30304_N9S19917C13D1Ev,_ZThn17540_N9S19917C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev)();
extern void ABISELECT(_ZThn30304_N9S19917C13D0Ev,_ZThn17540_N9S19917C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C5__9S19917C13__8S19917C1[] = {
  ABISELECT(-30304,-17540),
  ABISELECT(-30304,-17540),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev)();
extern void _ZN9S19917C112v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19917C11__9S19917C13__8S19917C1[] = {
  0,
  ABISELECT(944,536),
  ABISELECT(944,536),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
};
extern void ABISELECT(_ZTv0_n64_N9S19917C13D1Ev,_ZTv0_n32_N9S19917C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19917C13D0Ev,_ZTv0_n32_N9S19917C13D0Ev)();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C7__9S19917C13__8S19917C1[] = {
  ABISELECT(64,32),
  0,
  ABISELECT(3712,2156),
  ABISELECT(3440,2000),
  ABISELECT(2768,1620),
  ABISELECT(2256,1328),
  ABISELECT(-352,-200),
  ABISELECT(2320,1360),
  ABISELECT(3712,2156),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19917C13D1Ev,_ZTv0_n32_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19917C13D0Ev,_ZTv0_n32_N9S19917C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19917C3__9S19917C13__8S19917C1[] = {
  ABISELECT(4064,2356),
  ABISELECT(4064,2356),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19917C13D1Ev,_ZTv0_n16_N9S19917C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19917C13D0Ev,_ZTv0_n16_N9S19917C13D0Ev)();
extern void _ZN8S19917C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C8__9S19917C13__8S19917C1[] = {
  0,
  ABISELECT(1456,828),
  ABISELECT(64,32),
  ABISELECT(1456,828),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19917C13D1Ev,_ZTv0_n16_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19917C13D0Ev,_ZTv0_n16_N9S19917C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev)();
extern void _ZN8S19917C92v2Ev();
extern void _ZN8S19917C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C9__9S19917C13__8S19917C1[] = {
  0,
  0,
  ABISELECT(1392,796),
  ABISELECT(1392,796),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C92v2Ev,
  (VTBL_ENTRY)&_ZN8S19917C92v3Ev,
};
extern void ABISELECT(_ZTvn64_n64_N9S19917C13D1Ev,_ZTvn32_n32_N9S19917C13D1Ev)();
extern void ABISELECT(_ZTvn64_n64_N9S19917C13D0Ev,_ZTvn32_n32_N9S19917C13D0Ev)();
extern void _ZN9S19917C112v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19917C119S19917C108S19917C7__A1__9S19917C13__8S19917C1[] = {
  ABISELECT(3648,2124),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N9S19917C13D1Ev,_ZTvn32_n32_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N9S19917C13D0Ev,_ZTvn32_n32_N9S19917C13D0Ev),
  (VTBL_ENTRY)&_ZN9S19917C112v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev)();
extern void _ZN8S19917C42v6Ev();
extern void _ZN8S19917C42v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19917C4__9S19917C13__8S19917C1[] = {
  0,
  0,
  ABISELECT(272,156),
  ABISELECT(272,156),
  (VTBL_ENTRY)&(_ZTI9S19917C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19917C42v6Ev,
  (VTBL_ENTRY)&_ZN8S19917C42v7Ev,
};
static  VTT_ENTRY vtt_S19917C1[] = {
  {&(_ZTV8S19917C1[11]),  11,99},
  {&(_tg__ZTV8S19917C6__8S19917C1[10]),  10,13},
  {&(_tg__ZTV9S19917C148S19917C6__8S19917C1[4]),  4,6},
  {&(_tg__ZTV8S19917C9__9S19917C148S19917C6__8S19917C1[5]),  5,9},
  {&(_tg__ZTV8S19917C5__A1__9S19917C148S19917C6__8S19917C1[3]),  3,5},
  {&(_tg__ZTV8S19917C7__8S19917C6__8S19917C1[10]),  10,13},
  {&(_tg__ZTV8S19917C3__8S19917C6__8S19917C1[3]),  3,5},
  {&(_tg__ZTV8S19917C8__8S19917C6__8S19917C1[5]),  5,8},
  {&(_tg__ZTV8S19917C9__8S19917C6__8S19917C1[5]),  5,9},
  {&(_tg__ZTV9S19917C119S19917C108S19917C7__8S19917C6__8S19917C1[2]),  2,5},
  {&(_tg__ZTV9S19917C11__A1__8S19917C6__8S19917C1[4]),  4,7},
  {&(_tg__ZTV8S19917C4__8S19917C6__8S19917C1[5]),  5,9},
  {&(_tg__ZTV9S19917C13__8S19917C6__8S19917C1[11]),  11,14},
  {&(_tg__ZTV8S19917C5__A4__8S19917C6__8S19917C1[3]),  3,5},
  {&(_ZTV8S19917C1[23]),  23,99},
  {&(_ZTV8S19917C1[27]),  27,99},
  {&(_ZTV8S19917C1[39]),  39,99},
  {&(_ZTV8S19917C1[52]),  52,99},
  {&(_ZTV8S19917C1[60]),  60,99},
  {&(_ZTV8S19917C1[44]),  44,99},
  {&(_ZTV8S19917C1[68]),  68,99},
  {&(_ZTV8S19917C1[76]),  76,99},
  {&(_ZTV8S19917C1[91]),  91,99},
  {&(_ZTV8S19917C1[97]),  97,99},
  {&(_tg__ZTV8S19917C7__8S19917C1[7]),  7,10},
  {&(_tg__ZTV9S19917C108S19917C7__8S19917C1[4]),  4,7},
  {&(_tg__ZTV8S19917C89S19917C108S19917C7__A1__8S19917C1[3]),  3,6},
  {&(_tg__ZTV8S19917C9__8S19917C89S19917C108S19917C7__A1__8S19917C1[5]),  5,9},
  {&(_tg__ZTV8S19917C9__9S19917C108S19917C7__8S19917C1[5]),  5,9},
  {&(_tg__ZTV8S19917C3__9S19917C108S19917C7__8S19917C1[3]),  3,5},
  {&(_tg__ZTV8S19917C3__8S19917C7__8S19917C1[3]),  3,5},
  {&(_tg__ZTV8S19917C8__8S19917C7__8S19917C1[5]),  5,8},
  {&(_tg__ZTV8S19917C9__8S19917C7__8S19917C1[5]),  5,9},
  {&(_tg__ZTV9S19917C11__A1__8S19917C7__8S19917C1[4]),  4,7},
  {&(_tg__ZTV8S19917C4__8S19917C7__8S19917C1[5]),  5,9},
  {&(_tg__ZTV8S19917C8__8S19917C1[3]),  3,6},
  {&(_tg__ZTV8S19917C9__8S19917C8__8S19917C1[5]),  5,9},
  {&(_tg__ZTV9S19917C13__8S19917C1[9]),  9,12},
  {&(_tg__ZTV8S19917C5__9S19917C13__8S19917C1[3]),  3,5},
  {&(_tg__ZTV9S19917C11__9S19917C13__8S19917C1[4]),  4,7},
  {&(_tg__ZTV8S19917C7__9S19917C13__8S19917C1[10]),  10,13},
  {&(_tg__ZTV8S19917C3__9S19917C13__8S19917C1[3]),  3,5},
  {&(_tg__ZTV8S19917C8__9S19917C13__8S19917C1[5]),  5,8},
  {&(_tg__ZTV8S19917C9__9S19917C13__8S19917C1[5]),  5,9},
  {&(_tg__ZTV9S19917C119S19917C108S19917C7__A1__9S19917C13__8S19917C1[2]),  2,5},
  {&(_tg__ZTV8S19917C4__9S19917C13__8S19917C1[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S19917C1[];
extern  VTBL_ENTRY _ZTV8S19917C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19917C1[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C13D0Ev,_ZTv0_n12_N9S19917C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30304_N9S19917C13D0Ev,_ZThn17540_N9S19917C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C13D1Ev,_ZTv0_n12_N9S19917C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30304_N9S19917C13D1Ev,_ZThn17540_N9S19917C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C7D0Ev,_ZTv0_n12_N8S19917C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N8S19917C7D0Ev,_ZThn2000_N8S19917C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2768_N8S19917C7D0Ev,_ZThn1620_N8S19917C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2320_N8S19917C7D0Ev,_ZThn1360_N8S19917C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C7D1Ev,_ZTv0_n12_N8S19917C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N8S19917C7D1Ev,_ZThn2000_N8S19917C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2768_N8S19917C7D1Ev,_ZThn1620_N8S19917C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2320_N8S19917C7D1Ev,_ZThn1360_N8S19917C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19917C7D0Ev,_ZTv0_n16_N8S19917C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S19917C7D0Ev,_ZThn1328_N8S19917C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19917C7D1Ev,_ZTv0_n16_N8S19917C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S19917C7D1Ev,_ZThn1328_N8S19917C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C10D0Ev,_ZTv0_n12_N9S19917C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2320_N9S19917C10D0Ev,_ZThn1360_N9S19917C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C10D1Ev,_ZTv0_n12_N9S19917C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2320_N9S19917C10D1Ev,_ZThn1360_N9S19917C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C8D0Ev,_ZTv0_n12_N8S19917C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19917C8D0Ev,_ZThn32_N8S19917C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2320_N8S19917C8D0Ev,_ZThn1360_N8S19917C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C8D1Ev,_ZTv0_n12_N8S19917C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19917C8D1Ev,_ZThn32_N8S19917C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2320_N8S19917C8D1Ev,_ZThn1360_N8S19917C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19917C6D0Ev,_ZTv0_n40_N8S19917C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5632_N8S19917C6D0Ev,_ZThn3296_N8S19917C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19917C6D1Ev,_ZTv0_n40_N8S19917C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5632_N8S19917C6D1Ev,_ZThn3296_N8S19917C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19917C6D0Ev,_ZTv0_n16_N8S19917C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4176_N8S19917C6D0Ev,_ZThn2468_N8S19917C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19917C6D1Ev,_ZTv0_n16_N8S19917C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4176_N8S19917C6D1Ev,_ZThn2468_N8S19917C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C6D0Ev,_ZTv0_n12_N8S19917C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35936_N8S19917C6D0Ev,_ZThn20836_N8S19917C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5360_N8S19917C6D0Ev,_ZThn3140_N8S19917C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4688_N8S19917C6D0Ev,_ZThn2760_N8S19917C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N8S19917C6D0Ev,_ZThn2500_N8S19917C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1568_N8S19917C6D0Ev,_ZThn940_N8S19917C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C6D1Ev,_ZTv0_n12_N8S19917C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35936_N8S19917C6D1Ev,_ZThn20836_N8S19917C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5360_N8S19917C6D1Ev,_ZThn3140_N8S19917C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4688_N8S19917C6D1Ev,_ZThn2760_N8S19917C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N8S19917C6D1Ev,_ZThn2500_N8S19917C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1568_N8S19917C6D1Ev,_ZThn940_N8S19917C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19917C6D0Ev,_ZTv0_n32_N8S19917C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1920_N8S19917C6D0Ev,_ZThn1140_N8S19917C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19917C6D1Ev,_ZTv0_n32_N8S19917C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1920_N8S19917C6D1Ev,_ZThn1140_N8S19917C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C14D0Ev,_ZTv0_n12_N9S19917C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35936_N9S19917C14D0Ev,_ZThn20836_N9S19917C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N9S19917C14D0Ev,_ZThn2500_N9S19917C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19917C14D1Ev,_ZTv0_n12_N9S19917C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35936_N9S19917C14D1Ev,_ZThn20836_N9S19917C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N9S19917C14D1Ev,_ZThn2500_N9S19917C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19917C1D0Ev,_ZTv0_n40_N8S19917C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5632_N8S19917C1D0Ev,_ZThn3296_N8S19917C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19917C1D1Ev,_ZTv0_n40_N8S19917C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5632_N8S19917C1D1Ev,_ZThn3296_N8S19917C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19917C1D0Ev,_ZTv0_n16_N8S19917C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4176_N8S19917C1D0Ev,_ZThn2468_N8S19917C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19917C1D1Ev,_ZTv0_n16_N8S19917C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4176_N8S19917C1D1Ev,_ZThn2468_N8S19917C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19917C1D0Ev,_ZTv0_n32_N8S19917C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1920_N8S19917C1D0Ev,_ZThn1140_N8S19917C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19917C1D1Ev,_ZTv0_n32_N8S19917C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1920_N8S19917C1D1Ev,_ZThn1140_N8S19917C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C1D0Ev,_ZTv0_n12_N8S19917C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35936_N8S19917C1D0Ev,_ZThn20836_N8S19917C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5360_N8S19917C1D0Ev,_ZThn3140_N8S19917C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4688_N8S19917C1D0Ev,_ZThn2760_N8S19917C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N8S19917C1D0Ev,_ZThn2500_N8S19917C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1568_N8S19917C1D0Ev,_ZThn940_N8S19917C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19917C1D1Ev,_ZTv0_n12_N8S19917C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn35936_N8S19917C1D1Ev,_ZThn20836_N8S19917C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5360_N8S19917C1D1Ev,_ZThn3140_N8S19917C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4688_N8S19917C1D1Ev,_ZThn2760_N8S19917C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4240_N8S19917C1D1Ev,_ZThn2500_N8S19917C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1568_N8S19917C1D1Ev,_ZThn940_N8S19917C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19917C1 = {  "S19917C1", // class name
  bases_S19917C1, 21,
  &(vtc_S19917C1[0]), // expected_vtbl_contents
  &(vtt_S19917C1[0]), // expected_vtt_contents
  ABISELECT(35984,20864), // object size
  NSPAIRA(_ZTI8S19917C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19917C1),99, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19917C1),46, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2358C4  {
  ::S5166C19_nt s2358c4f0;
  int s2358c4f1[2];
  char s2358c4f2;
  virtual  ~S2358C4(); // _ZN7S2358C4D1Ev
  virtual void  v5(); // _ZN7S2358C42v5Ev
  virtual void  v6(); // _ZN7S2358C42v6Ev
  virtual void  v7(); // _ZN7S2358C42v7Ev
  S2358C4(); // tgen
};
//SIG(-1 S2358C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2358C4 ::~S2358C4(){ note_dtor("S2358C4", this);}
void  S2358C4 ::v5(){vfunc_called(this, "_ZN7S2358C42v5Ev");}
void  S2358C4 ::v6(){vfunc_called(this, "_ZN7S2358C42v6Ev");}
void  S2358C4 ::v7(){vfunc_called(this, "_ZN7S2358C42v7Ev");}
S2358C4 ::S2358C4(){ note_ctor("S2358C4", this);} // tgen

static void Test_S2358C4()
{
  extern Class_Descriptor cd_S2358C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2358C4, buf);
    S2358C4 *dp, &lv = *(dp=new (buf) S2358C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2358C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2358C4)");
    check_field_offset(lv, s2358c4f0, ABISELECT(8,4), "S2358C4.s2358c4f0");
    check_field_offset(lv, s2358c4f1, ABISELECT(24,16), "S2358C4.s2358c4f1");
    check_field_offset(lv, s2358c4f2, ABISELECT(32,24), "S2358C4.s2358c4f2");
    test_class_info(&lv, &cd_S2358C4);
    dp->~S2358C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2358C4(Test_S2358C4, "S2358C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2358C4C1Ev();
extern void _ZN7S2358C4D1Ev();
Name_Map name_map_S2358C4[] = {
  NSPAIR(_ZN7S2358C4C1Ev),
  NSPAIR(_ZN7S2358C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2358C4[];
extern void _ZN7S2358C4D1Ev();
extern void _ZN7S2358C4D0Ev();
extern void _ZN7S2358C42v5Ev();
extern void _ZN7S2358C42v6Ev();
extern void _ZN7S2358C42v7Ev();
static  VTBL_ENTRY vtc_S2358C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2358C4[0]),
  (VTBL_ENTRY)&_ZN7S2358C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2358C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2358C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2358C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2358C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S2358C4[];
extern  VTBL_ENTRY _ZTV7S2358C4[];
Class_Descriptor cd_S2358C4 = {  "S2358C4", // class name
  0,0,//no base classes
  &(vtc_S2358C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2358C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2358C4),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  S2358C7  {
  virtual  ~S2358C7(); // _ZN7S2358C7D1Ev
  virtual void  v8(); // _ZN7S2358C72v8Ev
  virtual void  v9(); // _ZN7S2358C72v9Ev
  virtual void  v10(); // _ZN7S2358C73v10Ev
  S2358C7(); // tgen
};
//SIG(-1 S2358C7) C1{ vd v1 v2 v3}


 S2358C7 ::~S2358C7(){ note_dtor("S2358C7", this);}
void  S2358C7 ::v8(){vfunc_called(this, "_ZN7S2358C72v8Ev");}
void  S2358C7 ::v9(){vfunc_called(this, "_ZN7S2358C72v9Ev");}
void  S2358C7 ::v10(){vfunc_called(this, "_ZN7S2358C73v10Ev");}
S2358C7 ::S2358C7(){ note_ctor("S2358C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2358C7C1Ev();
extern void _ZN7S2358C7D1Ev();
Name_Map name_map_S2358C7[] = {
  NSPAIR(_ZN7S2358C7C1Ev),
  NSPAIR(_ZN7S2358C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2358C7[];
extern void _ZN7S2358C7D1Ev();
extern void _ZN7S2358C7D0Ev();
extern void _ZN7S2358C72v8Ev();
extern void _ZN7S2358C72v9Ev();
extern void _ZN7S2358C73v10Ev();
static  VTBL_ENTRY vtc_S2358C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2358C7[0]),
  (VTBL_ENTRY)&_ZN7S2358C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2358C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2358C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2358C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2358C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2358C7[];
extern  VTBL_ENTRY _ZTV7S2358C7[];
Class_Descriptor cd_S2358C7 = {  "S2358C7", // class name
  0,0,//no base classes
  &(vtc_S2358C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2358C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2358C7),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  S2358C3  : S2358C4 , S2358C7 {
  void *s2358c3f0;
  char s2358c3f1;
  int s2358c3f2;
  virtual  ~S2358C3(); // _ZN7S2358C3D1Ev
  virtual void  v11(); // _ZN7S2358C33v11Ev
  virtual void  v12(); // _ZN7S2358C33v12Ev
  virtual void  v13(); // _ZN7S2358C33v13Ev
  virtual void  v14(); // _ZN7S2358C33v14Ev
  virtual void  v15(); // _ZN7S2358C33v15Ev
  virtual void  v16(); // _ZN7S2358C33v16Ev
  virtual void  v17(); // _ZN7S2358C33v17Ev
  virtual void  v18(); // _ZN7S2358C33v18Ev
  virtual void  v19(); // _ZN7S2358C33v19Ev
  virtual void  v20(); // _ZN7S2358C33v20Ev
  S2358C3(); // tgen
};
//SIG(-1 S2358C3) C1{ BC2{ vd v11 v12 v13 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fc Fi}


 S2358C3 ::~S2358C3(){ note_dtor("S2358C3", this);}
void  S2358C3 ::v11(){vfunc_called(this, "_ZN7S2358C33v11Ev");}
void  S2358C3 ::v12(){vfunc_called(this, "_ZN7S2358C33v12Ev");}
void  S2358C3 ::v13(){vfunc_called(this, "_ZN7S2358C33v13Ev");}
void  S2358C3 ::v14(){vfunc_called(this, "_ZN7S2358C33v14Ev");}
void  S2358C3 ::v15(){vfunc_called(this, "_ZN7S2358C33v15Ev");}
void  S2358C3 ::v16(){vfunc_called(this, "_ZN7S2358C33v16Ev");}
void  S2358C3 ::v17(){vfunc_called(this, "_ZN7S2358C33v17Ev");}
void  S2358C3 ::v18(){vfunc_called(this, "_ZN7S2358C33v18Ev");}
void  S2358C3 ::v19(){vfunc_called(this, "_ZN7S2358C33v19Ev");}
void  S2358C3 ::v20(){vfunc_called(this, "_ZN7S2358C33v20Ev");}
S2358C3 ::S2358C3(){ note_ctor("S2358C3", this);} // tgen

static void Test_S2358C3()
{
  extern Class_Descriptor cd_S2358C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S2358C3, buf);
    S2358C3 *dp, &lv = *(dp=new (buf) S2358C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S2358C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2358C3)");
    check_base_class_offset(lv, (S2358C4*), 0, "S2358C3");
    check_base_class_offset(lv, (S2358C7*), ABISELECT(40,28), "S2358C3");
    check_field_offset(lv, s2358c3f0, ABISELECT(48,32), "S2358C3.s2358c3f0");
    check_field_offset(lv, s2358c3f1, ABISELECT(56,36), "S2358C3.s2358c3f1");
    check_field_offset(lv, s2358c3f2, ABISELECT(60,40), "S2358C3.s2358c3f2");
    test_class_info(&lv, &cd_S2358C3);
    dp->~S2358C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2358C3(Test_S2358C3, "S2358C3", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S2358C3C1Ev();
extern void _ZN7S2358C3D1Ev();
Name_Map name_map_S2358C3[] = {
  NSPAIR(_ZN7S2358C3C1Ev),
  NSPAIR(_ZN7S2358C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2358C4;
extern VTBL_ENTRY _ZTI7S2358C4[];
extern  VTBL_ENTRY _ZTV7S2358C4[];
extern Class_Descriptor cd_S2358C7;
extern VTBL_ENTRY _ZTI7S2358C7[];
extern  VTBL_ENTRY _ZTV7S2358C7[];
static Base_Class bases_S2358C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2358C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2358C7,    ABISELECT(40,28), //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2358C3[];
extern void _ZN7S2358C3D1Ev();
extern void _ZN7S2358C3D0Ev();
extern void _ZN7S2358C42v5Ev();
extern void _ZN7S2358C42v6Ev();
extern void _ZN7S2358C42v7Ev();
extern void _ZN7S2358C33v11Ev();
extern void _ZN7S2358C33v12Ev();
extern void _ZN7S2358C33v13Ev();
extern void _ZN7S2358C33v14Ev();
extern void _ZN7S2358C33v15Ev();
extern void _ZN7S2358C33v16Ev();
extern void _ZN7S2358C33v17Ev();
extern void _ZN7S2358C33v18Ev();
extern void _ZN7S2358C33v19Ev();
extern void _ZN7S2358C33v20Ev();
extern void ABISELECT(_ZThn40_N7S2358C3D1Ev,_ZThn28_N7S2358C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2358C3D0Ev,_ZThn28_N7S2358C3D0Ev)();
extern void _ZN7S2358C72v8Ev();
extern void _ZN7S2358C72v9Ev();
extern void _ZN7S2358C73v10Ev();
static  VTBL_ENTRY vtc_S2358C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2358C3[0]),
  (VTBL_ENTRY)&_ZN7S2358C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2358C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2358C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2358C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2358C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v20Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2358C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2358C3D1Ev,_ZThn28_N7S2358C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2358C3D0Ev,_ZThn28_N7S2358C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2358C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2358C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2358C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2358C3[];
extern  VTBL_ENTRY _ZTV7S2358C3[];
Class_Descriptor cd_S2358C3 = {  "S2358C3", // class name
  bases_S2358C3, 2,
  &(vtc_S2358C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S2358C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2358C3),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  S2358C10  {
  virtual  ~S2358C10(); // _ZN8S2358C10D1Ev
  virtual void  v21(); // _ZN8S2358C103v21Ev
  virtual void  v22(); // _ZN8S2358C103v22Ev
  virtual void  v23(); // _ZN8S2358C103v23Ev
  S2358C10(); // tgen
};
//SIG(-1 S2358C10) C1{ vd v1 v2 v3}


 S2358C10 ::~S2358C10(){ note_dtor("S2358C10", this);}
void  S2358C10 ::v21(){vfunc_called(this, "_ZN8S2358C103v21Ev");}
void  S2358C10 ::v22(){vfunc_called(this, "_ZN8S2358C103v22Ev");}
void  S2358C10 ::v23(){vfunc_called(this, "_ZN8S2358C103v23Ev");}
S2358C10 ::S2358C10(){ note_ctor("S2358C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2358C10C1Ev();
extern void _ZN8S2358C10D1Ev();
Name_Map name_map_S2358C10[] = {
  NSPAIR(_ZN8S2358C10C1Ev),
  NSPAIR(_ZN8S2358C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2358C10[];
extern void _ZN8S2358C10D1Ev();
extern void _ZN8S2358C10D0Ev();
extern void _ZN8S2358C103v21Ev();
extern void _ZN8S2358C103v22Ev();
extern void _ZN8S2358C103v23Ev();
static  VTBL_ENTRY vtc_S2358C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2358C10[0]),
  (VTBL_ENTRY)&_ZN8S2358C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2358C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2358C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2358C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2358C103v23Ev,
};
extern VTBL_ENTRY _ZTI8S2358C10[];
extern  VTBL_ENTRY _ZTV8S2358C10[];
Class_Descriptor cd_S2358C10 = {  "S2358C10", // class name
  0,0,//no base classes
  &(vtc_S2358C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2358C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2358C10),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  S2358C9  : S2358C10 {
  ::S5166C36 s2358c9f0;
  ::S2355C13_nt s2358c9f1;
  char s2358c9f2;
  virtual  ~S2358C9(); // _ZN7S2358C9D1Ev
  virtual void  v24(); // _ZN7S2358C93v24Ev
  virtual void  v25(); // _ZN7S2358C93v25Ev
  virtual void  v26(); // _ZN7S2358C93v26Ev
  S2358C9(); // tgen
};
//SIG(-1 S2358C9) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2358C9 ::~S2358C9(){ note_dtor("S2358C9", this);}
void  S2358C9 ::v24(){vfunc_called(this, "_ZN7S2358C93v24Ev");}
void  S2358C9 ::v25(){vfunc_called(this, "_ZN7S2358C93v25Ev");}
void  S2358C9 ::v26(){vfunc_called(this, "_ZN7S2358C93v26Ev");}
S2358C9 ::S2358C9(){ note_ctor("S2358C9", this);} // tgen

static void Test_S2358C9()
{
  extern Class_Descriptor cd_S2358C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2358C9, buf);
    S2358C9 *dp, &lv = *(dp=new (buf) S2358C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2358C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2358C9)");
    check_base_class_offset(lv, (S2358C10*), 0, "S2358C9");
    check_field_offset(lv, s2358c9f0, ABISELECT(8,4), "S2358C9.s2358c9f0");
    check_field_offset(lv, s2358c9f1, ABISELECT(32,20), "S2358C9.s2358c9f1");
    check_field_offset(lv, s2358c9f2, ABISELECT(64,52), "S2358C9.s2358c9f2");
    test_class_info(&lv, &cd_S2358C9);
    dp->~S2358C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2358C9(Test_S2358C9, "S2358C9", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2358C9C1Ev();
extern void _ZN7S2358C9D1Ev();
Name_Map name_map_S2358C9[] = {
  NSPAIR(_ZN7S2358C9C1Ev),
  NSPAIR(_ZN7S2358C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2358C10;
extern VTBL_ENTRY _ZTI8S2358C10[];
extern  VTBL_ENTRY _ZTV8S2358C10[];
static Base_Class bases_S2358C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2358C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2358C9[];
extern void _ZN7S2358C9D1Ev();
extern void _ZN7S2358C9D0Ev();
extern void _ZN8S2358C103v21Ev();
extern void _ZN8S2358C103v22Ev();
extern void _ZN8S2358C103v23Ev();
extern void _ZN7S2358C93v24Ev();
extern void _ZN7S2358C93v25Ev();
extern void _ZN7S2358C93v26Ev();
static  VTBL_ENTRY vtc_S2358C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2358C9[0]),
  (VTBL_ENTRY)&_ZN7S2358C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2358C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2358C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2358C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2358C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2358C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2358C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2358C93v26Ev,
};
extern VTBL_ENTRY _ZTI7S2358C9[];
extern  VTBL_ENTRY _ZTV7S2358C9[];
Class_Descriptor cd_S2358C9 = {  "S2358C9", // class name
  bases_S2358C9, 1,
  &(vtc_S2358C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2358C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2358C9),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  S2358C8  : S2358C9 {
  virtual  ~S2358C8(); // _ZN7S2358C8D1Ev
  virtual void  v27(); // _ZN7S2358C83v27Ev
  virtual void  v28(); // _ZN7S2358C83v28Ev
  virtual void  v29(); // _ZN7S2358C83v29Ev
  virtual void  v30(); // _ZN7S2358C83v30Ev
  S2358C8(); // tgen
};
//SIG(-1 S2358C8) C1{ BC2{ BC3{ vd v5 v6 v7} vd v8 v9 v10 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4}


 S2358C8 ::~S2358C8(){ note_dtor("S2358C8", this);}
void  S2358C8 ::v27(){vfunc_called(this, "_ZN7S2358C83v27Ev");}
void  S2358C8 ::v28(){vfunc_called(this, "_ZN7S2358C83v28Ev");}
void  S2358C8 ::v29(){vfunc_called(this, "_ZN7S2358C83v29Ev");}
void  S2358C8 ::v30(){vfunc_called(this, "_ZN7S2358C83v30Ev");}
S2358C8 ::S2358C8(){ note_ctor("S2358C8", this);} // tgen

static void Test_S2358C8()
{
  extern Class_Descriptor cd_S2358C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2358C8, buf);
    S2358C8 *dp, &lv = *(dp=new (buf) S2358C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2358C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2358C8)");
    check_base_class_offset(lv, (S2358C10*)(S2358C9*), 0, "S2358C8");
    check_base_class_offset(lv, (S2358C9*), 0, "S2358C8");
    test_class_info(&lv, &cd_S2358C8);
    dp->~S2358C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2358C8(Test_S2358C8, "S2358C8", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2358C8C1Ev();
extern void _ZN7S2358C8D1Ev();
Name_Map name_map_S2358C8[] = {
  NSPAIR(_ZN7S2358C8C1Ev),
  NSPAIR(_ZN7S2358C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2358C10;
extern VTBL_ENTRY _ZTI8S2358C10[];
extern  VTBL_ENTRY _ZTV8S2358C10[];
extern Class_Descriptor cd_S2358C9;
extern VTBL_ENTRY _ZTI7S2358C9[];
extern  VTBL_ENTRY _ZTV7S2358C9[];
static Base_Class bases_S2358C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2358C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2358C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2358C8[];
extern void _ZN7S2358C8D1Ev();
extern void _ZN7S2358C8D0Ev();
extern void _ZN8S2358C103v21Ev();
extern void _ZN8S2358C103v22Ev();
extern void _ZN8S2358C103v23Ev();
extern void _ZN7S2358C93v24Ev();
extern void _ZN7S2358C93v25Ev();
extern void _ZN7S2358C93v26Ev();
extern void _ZN7S2358C83v27Ev();
extern void _ZN7S2358C83v28Ev();
extern void _ZN7S2358C83v29Ev();
extern void _ZN7S2358C83v30Ev();
static  VTBL_ENTRY vtc_S2358C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2358C8[0]),
  (VTBL_ENTRY)&_ZN7S2358C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2358C8D0Ev,
  (VTBL_ENTRY)&_ZN8S2358C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2358C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2358C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2358C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2358C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2358C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2358C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2358C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2358C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2358C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2358C8[];
extern  VTBL_ENTRY _ZTV7S2358C8[];
Class_Descriptor cd_S2358C8 = {  "S2358C8", // class name
  bases_S2358C8, 2,
  &(vtc_S2358C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2358C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2358C8),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2358C2  : S2358C3 , S2358C8 {
  int s2358c2f0[3];
  char s2358c2f1;
  ::S5166C24 s2358c2f2;
  virtual  ~S2358C2(); // _ZN7S2358C2D1Ev
  virtual void  v31(); // _ZN7S2358C23v31Ev
  virtual void  v32(); // _ZN7S2358C23v32Ev
  virtual void  v33(); // _ZN7S2358C23v33Ev
  virtual void  v34(); // _ZN7S2358C23v34Ev
  virtual void  v35(); // _ZN7S2358C23v35Ev
  virtual void  v36(); // _ZN7S2358C23v36Ev
  S2358C2(); // tgen
};
//SIG(-1 S2358C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd v10 v11 v12} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp Fc Fi} BC7{ BC8{ BC9{ vd v23 v24 v25} vd v26 v27 v28 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m FL[4]} Fc} vd v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 Fi[3] Fc FC13{ BC14{ m Fp Fi FC15{ m} FC16{ m}}}}


 S2358C2 ::~S2358C2(){ note_dtor("S2358C2", this);}
void  S2358C2 ::v31(){vfunc_called(this, "_ZN7S2358C23v31Ev");}
void  S2358C2 ::v32(){vfunc_called(this, "_ZN7S2358C23v32Ev");}
void  S2358C2 ::v33(){vfunc_called(this, "_ZN7S2358C23v33Ev");}
void  S2358C2 ::v34(){vfunc_called(this, "_ZN7S2358C23v34Ev");}
void  S2358C2 ::v35(){vfunc_called(this, "_ZN7S2358C23v35Ev");}
void  S2358C2 ::v36(){vfunc_called(this, "_ZN7S2358C23v36Ev");}
S2358C2 ::S2358C2(){ note_ctor("S2358C2", this);} // tgen

static void Test_S2358C2()
{
  extern Class_Descriptor cd_S2358C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,33)];
    init_test(&cd_S2358C2, buf);
    S2358C2 *dp, &lv = *(dp=new (buf) S2358C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,128), "sizeof(S2358C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2358C2)");
    check_base_class_offset(lv, (S2358C4*)(S2358C3*), 0, "S2358C2");
    check_base_class_offset(lv, (S2358C7*)(S2358C3*), ABISELECT(40,28), "S2358C2");
    check_base_class_offset(lv, (S2358C3*), 0, "S2358C2");
    check_base_class_offset(lv, (S2358C10*)(S2358C9*)(S2358C8*), ABISELECT(64,44), "S2358C2");
    check_base_class_offset(lv, (S2358C9*)(S2358C8*), ABISELECT(64,44), "S2358C2");
    check_base_class_offset(lv, (S2358C8*), ABISELECT(64,44), "S2358C2");
    check_field_offset(lv, s2358c2f0, ABISELECT(132,100), "S2358C2.s2358c2f0");
    check_field_offset(lv, s2358c2f1, ABISELECT(144,112), "S2358C2.s2358c2f1");
    check_field_offset(lv, s2358c2f2, ABISELECT(152,116), "S2358C2.s2358c2f2");
    test_class_info(&lv, &cd_S2358C2);
    dp->~S2358C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2358C2(Test_S2358C2, "S2358C2", ABISELECT(168,128));

#else // __cplusplus

extern void _ZN7S2358C2C1Ev();
extern void _ZN7S2358C2D1Ev();
Name_Map name_map_S2358C2[] = {
  NSPAIR(_ZN7S2358C2C1Ev),
  NSPAIR(_ZN7S2358C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2358C4;
extern VTBL_ENTRY _ZTI7S2358C4[];
extern  VTBL_ENTRY _ZTV7S2358C4[];
extern Class_Descriptor cd_S2358C7;
extern VTBL_ENTRY _ZTI7S2358C7[];
extern  VTBL_ENTRY _ZTV7S2358C7[];
extern Class_Descriptor cd_S2358C3;
extern VTBL_ENTRY _ZTI7S2358C3[];
extern  VTBL_ENTRY _ZTV7S2358C3[];
extern Class_Descriptor cd_S2358C10;
extern VTBL_ENTRY _ZTI8S2358C10[];
extern  VTBL_ENTRY _ZTV8S2358C10[];
extern Class_Descriptor cd_S2358C9;
extern VTBL_ENTRY _ZTI7S2358C9[];
extern  VTBL_ENTRY _ZTV7S2358C9[];
extern Class_Descriptor cd_S2358C8;
extern VTBL_ENTRY _ZTI7S2358C8[];
extern  VTBL_ENTRY _ZTV7S2358C8[];
static Base_Class bases_S2358C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2358C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2358C7,    ABISELECT(40,28), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2358C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2358C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2358C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2358C8,    ABISELECT(64,44), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2358C2[];
extern void _ZN7S2358C2D1Ev();
extern void _ZN7S2358C2D0Ev();
extern void _ZN7S2358C42v5Ev();
extern void _ZN7S2358C42v6Ev();
extern void _ZN7S2358C42v7Ev();
extern void _ZN7S2358C33v11Ev();
extern void _ZN7S2358C33v12Ev();
extern void _ZN7S2358C33v13Ev();
extern void _ZN7S2358C33v14Ev();
extern void _ZN7S2358C33v15Ev();
extern void _ZN7S2358C33v16Ev();
extern void _ZN7S2358C33v17Ev();
extern void _ZN7S2358C33v18Ev();
extern void _ZN7S2358C33v19Ev();
extern void _ZN7S2358C33v20Ev();
extern void _ZN7S2358C23v31Ev();
extern void _ZN7S2358C23v32Ev();
extern void _ZN7S2358C23v33Ev();
extern void _ZN7S2358C23v34Ev();
extern void _ZN7S2358C23v35Ev();
extern void _ZN7S2358C23v36Ev();
extern void ABISELECT(_ZThn40_N7S2358C2D1Ev,_ZThn28_N7S2358C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2358C2D0Ev,_ZThn28_N7S2358C2D0Ev)();
extern void _ZN7S2358C72v8Ev();
extern void _ZN7S2358C72v9Ev();
extern void _ZN7S2358C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2358C2D1Ev,_ZThn44_N7S2358C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S2358C2D0Ev,_ZThn44_N7S2358C2D0Ev)();
extern void _ZN8S2358C103v21Ev();
extern void _ZN8S2358C103v22Ev();
extern void _ZN8S2358C103v23Ev();
extern void _ZN7S2358C93v24Ev();
extern void _ZN7S2358C93v25Ev();
extern void _ZN7S2358C93v26Ev();
extern void _ZN7S2358C83v27Ev();
extern void _ZN7S2358C83v28Ev();
extern void _ZN7S2358C83v29Ev();
extern void _ZN7S2358C83v30Ev();
static  VTBL_ENTRY vtc_S2358C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2358C2[0]),
  (VTBL_ENTRY)&_ZN7S2358C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2358C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2358C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2358C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2358C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2358C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2358C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2358C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2358C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2358C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2358C23v36Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2358C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2358C2D1Ev,_ZThn28_N7S2358C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2358C2D0Ev,_ZThn28_N7S2358C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2358C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2358C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2358C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2358C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2358C2D1Ev,_ZThn44_N7S2358C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2358C2D0Ev,_ZThn44_N7S2358C2D0Ev),
  (VTBL_ENTRY)&_ZN8S2358C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2358C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2358C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2358C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2358C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2358C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2358C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2358C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2358C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2358C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2358C2[];
extern  VTBL_ENTRY _ZTV7S2358C2[];
Class_Descriptor cd_S2358C2 = {  "S2358C2", // class name
  bases_S2358C2, 6,
  &(vtc_S2358C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,128), // object size
  NSPAIRA(_ZTI7S2358C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2358C2),44, //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  S2358C18_nt  {
  void *s2358c18f0;
  virtual  ~S2358C18_nt(); // _ZN11S2358C18_ntD1Ev
  virtual void  v37(); // _ZN11S2358C18_nt3v37Ev
  virtual void  v38(); // _ZN11S2358C18_nt3v38Ev
  virtual void  v39(); // _ZN11S2358C18_nt3v39Ev
  virtual void  v40(); // _ZN11S2358C18_nt3v40Ev
  virtual void  v41(); // _ZN11S2358C18_nt3v41Ev
  S2358C18_nt(); // tgen
};
//SIG(-1 S2358C18_nt) C1{ vd v1 v2 v3 v4 v5 Fp}


 S2358C18_nt ::~S2358C18_nt(){ note_dtor("S2358C18_nt", this);}
void  S2358C18_nt ::v37(){vfunc_called(this, "_ZN11S2358C18_nt3v37Ev");}
void  S2358C18_nt ::v38(){vfunc_called(this, "_ZN11S2358C18_nt3v38Ev");}
void  S2358C18_nt ::v39(){vfunc_called(this, "_ZN11S2358C18_nt3v39Ev");}
void  S2358C18_nt ::v40(){vfunc_called(this, "_ZN11S2358C18_nt3v40Ev");}
void  S2358C18_nt ::v41(){vfunc_called(this, "_ZN11S2358C18_nt3v41Ev");}
S2358C18_nt ::S2358C18_nt(){ note_ctor("S2358C18_nt", this);} // tgen

//skip512 S2358C18_nt

#else // __cplusplus

extern void _ZN11S2358C18_ntC1Ev();
extern void _ZN11S2358C18_ntD1Ev();
Name_Map name_map_S2358C18_nt[] = {
  NSPAIR(_ZN11S2358C18_ntC1Ev),
  NSPAIR(_ZN11S2358C18_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S2358C18_nt[];
extern void _ZN11S2358C18_ntD1Ev();
extern void _ZN11S2358C18_ntD0Ev();
extern void _ZN11S2358C18_nt3v37Ev();
extern void _ZN11S2358C18_nt3v38Ev();
extern void _ZN11S2358C18_nt3v39Ev();
extern void _ZN11S2358C18_nt3v40Ev();
extern void _ZN11S2358C18_nt3v41Ev();
static  VTBL_ENTRY vtc_S2358C18_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2358C18_nt[0]),
  (VTBL_ENTRY)&_ZN11S2358C18_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2358C18_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2358C18_nt3v37Ev,
  (VTBL_ENTRY)&_ZN11S2358C18_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S2358C18_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S2358C18_nt3v40Ev,
  (VTBL_ENTRY)&_ZN11S2358C18_nt3v41Ev,
};
extern VTBL_ENTRY _ZTI11S2358C18_nt[];
VTBL_ENTRY *P__ZTI11S2358C18_nt = _ZTI11S2358C18_nt; 
extern  VTBL_ENTRY _ZTV11S2358C18_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2358C1  : S2358C2 {
  ::S2358C18_nt s2358c1f0;
  ::S2355C19_nt s2358c1f1;
  int s2358c1f2;
  char s2358c1f3;
  int s2358c1f4;
  ::S2355C25_nt s2358c1f5;
  void *s2358c1f6[2];
  virtual  ~S2358C1(); // _ZN7S2358C1D1Ev
  virtual void  v1(); // _ZN7S2358C12v1Ev
  virtual void  v2(); // _ZN7S2358C12v2Ev
  virtual void  v3(); // _ZN7S2358C12v3Ev
  virtual void  v4(); // _ZN7S2358C12v4Ev
  S2358C1(); // tgen
};
//SIG(1 S2358C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd v8 v9 v10} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp Fc Fi} BC8{ BC9{ BC10{ vd v21 v22 v23} vd v24 v25 v26 FC11{ m Fp Fi[2] FC12{ m}} FC13{ m FL[4]} Fc} vd v27 v28 v29 v30} vd v31 v32 v33 v34 v35 v36 Fi[3] Fc FC14{ BC15{ m Fp Fi FC16{ m} FC17{ m}}}} vd v1 v2 v3 v4 FC18{ vd v37 v38 v39 v40 v41 Fp} FC19{ BC20{ vd v43 FC21{ m FC15} Fp[3] Fc} v42 Fp} Fi Fc Fi FC22{ Fi[2] FC23{ Fi[2]}[10] FC24{ Fi[3] Fc[256]}[10]} Fp[2]}


 S2358C1 ::~S2358C1(){ note_dtor("S2358C1", this);}
void  S2358C1 ::v1(){vfunc_called(this, "_ZN7S2358C12v1Ev");}
void  S2358C1 ::v2(){vfunc_called(this, "_ZN7S2358C12v2Ev");}
void  S2358C1 ::v3(){vfunc_called(this, "_ZN7S2358C12v3Ev");}
void  S2358C1 ::v4(){vfunc_called(this, "_ZN7S2358C12v4Ev");}
S2358C1 ::S2358C1(){ note_ctor("S2358C1", this);} // tgen

static void Test_S2358C1()
{
  extern Class_Descriptor cd_S2358C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(382,741)];
    init_test(&cd_S2358C1, buf);
    S2358C1 *dp, &lv = *(dp=new (buf) S2358C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3048,2960), "sizeof(S2358C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2358C1)");
    check_base_class_offset(lv, (S2358C4*)(S2358C3*)(S2358C2*), 0, "S2358C1");
    check_base_class_offset(lv, (S2358C7*)(S2358C3*)(S2358C2*), ABISELECT(40,28), "S2358C1");
    check_base_class_offset(lv, (S2358C3*)(S2358C2*), 0, "S2358C1");
    check_base_class_offset(lv, (S2358C10*)(S2358C9*)(S2358C8*)(S2358C2*), ABISELECT(64,44), "S2358C1");
    check_base_class_offset(lv, (S2358C9*)(S2358C8*)(S2358C2*), ABISELECT(64,44), "S2358C1");
    check_base_class_offset(lv, (S2358C8*)(S2358C2*), ABISELECT(64,44), "S2358C1");
    check_base_class_offset(lv, (S2358C2*), 0, "S2358C1");
    check_field_offset(lv, s2358c1f0, ABISELECT(168,128), "S2358C1.s2358c1f0");
    check_field_offset(lv, s2358c1f1, ABISELECT(184,136), "S2358C1.s2358c1f1");
    check_field_offset(lv, s2358c1f2, ABISELECT(248,172), "S2358C1.s2358c1f2");
    check_field_offset(lv, s2358c1f3, ABISELECT(252,176), "S2358C1.s2358c1f3");
    check_field_offset(lv, s2358c1f4, ABISELECT(256,180), "S2358C1.s2358c1f4");
    check_field_offset(lv, s2358c1f5, ABISELECT(260,184), "S2358C1.s2358c1f5");
    check_field_offset(lv, s2358c1f6, ABISELECT(3032,2952), "S2358C1.s2358c1f6");
    test_class_info(&lv, &cd_S2358C1);
    dp->~S2358C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2358C1(Test_S2358C1, "S2358C1", ABISELECT(3048,2960));

#else // __cplusplus

extern void _ZN7S2358C1C1Ev();
extern void _ZN7S2358C1D1Ev();
Name_Map name_map_S2358C1[] = {
  NSPAIR(_ZN7S2358C1C1Ev),
  NSPAIR(_ZN7S2358C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2358C4;
extern VTBL_ENTRY _ZTI7S2358C4[];
extern  VTBL_ENTRY _ZTV7S2358C4[];
extern Class_Descriptor cd_S2358C7;
extern VTBL_ENTRY _ZTI7S2358C7[];
extern  VTBL_ENTRY _ZTV7S2358C7[];
extern Class_Descriptor cd_S2358C3;
extern VTBL_ENTRY _ZTI7S2358C3[];
extern  VTBL_ENTRY _ZTV7S2358C3[];
extern Class_Descriptor cd_S2358C10;
extern VTBL_ENTRY _ZTI8S2358C10[];
extern  VTBL_ENTRY _ZTV8S2358C10[];
extern Class_Descriptor cd_S2358C9;
extern VTBL_ENTRY _ZTI7S2358C9[];
extern  VTBL_ENTRY _ZTV7S2358C9[];
extern Class_Descriptor cd_S2358C8;
extern VTBL_ENTRY _ZTI7S2358C8[];
extern  VTBL_ENTRY _ZTV7S2358C8[];
extern Class_Descriptor cd_S2358C2;
extern VTBL_ENTRY _ZTI7S2358C2[];
extern  VTBL_ENTRY _ZTV7S2358C2[];
static Base_Class bases_S2358C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2358C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2358C7,    ABISELECT(40,28), //bcp->offset
    27, //bcp->virtual_function_table_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_S2358C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2358C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2358C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2358C8,    ABISELECT(64,44), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2358C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2358C1[];
extern void _ZN7S2358C1D1Ev();
extern void _ZN7S2358C1D0Ev();
extern void _ZN7S2358C42v5Ev();
extern void _ZN7S2358C42v6Ev();
extern void _ZN7S2358C42v7Ev();
extern void _ZN7S2358C33v11Ev();
extern void _ZN7S2358C33v12Ev();
extern void _ZN7S2358C33v13Ev();
extern void _ZN7S2358C33v14Ev();
extern void _ZN7S2358C33v15Ev();
extern void _ZN7S2358C33v16Ev();
extern void _ZN7S2358C33v17Ev();
extern void _ZN7S2358C33v18Ev();
extern void _ZN7S2358C33v19Ev();
extern void _ZN7S2358C33v20Ev();
extern void _ZN7S2358C23v31Ev();
extern void _ZN7S2358C23v32Ev();
extern void _ZN7S2358C23v33Ev();
extern void _ZN7S2358C23v34Ev();
extern void _ZN7S2358C23v35Ev();
extern void _ZN7S2358C23v36Ev();
extern void _ZN7S2358C12v1Ev();
extern void _ZN7S2358C12v2Ev();
extern void _ZN7S2358C12v3Ev();
extern void _ZN7S2358C12v4Ev();
extern void ABISELECT(_ZThn40_N7S2358C1D1Ev,_ZThn28_N7S2358C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2358C1D0Ev,_ZThn28_N7S2358C1D0Ev)();
extern void _ZN7S2358C72v8Ev();
extern void _ZN7S2358C72v9Ev();
extern void _ZN7S2358C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2358C1D1Ev,_ZThn44_N7S2358C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S2358C1D0Ev,_ZThn44_N7S2358C1D0Ev)();
extern void _ZN8S2358C103v21Ev();
extern void _ZN8S2358C103v22Ev();
extern void _ZN8S2358C103v23Ev();
extern void _ZN7S2358C93v24Ev();
extern void _ZN7S2358C93v25Ev();
extern void _ZN7S2358C93v26Ev();
extern void _ZN7S2358C83v27Ev();
extern void _ZN7S2358C83v28Ev();
extern void _ZN7S2358C83v29Ev();
extern void _ZN7S2358C83v30Ev();
static  VTBL_ENTRY vtc_S2358C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2358C1[0]),
  (VTBL_ENTRY)&_ZN7S2358C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2358C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2358C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2358C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2358C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2358C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2358C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2358C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2358C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2358C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2358C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2358C23v36Ev,
  (VTBL_ENTRY)&_ZN7S2358C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2358C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2358C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2358C12v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2358C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2358C1D1Ev,_ZThn28_N7S2358C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2358C1D0Ev,_ZThn28_N7S2358C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2358C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2358C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2358C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2358C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2358C1D1Ev,_ZThn44_N7S2358C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2358C1D0Ev,_ZThn44_N7S2358C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2358C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2358C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2358C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2358C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2358C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2358C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2358C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2358C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2358C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2358C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2358C1[];
extern  VTBL_ENTRY _ZTV7S2358C1[];
Class_Descriptor cd_S2358C1 = {  "S2358C1", // class name
  bases_S2358C1, 7,
  &(vtc_S2358C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3048,2960), // object size
  NSPAIRA(_ZTI7S2358C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2358C1),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2352C4  {
  ::S5166C19_nt s2352c4f0;
  int s2352c4f1[2];
  char s2352c4f2;
  virtual  ~S2352C4(); // _ZN7S2352C4D1Ev
  virtual void  v5(); // _ZN7S2352C42v5Ev
  virtual void  v6(); // _ZN7S2352C42v6Ev
  virtual void  v7(); // _ZN7S2352C42v7Ev
  S2352C4(); // tgen
};
//SIG(-1 S2352C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2352C4 ::~S2352C4(){ note_dtor("S2352C4", this);}
void  S2352C4 ::v5(){vfunc_called(this, "_ZN7S2352C42v5Ev");}
void  S2352C4 ::v6(){vfunc_called(this, "_ZN7S2352C42v6Ev");}
void  S2352C4 ::v7(){vfunc_called(this, "_ZN7S2352C42v7Ev");}
S2352C4 ::S2352C4(){ note_ctor("S2352C4", this);} // tgen

static void Test_S2352C4()
{
  extern Class_Descriptor cd_S2352C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2352C4, buf);
    S2352C4 *dp, &lv = *(dp=new (buf) S2352C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2352C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2352C4)");
    check_field_offset(lv, s2352c4f0, ABISELECT(8,4), "S2352C4.s2352c4f0");
    check_field_offset(lv, s2352c4f1, ABISELECT(24,16), "S2352C4.s2352c4f1");
    check_field_offset(lv, s2352c4f2, ABISELECT(32,24), "S2352C4.s2352c4f2");
    test_class_info(&lv, &cd_S2352C4);
    dp->~S2352C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2352C4(Test_S2352C4, "S2352C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2352C4C1Ev();
extern void _ZN7S2352C4D1Ev();
Name_Map name_map_S2352C4[] = {
  NSPAIR(_ZN7S2352C4C1Ev),
  NSPAIR(_ZN7S2352C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2352C4[];
extern void _ZN7S2352C4D1Ev();
extern void _ZN7S2352C4D0Ev();
extern void _ZN7S2352C42v5Ev();
extern void _ZN7S2352C42v6Ev();
extern void _ZN7S2352C42v7Ev();
static  VTBL_ENTRY vtc_S2352C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2352C4[0]),
  (VTBL_ENTRY)&_ZN7S2352C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2352C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2352C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2352C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2352C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S2352C4[];
extern  VTBL_ENTRY _ZTV7S2352C4[];
Class_Descriptor cd_S2352C4 = {  "S2352C4", // class name
  0,0,//no base classes
  &(vtc_S2352C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2352C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2352C4),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  S2352C7  {
  virtual  ~S2352C7(); // _ZN7S2352C7D1Ev
  virtual void  v8(); // _ZN7S2352C72v8Ev
  virtual void  v9(); // _ZN7S2352C72v9Ev
  virtual void  v10(); // _ZN7S2352C73v10Ev
  S2352C7(); // tgen
};
//SIG(-1 S2352C7) C1{ vd v1 v2 v3}


 S2352C7 ::~S2352C7(){ note_dtor("S2352C7", this);}
void  S2352C7 ::v8(){vfunc_called(this, "_ZN7S2352C72v8Ev");}
void  S2352C7 ::v9(){vfunc_called(this, "_ZN7S2352C72v9Ev");}
void  S2352C7 ::v10(){vfunc_called(this, "_ZN7S2352C73v10Ev");}
S2352C7 ::S2352C7(){ note_ctor("S2352C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2352C7C1Ev();
extern void _ZN7S2352C7D1Ev();
Name_Map name_map_S2352C7[] = {
  NSPAIR(_ZN7S2352C7C1Ev),
  NSPAIR(_ZN7S2352C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2352C7[];
extern void _ZN7S2352C7D1Ev();
extern void _ZN7S2352C7D0Ev();
extern void _ZN7S2352C72v8Ev();
extern void _ZN7S2352C72v9Ev();
extern void _ZN7S2352C73v10Ev();
static  VTBL_ENTRY vtc_S2352C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2352C7[0]),
  (VTBL_ENTRY)&_ZN7S2352C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2352C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2352C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2352C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2352C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2352C7[];
extern  VTBL_ENTRY _ZTV7S2352C7[];
Class_Descriptor cd_S2352C7 = {  "S2352C7", // class name
  0,0,//no base classes
  &(vtc_S2352C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2352C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2352C7),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  S2352C3  : S2352C4 , S2352C7 {
  void *s2352c3f0;
  char s2352c3f1;
  int s2352c3f2;
  virtual  ~S2352C3(); // _ZN7S2352C3D1Ev
  virtual void  v11(); // _ZN7S2352C33v11Ev
  virtual void  v12(); // _ZN7S2352C33v12Ev
  virtual void  v13(); // _ZN7S2352C33v13Ev
  virtual void  v14(); // _ZN7S2352C33v14Ev
  virtual void  v15(); // _ZN7S2352C33v15Ev
  virtual void  v16(); // _ZN7S2352C33v16Ev
  virtual void  v17(); // _ZN7S2352C33v17Ev
  virtual void  v18(); // _ZN7S2352C33v18Ev
  virtual void  v19(); // _ZN7S2352C33v19Ev
  virtual void  v20(); // _ZN7S2352C33v20Ev
  S2352C3(); // tgen
};
//SIG(-1 S2352C3) C1{ BC2{ vd v11 v12 v13 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fc Fi}


 S2352C3 ::~S2352C3(){ note_dtor("S2352C3", this);}
void  S2352C3 ::v11(){vfunc_called(this, "_ZN7S2352C33v11Ev");}
void  S2352C3 ::v12(){vfunc_called(this, "_ZN7S2352C33v12Ev");}
void  S2352C3 ::v13(){vfunc_called(this, "_ZN7S2352C33v13Ev");}
void  S2352C3 ::v14(){vfunc_called(this, "_ZN7S2352C33v14Ev");}
void  S2352C3 ::v15(){vfunc_called(this, "_ZN7S2352C33v15Ev");}
void  S2352C3 ::v16(){vfunc_called(this, "_ZN7S2352C33v16Ev");}
void  S2352C3 ::v17(){vfunc_called(this, "_ZN7S2352C33v17Ev");}
void  S2352C3 ::v18(){vfunc_called(this, "_ZN7S2352C33v18Ev");}
void  S2352C3 ::v19(){vfunc_called(this, "_ZN7S2352C33v19Ev");}
void  S2352C3 ::v20(){vfunc_called(this, "_ZN7S2352C33v20Ev");}
S2352C3 ::S2352C3(){ note_ctor("S2352C3", this);} // tgen

static void Test_S2352C3()
{
  extern Class_Descriptor cd_S2352C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S2352C3, buf);
    S2352C3 *dp, &lv = *(dp=new (buf) S2352C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S2352C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2352C3)");
    check_base_class_offset(lv, (S2352C4*), 0, "S2352C3");
    check_base_class_offset(lv, (S2352C7*), ABISELECT(40,28), "S2352C3");
    check_field_offset(lv, s2352c3f0, ABISELECT(48,32), "S2352C3.s2352c3f0");
    check_field_offset(lv, s2352c3f1, ABISELECT(56,36), "S2352C3.s2352c3f1");
    check_field_offset(lv, s2352c3f2, ABISELECT(60,40), "S2352C3.s2352c3f2");
    test_class_info(&lv, &cd_S2352C3);
    dp->~S2352C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2352C3(Test_S2352C3, "S2352C3", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S2352C3C1Ev();
extern void _ZN7S2352C3D1Ev();
Name_Map name_map_S2352C3[] = {
  NSPAIR(_ZN7S2352C3C1Ev),
  NSPAIR(_ZN7S2352C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2352C4;
extern VTBL_ENTRY _ZTI7S2352C4[];
extern  VTBL_ENTRY _ZTV7S2352C4[];
extern Class_Descriptor cd_S2352C7;
extern VTBL_ENTRY _ZTI7S2352C7[];
extern  VTBL_ENTRY _ZTV7S2352C7[];
static Base_Class bases_S2352C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2352C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2352C7,    ABISELECT(40,28), //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2352C3[];
extern void _ZN7S2352C3D1Ev();
extern void _ZN7S2352C3D0Ev();
extern void _ZN7S2352C42v5Ev();
extern void _ZN7S2352C42v6Ev();
extern void _ZN7S2352C42v7Ev();
extern void _ZN7S2352C33v11Ev();
extern void _ZN7S2352C33v12Ev();
extern void _ZN7S2352C33v13Ev();
extern void _ZN7S2352C33v14Ev();
extern void _ZN7S2352C33v15Ev();
extern void _ZN7S2352C33v16Ev();
extern void _ZN7S2352C33v17Ev();
extern void _ZN7S2352C33v18Ev();
extern void _ZN7S2352C33v19Ev();
extern void _ZN7S2352C33v20Ev();
extern void ABISELECT(_ZThn40_N7S2352C3D1Ev,_ZThn28_N7S2352C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2352C3D0Ev,_ZThn28_N7S2352C3D0Ev)();
extern void _ZN7S2352C72v8Ev();
extern void _ZN7S2352C72v9Ev();
extern void _ZN7S2352C73v10Ev();
static  VTBL_ENTRY vtc_S2352C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2352C3[0]),
  (VTBL_ENTRY)&_ZN7S2352C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2352C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2352C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2352C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v20Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2352C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2352C3D1Ev,_ZThn28_N7S2352C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2352C3D0Ev,_ZThn28_N7S2352C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2352C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2352C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2352C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2352C3[];
extern  VTBL_ENTRY _ZTV7S2352C3[];
Class_Descriptor cd_S2352C3 = {  "S2352C3", // class name
  bases_S2352C3, 2,
  &(vtc_S2352C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S2352C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2352C3),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  S2352C10  {
  virtual  ~S2352C10(); // _ZN8S2352C10D1Ev
  virtual void  v21(); // _ZN8S2352C103v21Ev
  virtual void  v22(); // _ZN8S2352C103v22Ev
  virtual void  v23(); // _ZN8S2352C103v23Ev
  S2352C10(); // tgen
};
//SIG(-1 S2352C10) C1{ vd v1 v2 v3}


 S2352C10 ::~S2352C10(){ note_dtor("S2352C10", this);}
void  S2352C10 ::v21(){vfunc_called(this, "_ZN8S2352C103v21Ev");}
void  S2352C10 ::v22(){vfunc_called(this, "_ZN8S2352C103v22Ev");}
void  S2352C10 ::v23(){vfunc_called(this, "_ZN8S2352C103v23Ev");}
S2352C10 ::S2352C10(){ note_ctor("S2352C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2352C10C1Ev();
extern void _ZN8S2352C10D1Ev();
Name_Map name_map_S2352C10[] = {
  NSPAIR(_ZN8S2352C10C1Ev),
  NSPAIR(_ZN8S2352C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2352C10[];
extern void _ZN8S2352C10D1Ev();
extern void _ZN8S2352C10D0Ev();
extern void _ZN8S2352C103v21Ev();
extern void _ZN8S2352C103v22Ev();
extern void _ZN8S2352C103v23Ev();
static  VTBL_ENTRY vtc_S2352C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2352C10[0]),
  (VTBL_ENTRY)&_ZN8S2352C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2352C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2352C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2352C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2352C103v23Ev,
};
extern VTBL_ENTRY _ZTI8S2352C10[];
extern  VTBL_ENTRY _ZTV8S2352C10[];
Class_Descriptor cd_S2352C10 = {  "S2352C10", // class name
  0,0,//no base classes
  &(vtc_S2352C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2352C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2352C10),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  S2352C9  : S2352C10 {
  ::S5166C36 s2352c9f0;
  ::S2355C13_nt s2352c9f1;
  char s2352c9f2;
  virtual  ~S2352C9(); // _ZN7S2352C9D1Ev
  virtual void  v24(); // _ZN7S2352C93v24Ev
  virtual void  v25(); // _ZN7S2352C93v25Ev
  virtual void  v26(); // _ZN7S2352C93v26Ev
  S2352C9(); // tgen
};
//SIG(-1 S2352C9) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2352C9 ::~S2352C9(){ note_dtor("S2352C9", this);}
void  S2352C9 ::v24(){vfunc_called(this, "_ZN7S2352C93v24Ev");}
void  S2352C9 ::v25(){vfunc_called(this, "_ZN7S2352C93v25Ev");}
void  S2352C9 ::v26(){vfunc_called(this, "_ZN7S2352C93v26Ev");}
S2352C9 ::S2352C9(){ note_ctor("S2352C9", this);} // tgen

static void Test_S2352C9()
{
  extern Class_Descriptor cd_S2352C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2352C9, buf);
    S2352C9 *dp, &lv = *(dp=new (buf) S2352C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2352C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2352C9)");
    check_base_class_offset(lv, (S2352C10*), 0, "S2352C9");
    check_field_offset(lv, s2352c9f0, ABISELECT(8,4), "S2352C9.s2352c9f0");
    check_field_offset(lv, s2352c9f1, ABISELECT(32,20), "S2352C9.s2352c9f1");
    check_field_offset(lv, s2352c9f2, ABISELECT(64,52), "S2352C9.s2352c9f2");
    test_class_info(&lv, &cd_S2352C9);
    dp->~S2352C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2352C9(Test_S2352C9, "S2352C9", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2352C9C1Ev();
extern void _ZN7S2352C9D1Ev();
Name_Map name_map_S2352C9[] = {
  NSPAIR(_ZN7S2352C9C1Ev),
  NSPAIR(_ZN7S2352C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2352C10;
extern VTBL_ENTRY _ZTI8S2352C10[];
extern  VTBL_ENTRY _ZTV8S2352C10[];
static Base_Class bases_S2352C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2352C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2352C9[];
extern void _ZN7S2352C9D1Ev();
extern void _ZN7S2352C9D0Ev();
extern void _ZN8S2352C103v21Ev();
extern void _ZN8S2352C103v22Ev();
extern void _ZN8S2352C103v23Ev();
extern void _ZN7S2352C93v24Ev();
extern void _ZN7S2352C93v25Ev();
extern void _ZN7S2352C93v26Ev();
static  VTBL_ENTRY vtc_S2352C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2352C9[0]),
  (VTBL_ENTRY)&_ZN7S2352C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2352C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2352C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2352C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2352C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2352C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2352C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2352C93v26Ev,
};
extern VTBL_ENTRY _ZTI7S2352C9[];
extern  VTBL_ENTRY _ZTV7S2352C9[];
Class_Descriptor cd_S2352C9 = {  "S2352C9", // class name
  bases_S2352C9, 1,
  &(vtc_S2352C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2352C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2352C9),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  S2352C8  : S2352C9 {
  virtual  ~S2352C8(); // _ZN7S2352C8D1Ev
  virtual void  v27(); // _ZN7S2352C83v27Ev
  virtual void  v28(); // _ZN7S2352C83v28Ev
  virtual void  v29(); // _ZN7S2352C83v29Ev
  virtual void  v30(); // _ZN7S2352C83v30Ev
  S2352C8(); // tgen
};
//SIG(-1 S2352C8) C1{ BC2{ BC3{ vd v5 v6 v7} vd v8 v9 v10 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4}


 S2352C8 ::~S2352C8(){ note_dtor("S2352C8", this);}
void  S2352C8 ::v27(){vfunc_called(this, "_ZN7S2352C83v27Ev");}
void  S2352C8 ::v28(){vfunc_called(this, "_ZN7S2352C83v28Ev");}
void  S2352C8 ::v29(){vfunc_called(this, "_ZN7S2352C83v29Ev");}
void  S2352C8 ::v30(){vfunc_called(this, "_ZN7S2352C83v30Ev");}
S2352C8 ::S2352C8(){ note_ctor("S2352C8", this);} // tgen

static void Test_S2352C8()
{
  extern Class_Descriptor cd_S2352C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2352C8, buf);
    S2352C8 *dp, &lv = *(dp=new (buf) S2352C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2352C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2352C8)");
    check_base_class_offset(lv, (S2352C10*)(S2352C9*), 0, "S2352C8");
    check_base_class_offset(lv, (S2352C9*), 0, "S2352C8");
    test_class_info(&lv, &cd_S2352C8);
    dp->~S2352C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2352C8(Test_S2352C8, "S2352C8", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2352C8C1Ev();
extern void _ZN7S2352C8D1Ev();
Name_Map name_map_S2352C8[] = {
  NSPAIR(_ZN7S2352C8C1Ev),
  NSPAIR(_ZN7S2352C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2352C10;
extern VTBL_ENTRY _ZTI8S2352C10[];
extern  VTBL_ENTRY _ZTV8S2352C10[];
extern Class_Descriptor cd_S2352C9;
extern VTBL_ENTRY _ZTI7S2352C9[];
extern  VTBL_ENTRY _ZTV7S2352C9[];
static Base_Class bases_S2352C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2352C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2352C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2352C8[];
extern void _ZN7S2352C8D1Ev();
extern void _ZN7S2352C8D0Ev();
extern void _ZN8S2352C103v21Ev();
extern void _ZN8S2352C103v22Ev();
extern void _ZN8S2352C103v23Ev();
extern void _ZN7S2352C93v24Ev();
extern void _ZN7S2352C93v25Ev();
extern void _ZN7S2352C93v26Ev();
extern void _ZN7S2352C83v27Ev();
extern void _ZN7S2352C83v28Ev();
extern void _ZN7S2352C83v29Ev();
extern void _ZN7S2352C83v30Ev();
static  VTBL_ENTRY vtc_S2352C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2352C8[0]),
  (VTBL_ENTRY)&_ZN7S2352C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2352C8D0Ev,
  (VTBL_ENTRY)&_ZN8S2352C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2352C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2352C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2352C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2352C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2352C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2352C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2352C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2352C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2352C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2352C8[];
extern  VTBL_ENTRY _ZTV7S2352C8[];
Class_Descriptor cd_S2352C8 = {  "S2352C8", // class name
  bases_S2352C8, 2,
  &(vtc_S2352C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2352C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2352C8),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2352C2  : S2352C3 , S2352C8 {
  int s2352c2f0[3];
  char s2352c2f1;
  ::S5166C24 s2352c2f2;
  virtual  ~S2352C2(); // _ZN7S2352C2D1Ev
  virtual void  v31(); // _ZN7S2352C23v31Ev
  virtual void  v32(); // _ZN7S2352C23v32Ev
  virtual void  v33(); // _ZN7S2352C23v33Ev
  virtual void  v34(); // _ZN7S2352C23v34Ev
  virtual void  v35(); // _ZN7S2352C23v35Ev
  virtual void  v36(); // _ZN7S2352C23v36Ev
  S2352C2(); // tgen
};
//SIG(-1 S2352C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd v10 v11 v12} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp Fc Fi} BC7{ BC8{ BC9{ vd v23 v24 v25} vd v26 v27 v28 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m FL[4]} Fc} vd v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 Fi[3] Fc FC13{ BC14{ m Fp Fi FC15{ m} FC16{ m}}}}


 S2352C2 ::~S2352C2(){ note_dtor("S2352C2", this);}
void  S2352C2 ::v31(){vfunc_called(this, "_ZN7S2352C23v31Ev");}
void  S2352C2 ::v32(){vfunc_called(this, "_ZN7S2352C23v32Ev");}
void  S2352C2 ::v33(){vfunc_called(this, "_ZN7S2352C23v33Ev");}
void  S2352C2 ::v34(){vfunc_called(this, "_ZN7S2352C23v34Ev");}
void  S2352C2 ::v35(){vfunc_called(this, "_ZN7S2352C23v35Ev");}
void  S2352C2 ::v36(){vfunc_called(this, "_ZN7S2352C23v36Ev");}
S2352C2 ::S2352C2(){ note_ctor("S2352C2", this);} // tgen

static void Test_S2352C2()
{
  extern Class_Descriptor cd_S2352C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,33)];
    init_test(&cd_S2352C2, buf);
    S2352C2 *dp, &lv = *(dp=new (buf) S2352C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,128), "sizeof(S2352C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2352C2)");
    check_base_class_offset(lv, (S2352C4*)(S2352C3*), 0, "S2352C2");
    check_base_class_offset(lv, (S2352C7*)(S2352C3*), ABISELECT(40,28), "S2352C2");
    check_base_class_offset(lv, (S2352C3*), 0, "S2352C2");
    check_base_class_offset(lv, (S2352C10*)(S2352C9*)(S2352C8*), ABISELECT(64,44), "S2352C2");
    check_base_class_offset(lv, (S2352C9*)(S2352C8*), ABISELECT(64,44), "S2352C2");
    check_base_class_offset(lv, (S2352C8*), ABISELECT(64,44), "S2352C2");
    check_field_offset(lv, s2352c2f0, ABISELECT(132,100), "S2352C2.s2352c2f0");
    check_field_offset(lv, s2352c2f1, ABISELECT(144,112), "S2352C2.s2352c2f1");
    check_field_offset(lv, s2352c2f2, ABISELECT(152,116), "S2352C2.s2352c2f2");
    test_class_info(&lv, &cd_S2352C2);
    dp->~S2352C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2352C2(Test_S2352C2, "S2352C2", ABISELECT(168,128));

#else // __cplusplus

extern void _ZN7S2352C2C1Ev();
extern void _ZN7S2352C2D1Ev();
Name_Map name_map_S2352C2[] = {
  NSPAIR(_ZN7S2352C2C1Ev),
  NSPAIR(_ZN7S2352C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2352C4;
extern VTBL_ENTRY _ZTI7S2352C4[];
extern  VTBL_ENTRY _ZTV7S2352C4[];
extern Class_Descriptor cd_S2352C7;
extern VTBL_ENTRY _ZTI7S2352C7[];
extern  VTBL_ENTRY _ZTV7S2352C7[];
extern Class_Descriptor cd_S2352C3;
extern VTBL_ENTRY _ZTI7S2352C3[];
extern  VTBL_ENTRY _ZTV7S2352C3[];
extern Class_Descriptor cd_S2352C10;
extern VTBL_ENTRY _ZTI8S2352C10[];
extern  VTBL_ENTRY _ZTV8S2352C10[];
extern Class_Descriptor cd_S2352C9;
extern VTBL_ENTRY _ZTI7S2352C9[];
extern  VTBL_ENTRY _ZTV7S2352C9[];
extern Class_Descriptor cd_S2352C8;
extern VTBL_ENTRY _ZTI7S2352C8[];
extern  VTBL_ENTRY _ZTV7S2352C8[];
static Base_Class bases_S2352C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2352C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2352C7,    ABISELECT(40,28), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2352C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2352C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2352C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2352C8,    ABISELECT(64,44), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2352C2[];
extern void _ZN7S2352C2D1Ev();
extern void _ZN7S2352C2D0Ev();
extern void _ZN7S2352C42v5Ev();
extern void _ZN7S2352C42v6Ev();
extern void _ZN7S2352C42v7Ev();
extern void _ZN7S2352C33v11Ev();
extern void _ZN7S2352C33v12Ev();
extern void _ZN7S2352C33v13Ev();
extern void _ZN7S2352C33v14Ev();
extern void _ZN7S2352C33v15Ev();
extern void _ZN7S2352C33v16Ev();
extern void _ZN7S2352C33v17Ev();
extern void _ZN7S2352C33v18Ev();
extern void _ZN7S2352C33v19Ev();
extern void _ZN7S2352C33v20Ev();
extern void _ZN7S2352C23v31Ev();
extern void _ZN7S2352C23v32Ev();
extern void _ZN7S2352C23v33Ev();
extern void _ZN7S2352C23v34Ev();
extern void _ZN7S2352C23v35Ev();
extern void _ZN7S2352C23v36Ev();
extern void ABISELECT(_ZThn40_N7S2352C2D1Ev,_ZThn28_N7S2352C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2352C2D0Ev,_ZThn28_N7S2352C2D0Ev)();
extern void _ZN7S2352C72v8Ev();
extern void _ZN7S2352C72v9Ev();
extern void _ZN7S2352C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2352C2D1Ev,_ZThn44_N7S2352C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S2352C2D0Ev,_ZThn44_N7S2352C2D0Ev)();
extern void _ZN8S2352C103v21Ev();
extern void _ZN8S2352C103v22Ev();
extern void _ZN8S2352C103v23Ev();
extern void _ZN7S2352C93v24Ev();
extern void _ZN7S2352C93v25Ev();
extern void _ZN7S2352C93v26Ev();
extern void _ZN7S2352C83v27Ev();
extern void _ZN7S2352C83v28Ev();
extern void _ZN7S2352C83v29Ev();
extern void _ZN7S2352C83v30Ev();
static  VTBL_ENTRY vtc_S2352C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2352C2[0]),
  (VTBL_ENTRY)&_ZN7S2352C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2352C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2352C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2352C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2352C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2352C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2352C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2352C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2352C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2352C23v36Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2352C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2352C2D1Ev,_ZThn28_N7S2352C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2352C2D0Ev,_ZThn28_N7S2352C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2352C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2352C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2352C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2352C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2352C2D1Ev,_ZThn44_N7S2352C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2352C2D0Ev,_ZThn44_N7S2352C2D0Ev),
  (VTBL_ENTRY)&_ZN8S2352C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2352C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2352C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2352C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2352C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2352C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2352C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2352C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2352C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2352C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2352C2[];
extern  VTBL_ENTRY _ZTV7S2352C2[];
Class_Descriptor cd_S2352C2 = {  "S2352C2", // class name
  bases_S2352C2, 6,
  &(vtc_S2352C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,128), // object size
  NSPAIRA(_ZTI7S2352C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2352C2),44, //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  S2352C1  : S2352C2 {
  ::S2355C18_nt s2352c1f0;
  ::S2355C19_nt s2352c1f1;
  int s2352c1f2[2];
  ::S2355C25_nt s2352c1f3;
  int s2352c1f4;
  void *s2352c1f5[2];
  virtual  ~S2352C1(); // _ZN7S2352C1D1Ev
  virtual void  v1(); // _ZN7S2352C12v1Ev
  virtual void  v2(); // _ZN7S2352C12v2Ev
  virtual void  v3(); // _ZN7S2352C12v3Ev
  virtual void  v4(); // _ZN7S2352C12v4Ev
  S2352C1(); // tgen
};
//SIG(1 S2352C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd v8 v9 v10} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp Fc Fi} BC8{ BC9{ BC10{ vd v21 v22 v23} vd v24 v25 v26 FC11{ m Fp Fi[2] FC12{ m}} FC13{ m FL[4]} Fc} vd v27 v28 v29 v30} vd v31 v32 v33 v34 v35 v36 Fi[3] Fc FC14{ BC15{ m Fp Fi FC16{ m} FC17{ m}}}} vd v1 v2 v3 v4 FC18{ vd v37 v38 v39 v40 Fp} FC19{ BC20{ vd v42 FC21{ m FC15} Fp[3] Fc} v41 Fp} Fi[2] FC22{ Fi[2] FC23{ Fi[2]}[10] FC24{ Fi[3] Fc[256]}[10]} Fi Fp[2]}


 S2352C1 ::~S2352C1(){ note_dtor("S2352C1", this);}
void  S2352C1 ::v1(){vfunc_called(this, "_ZN7S2352C12v1Ev");}
void  S2352C1 ::v2(){vfunc_called(this, "_ZN7S2352C12v2Ev");}
void  S2352C1 ::v3(){vfunc_called(this, "_ZN7S2352C12v3Ev");}
void  S2352C1 ::v4(){vfunc_called(this, "_ZN7S2352C12v4Ev");}
S2352C1 ::S2352C1(){ note_ctor("S2352C1", this);} // tgen

static void Test_S2352C1()
{
  extern Class_Descriptor cd_S2352C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(382,741)];
    init_test(&cd_S2352C1, buf);
    S2352C1 *dp, &lv = *(dp=new (buf) S2352C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3048,2960), "sizeof(S2352C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2352C1)");
    check_base_class_offset(lv, (S2352C4*)(S2352C3*)(S2352C2*), 0, "S2352C1");
    check_base_class_offset(lv, (S2352C7*)(S2352C3*)(S2352C2*), ABISELECT(40,28), "S2352C1");
    check_base_class_offset(lv, (S2352C3*)(S2352C2*), 0, "S2352C1");
    check_base_class_offset(lv, (S2352C10*)(S2352C9*)(S2352C8*)(S2352C2*), ABISELECT(64,44), "S2352C1");
    check_base_class_offset(lv, (S2352C9*)(S2352C8*)(S2352C2*), ABISELECT(64,44), "S2352C1");
    check_base_class_offset(lv, (S2352C8*)(S2352C2*), ABISELECT(64,44), "S2352C1");
    check_base_class_offset(lv, (S2352C2*), 0, "S2352C1");
    check_field_offset(lv, s2352c1f0, ABISELECT(168,128), "S2352C1.s2352c1f0");
    check_field_offset(lv, s2352c1f1, ABISELECT(184,136), "S2352C1.s2352c1f1");
    check_field_offset(lv, s2352c1f2, ABISELECT(248,172), "S2352C1.s2352c1f2");
    check_field_offset(lv, s2352c1f3, ABISELECT(256,180), "S2352C1.s2352c1f3");
    check_field_offset(lv, s2352c1f4, ABISELECT(3024,2948), "S2352C1.s2352c1f4");
    check_field_offset(lv, s2352c1f5, ABISELECT(3032,2952), "S2352C1.s2352c1f5");
    test_class_info(&lv, &cd_S2352C1);
    dp->~S2352C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2352C1(Test_S2352C1, "S2352C1", ABISELECT(3048,2960));

#else // __cplusplus

extern void _ZN7S2352C1C1Ev();
extern void _ZN7S2352C1D1Ev();
Name_Map name_map_S2352C1[] = {
  NSPAIR(_ZN7S2352C1C1Ev),
  NSPAIR(_ZN7S2352C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2352C4;
extern VTBL_ENTRY _ZTI7S2352C4[];
extern  VTBL_ENTRY _ZTV7S2352C4[];
extern Class_Descriptor cd_S2352C7;
extern VTBL_ENTRY _ZTI7S2352C7[];
extern  VTBL_ENTRY _ZTV7S2352C7[];
extern Class_Descriptor cd_S2352C3;
extern VTBL_ENTRY _ZTI7S2352C3[];
extern  VTBL_ENTRY _ZTV7S2352C3[];
extern Class_Descriptor cd_S2352C10;
extern VTBL_ENTRY _ZTI8S2352C10[];
extern  VTBL_ENTRY _ZTV8S2352C10[];
extern Class_Descriptor cd_S2352C9;
extern VTBL_ENTRY _ZTI7S2352C9[];
extern  VTBL_ENTRY _ZTV7S2352C9[];
extern Class_Descriptor cd_S2352C8;
extern VTBL_ENTRY _ZTI7S2352C8[];
extern  VTBL_ENTRY _ZTV7S2352C8[];
extern Class_Descriptor cd_S2352C2;
extern VTBL_ENTRY _ZTI7S2352C2[];
extern  VTBL_ENTRY _ZTV7S2352C2[];
static Base_Class bases_S2352C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2352C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2352C7,    ABISELECT(40,28), //bcp->offset
    27, //bcp->virtual_function_table_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_S2352C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2352C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2352C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2352C8,    ABISELECT(64,44), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2352C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2352C1[];
extern void _ZN7S2352C1D1Ev();
extern void _ZN7S2352C1D0Ev();
extern void _ZN7S2352C42v5Ev();
extern void _ZN7S2352C42v6Ev();
extern void _ZN7S2352C42v7Ev();
extern void _ZN7S2352C33v11Ev();
extern void _ZN7S2352C33v12Ev();
extern void _ZN7S2352C33v13Ev();
extern void _ZN7S2352C33v14Ev();
extern void _ZN7S2352C33v15Ev();
extern void _ZN7S2352C33v16Ev();
extern void _ZN7S2352C33v17Ev();
extern void _ZN7S2352C33v18Ev();
extern void _ZN7S2352C33v19Ev();
extern void _ZN7S2352C33v20Ev();
extern void _ZN7S2352C23v31Ev();
extern void _ZN7S2352C23v32Ev();
extern void _ZN7S2352C23v33Ev();
extern void _ZN7S2352C23v34Ev();
extern void _ZN7S2352C23v35Ev();
extern void _ZN7S2352C23v36Ev();
extern void _ZN7S2352C12v1Ev();
extern void _ZN7S2352C12v2Ev();
extern void _ZN7S2352C12v3Ev();
extern void _ZN7S2352C12v4Ev();
extern void ABISELECT(_ZThn40_N7S2352C1D1Ev,_ZThn28_N7S2352C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2352C1D0Ev,_ZThn28_N7S2352C1D0Ev)();
extern void _ZN7S2352C72v8Ev();
extern void _ZN7S2352C72v9Ev();
extern void _ZN7S2352C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2352C1D1Ev,_ZThn44_N7S2352C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S2352C1D0Ev,_ZThn44_N7S2352C1D0Ev)();
extern void _ZN8S2352C103v21Ev();
extern void _ZN8S2352C103v22Ev();
extern void _ZN8S2352C103v23Ev();
extern void _ZN7S2352C93v24Ev();
extern void _ZN7S2352C93v25Ev();
extern void _ZN7S2352C93v26Ev();
extern void _ZN7S2352C83v27Ev();
extern void _ZN7S2352C83v28Ev();
extern void _ZN7S2352C83v29Ev();
extern void _ZN7S2352C83v30Ev();
static  VTBL_ENTRY vtc_S2352C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2352C1[0]),
  (VTBL_ENTRY)&_ZN7S2352C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2352C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2352C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2352C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2352C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2352C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2352C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2352C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2352C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2352C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2352C23v36Ev,
  (VTBL_ENTRY)&_ZN7S2352C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2352C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2352C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2352C12v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2352C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2352C1D1Ev,_ZThn28_N7S2352C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2352C1D0Ev,_ZThn28_N7S2352C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2352C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2352C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2352C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2352C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2352C1D1Ev,_ZThn44_N7S2352C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2352C1D0Ev,_ZThn44_N7S2352C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2352C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2352C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2352C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2352C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2352C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2352C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2352C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2352C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2352C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2352C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2352C1[];
extern  VTBL_ENTRY _ZTV7S2352C1[];
Class_Descriptor cd_S2352C1 = {  "S2352C1", // class name
  bases_S2352C1, 7,
  &(vtc_S2352C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3048,2960), // object size
  NSPAIRA(_ZTI7S2352C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2352C1),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1812C3  : S1C11_nt {
  virtual void  v5(); // _ZN7S1812C32v5Ev
  virtual void  v6(); // _ZN7S1812C32v6Ev
  virtual void  v7(); // _ZN7S1812C32v7Ev
  virtual void  v8(); // _ZN7S1812C32v8Ev
  virtual void  v9(); // _ZN7S1812C32v9Ev
  virtual void  v10(); // _ZN7S1812C33v10Ev
  virtual void  v11(); // _ZN7S1812C33v11Ev
  virtual void  v12(); // _ZN7S1812C33v12Ev
  virtual void  v13(); // _ZN7S1812C33v13Ev
  virtual void  v14(); // _ZN7S1812C33v14Ev
  virtual void  v15(); // _ZN7S1812C33v15Ev
  virtual void  v16(); // _ZN7S1812C33v16Ev
  virtual void  v17(); // _ZN7S1812C33v17Ev
  virtual void  v18(); // _ZN7S1812C33v18Ev
  virtual void  v19(); // _ZN7S1812C33v19Ev
  virtual void  v20(); // _ZN7S1812C33v20Ev
  virtual void  v21(); // _ZN7S1812C33v21Ev
  virtual void  v22(); // _ZN7S1812C33v22Ev
  virtual void  v23(); // _ZN7S1812C33v23Ev
  virtual void  v24(); // _ZN7S1812C33v24Ev
  virtual void  v25(); // _ZN7S1812C33v25Ev
  virtual void  v26(); // _ZN7S1812C33v26Ev
  virtual void  v27(); // _ZN7S1812C33v27Ev
  virtual void  v28(); // _ZN7S1812C33v28Ev
  virtual void  v29(); // _ZN7S1812C33v29Ev
  virtual void  v30(); // _ZN7S1812C33v30Ev
  virtual void  v31(); // _ZN7S1812C33v31Ev
  virtual void  v32(); // _ZN7S1812C33v32Ev
  virtual void  v33(); // _ZN7S1812C33v33Ev
  virtual void  v34(); // _ZN7S1812C33v34Ev
  virtual void  v35(); // _ZN7S1812C33v35Ev
  virtual void  v36(); // _ZN7S1812C33v36Ev
  virtual void  v37(); // _ZN7S1812C33v37Ev
  virtual void  v38(); // _ZN7S1812C33v38Ev
  virtual void  v39(); // _ZN7S1812C33v39Ev
  virtual void  v40(); // _ZN7S1812C33v40Ev
  virtual void  v41(); // _ZN7S1812C33v41Ev
  virtual void  v42(); // _ZN7S1812C33v42Ev
  virtual void  v43(); // _ZN7S1812C33v43Ev
  virtual void  v44(); // _ZN7S1812C33v44Ev
  virtual void  v45(); // _ZN7S1812C33v45Ev
  virtual void  v46(); // _ZN7S1812C33v46Ev
  virtual void  v47(); // _ZN7S1812C33v47Ev
  virtual void  v48(); // _ZN7S1812C33v48Ev
  virtual void  v49(); // _ZN7S1812C33v49Ev
  virtual void  v50(); // _ZN7S1812C33v50Ev
  virtual void  v51(); // _ZN7S1812C33v51Ev
  virtual void  v52(); // _ZN7S1812C33v52Ev
  virtual void  v53(); // _ZN7S1812C33v53Ev
  virtual void  v54(); // _ZN7S1812C33v54Ev
  virtual void  v55(); // _ZN7S1812C33v55Ev
  virtual void  v56(); // _ZN7S1812C33v56Ev
  virtual void  v57(); // _ZN7S1812C33v57Ev
  virtual void  v58(); // _ZN7S1812C33v58Ev
  virtual void  v59(); // _ZN7S1812C33v59Ev
  virtual void  v60(); // _ZN7S1812C33v60Ev
  virtual void  v61(); // _ZN7S1812C33v61Ev
  virtual void  v62(); // _ZN7S1812C33v62Ev
  virtual void  v63(); // _ZN7S1812C33v63Ev
  virtual void  v64(); // _ZN7S1812C33v64Ev
  virtual void  v65(); // _ZN7S1812C33v65Ev
  virtual void  v66(); // _ZN7S1812C33v66Ev
  virtual void  v67(); // _ZN7S1812C33v67Ev
  virtual void  v68(); // _ZN7S1812C33v68Ev
  virtual void  v69(); // _ZN7S1812C33v69Ev
  virtual void  v70(); // _ZN7S1812C33v70Ev
  virtual void  v71(); // _ZN7S1812C33v71Ev
  virtual void  v72(); // _ZN7S1812C33v72Ev
  virtual void  v73(); // _ZN7S1812C33v73Ev
  virtual void  v74(); // _ZN7S1812C33v74Ev
  virtual void  v75(); // _ZN7S1812C33v75Ev
  virtual void  v76(); // _ZN7S1812C33v76Ev
  virtual void  v77(); // _ZN7S1812C33v77Ev
  virtual void  v78(); // _ZN7S1812C33v78Ev
  virtual void  v79(); // _ZN7S1812C33v79Ev
  virtual void  v80(); // _ZN7S1812C33v80Ev
  virtual void  v81(); // _ZN7S1812C33v81Ev
  virtual void  v82(); // _ZN7S1812C33v82Ev
  virtual void  v83(); // _ZN7S1812C33v83Ev
  virtual void  v84(); // _ZN7S1812C33v84Ev
  virtual void  v85(); // _ZN7S1812C33v85Ev
  virtual void  v86(); // _ZN7S1812C33v86Ev
  virtual void  v87(); // _ZN7S1812C33v87Ev
  virtual void  v88(); // _ZN7S1812C33v88Ev
  virtual void  v89(); // _ZN7S1812C33v89Ev
  virtual void  v90(); // _ZN7S1812C33v90Ev
  virtual void  v91(); // _ZN7S1812C33v91Ev
  virtual void  v92(); // _ZN7S1812C33v92Ev
  virtual void  v93(); // _ZN7S1812C33v93Ev
  virtual void  v94(); // _ZN7S1812C33v94Ev
  virtual void  v95(); // _ZN7S1812C33v95Ev
  virtual void  v96(); // _ZN7S1812C33v96Ev
  virtual void  v97(); // _ZN7S1812C33v97Ev
  virtual void  v98(); // _ZN7S1812C33v98Ev
  virtual void  v99(); // _ZN7S1812C33v99Ev
  virtual void  v100(); // _ZN7S1812C34v100Ev
  virtual void  v101(); // _ZN7S1812C34v101Ev
  virtual void  v102(); // _ZN7S1812C34v102Ev
  virtual void  v103(); // _ZN7S1812C34v103Ev
  virtual void  v104(); // _ZN7S1812C34v104Ev
  virtual void  v105(); // _ZN7S1812C34v105Ev
  virtual void  v106(); // _ZN7S1812C34v106Ev
  virtual void  v107(); // _ZN7S1812C34v107Ev
  virtual void  v108(); // _ZN7S1812C34v108Ev
  virtual void  v109(); // _ZN7S1812C34v109Ev
  virtual void  v110(); // _ZN7S1812C34v110Ev
  virtual void  v111(); // _ZN7S1812C34v111Ev
  ~S1812C3(); // tgen
  S1812C3(); // tgen
};
//SIG(-1 S1812C3) C1{ BC2{ vd m Fp Fi} 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 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}


void  S1812C3 ::v5(){vfunc_called(this, "_ZN7S1812C32v5Ev");}
void  S1812C3 ::v6(){vfunc_called(this, "_ZN7S1812C32v6Ev");}
void  S1812C3 ::v7(){vfunc_called(this, "_ZN7S1812C32v7Ev");}
void  S1812C3 ::v8(){vfunc_called(this, "_ZN7S1812C32v8Ev");}
void  S1812C3 ::v9(){vfunc_called(this, "_ZN7S1812C32v9Ev");}
void  S1812C3 ::v10(){vfunc_called(this, "_ZN7S1812C33v10Ev");}
void  S1812C3 ::v11(){vfunc_called(this, "_ZN7S1812C33v11Ev");}
void  S1812C3 ::v12(){vfunc_called(this, "_ZN7S1812C33v12Ev");}
void  S1812C3 ::v13(){vfunc_called(this, "_ZN7S1812C33v13Ev");}
void  S1812C3 ::v14(){vfunc_called(this, "_ZN7S1812C33v14Ev");}
void  S1812C3 ::v15(){vfunc_called(this, "_ZN7S1812C33v15Ev");}
void  S1812C3 ::v16(){vfunc_called(this, "_ZN7S1812C33v16Ev");}
void  S1812C3 ::v17(){vfunc_called(this, "_ZN7S1812C33v17Ev");}
void  S1812C3 ::v18(){vfunc_called(this, "_ZN7S1812C33v18Ev");}
void  S1812C3 ::v19(){vfunc_called(this, "_ZN7S1812C33v19Ev");}
void  S1812C3 ::v20(){vfunc_called(this, "_ZN7S1812C33v20Ev");}
void  S1812C3 ::v21(){vfunc_called(this, "_ZN7S1812C33v21Ev");}
void  S1812C3 ::v22(){vfunc_called(this, "_ZN7S1812C33v22Ev");}
void  S1812C3 ::v23(){vfunc_called(this, "_ZN7S1812C33v23Ev");}
void  S1812C3 ::v24(){vfunc_called(this, "_ZN7S1812C33v24Ev");}
void  S1812C3 ::v25(){vfunc_called(this, "_ZN7S1812C33v25Ev");}
void  S1812C3 ::v26(){vfunc_called(this, "_ZN7S1812C33v26Ev");}
void  S1812C3 ::v27(){vfunc_called(this, "_ZN7S1812C33v27Ev");}
void  S1812C3 ::v28(){vfunc_called(this, "_ZN7S1812C33v28Ev");}
void  S1812C3 ::v29(){vfunc_called(this, "_ZN7S1812C33v29Ev");}
void  S1812C3 ::v30(){vfunc_called(this, "_ZN7S1812C33v30Ev");}
void  S1812C3 ::v31(){vfunc_called(this, "_ZN7S1812C33v31Ev");}
void  S1812C3 ::v32(){vfunc_called(this, "_ZN7S1812C33v32Ev");}
void  S1812C3 ::v33(){vfunc_called(this, "_ZN7S1812C33v33Ev");}
void  S1812C3 ::v34(){vfunc_called(this, "_ZN7S1812C33v34Ev");}
void  S1812C3 ::v35(){vfunc_called(this, "_ZN7S1812C33v35Ev");}
void  S1812C3 ::v36(){vfunc_called(this, "_ZN7S1812C33v36Ev");}
void  S1812C3 ::v37(){vfunc_called(this, "_ZN7S1812C33v37Ev");}
void  S1812C3 ::v38(){vfunc_called(this, "_ZN7S1812C33v38Ev");}
void  S1812C3 ::v39(){vfunc_called(this, "_ZN7S1812C33v39Ev");}
void  S1812C3 ::v40(){vfunc_called(this, "_ZN7S1812C33v40Ev");}
void  S1812C3 ::v41(){vfunc_called(this, "_ZN7S1812C33v41Ev");}
void  S1812C3 ::v42(){vfunc_called(this, "_ZN7S1812C33v42Ev");}
void  S1812C3 ::v43(){vfunc_called(this, "_ZN7S1812C33v43Ev");}
void  S1812C3 ::v44(){vfunc_called(this, "_ZN7S1812C33v44Ev");}
void  S1812C3 ::v45(){vfunc_called(this, "_ZN7S1812C33v45Ev");}
void  S1812C3 ::v46(){vfunc_called(this, "_ZN7S1812C33v46Ev");}
void  S1812C3 ::v47(){vfunc_called(this, "_ZN7S1812C33v47Ev");}
void  S1812C3 ::v48(){vfunc_called(this, "_ZN7S1812C33v48Ev");}
void  S1812C3 ::v49(){vfunc_called(this, "_ZN7S1812C33v49Ev");}
void  S1812C3 ::v50(){vfunc_called(this, "_ZN7S1812C33v50Ev");}
void  S1812C3 ::v51(){vfunc_called(this, "_ZN7S1812C33v51Ev");}
void  S1812C3 ::v52(){vfunc_called(this, "_ZN7S1812C33v52Ev");}
void  S1812C3 ::v53(){vfunc_called(this, "_ZN7S1812C33v53Ev");}
void  S1812C3 ::v54(){vfunc_called(this, "_ZN7S1812C33v54Ev");}
void  S1812C3 ::v55(){vfunc_called(this, "_ZN7S1812C33v55Ev");}
void  S1812C3 ::v56(){vfunc_called(this, "_ZN7S1812C33v56Ev");}
void  S1812C3 ::v57(){vfunc_called(this, "_ZN7S1812C33v57Ev");}
void  S1812C3 ::v58(){vfunc_called(this, "_ZN7S1812C33v58Ev");}
void  S1812C3 ::v59(){vfunc_called(this, "_ZN7S1812C33v59Ev");}
void  S1812C3 ::v60(){vfunc_called(this, "_ZN7S1812C33v60Ev");}
void  S1812C3 ::v61(){vfunc_called(this, "_ZN7S1812C33v61Ev");}
void  S1812C3 ::v62(){vfunc_called(this, "_ZN7S1812C33v62Ev");}
void  S1812C3 ::v63(){vfunc_called(this, "_ZN7S1812C33v63Ev");}
void  S1812C3 ::v64(){vfunc_called(this, "_ZN7S1812C33v64Ev");}
void  S1812C3 ::v65(){vfunc_called(this, "_ZN7S1812C33v65Ev");}
void  S1812C3 ::v66(){vfunc_called(this, "_ZN7S1812C33v66Ev");}
void  S1812C3 ::v67(){vfunc_called(this, "_ZN7S1812C33v67Ev");}
void  S1812C3 ::v68(){vfunc_called(this, "_ZN7S1812C33v68Ev");}
void  S1812C3 ::v69(){vfunc_called(this, "_ZN7S1812C33v69Ev");}
void  S1812C3 ::v70(){vfunc_called(this, "_ZN7S1812C33v70Ev");}
void  S1812C3 ::v71(){vfunc_called(this, "_ZN7S1812C33v71Ev");}
void  S1812C3 ::v72(){vfunc_called(this, "_ZN7S1812C33v72Ev");}
void  S1812C3 ::v73(){vfunc_called(this, "_ZN7S1812C33v73Ev");}
void  S1812C3 ::v74(){vfunc_called(this, "_ZN7S1812C33v74Ev");}
void  S1812C3 ::v75(){vfunc_called(this, "_ZN7S1812C33v75Ev");}
void  S1812C3 ::v76(){vfunc_called(this, "_ZN7S1812C33v76Ev");}
void  S1812C3 ::v77(){vfunc_called(this, "_ZN7S1812C33v77Ev");}
void  S1812C3 ::v78(){vfunc_called(this, "_ZN7S1812C33v78Ev");}
void  S1812C3 ::v79(){vfunc_called(this, "_ZN7S1812C33v79Ev");}
void  S1812C3 ::v80(){vfunc_called(this, "_ZN7S1812C33v80Ev");}
void  S1812C3 ::v81(){vfunc_called(this, "_ZN7S1812C33v81Ev");}
void  S1812C3 ::v82(){vfunc_called(this, "_ZN7S1812C33v82Ev");}
void  S1812C3 ::v83(){vfunc_called(this, "_ZN7S1812C33v83Ev");}
void  S1812C3 ::v84(){vfunc_called(this, "_ZN7S1812C33v84Ev");}
void  S1812C3 ::v85(){vfunc_called(this, "_ZN7S1812C33v85Ev");}
void  S1812C3 ::v86(){vfunc_called(this, "_ZN7S1812C33v86Ev");}
void  S1812C3 ::v87(){vfunc_called(this, "_ZN7S1812C33v87Ev");}
void  S1812C3 ::v88(){vfunc_called(this, "_ZN7S1812C33v88Ev");}
void  S1812C3 ::v89(){vfunc_called(this, "_ZN7S1812C33v89Ev");}
void  S1812C3 ::v90(){vfunc_called(this, "_ZN7S1812C33v90Ev");}
void  S1812C3 ::v91(){vfunc_called(this, "_ZN7S1812C33v91Ev");}
void  S1812C3 ::v92(){vfunc_called(this, "_ZN7S1812C33v92Ev");}
void  S1812C3 ::v93(){vfunc_called(this, "_ZN7S1812C33v93Ev");}
void  S1812C3 ::v94(){vfunc_called(this, "_ZN7S1812C33v94Ev");}
void  S1812C3 ::v95(){vfunc_called(this, "_ZN7S1812C33v95Ev");}
void  S1812C3 ::v96(){vfunc_called(this, "_ZN7S1812C33v96Ev");}
void  S1812C3 ::v97(){vfunc_called(this, "_ZN7S1812C33v97Ev");}
void  S1812C3 ::v98(){vfunc_called(this, "_ZN7S1812C33v98Ev");}
void  S1812C3 ::v99(){vfunc_called(this, "_ZN7S1812C33v99Ev");}
void  S1812C3 ::v100(){vfunc_called(this, "_ZN7S1812C34v100Ev");}
void  S1812C3 ::v101(){vfunc_called(this, "_ZN7S1812C34v101Ev");}
void  S1812C3 ::v102(){vfunc_called(this, "_ZN7S1812C34v102Ev");}
void  S1812C3 ::v103(){vfunc_called(this, "_ZN7S1812C34v103Ev");}
void  S1812C3 ::v104(){vfunc_called(this, "_ZN7S1812C34v104Ev");}
void  S1812C3 ::v105(){vfunc_called(this, "_ZN7S1812C34v105Ev");}
void  S1812C3 ::v106(){vfunc_called(this, "_ZN7S1812C34v106Ev");}
void  S1812C3 ::v107(){vfunc_called(this, "_ZN7S1812C34v107Ev");}
void  S1812C3 ::v108(){vfunc_called(this, "_ZN7S1812C34v108Ev");}
void  S1812C3 ::v109(){vfunc_called(this, "_ZN7S1812C34v109Ev");}
void  S1812C3 ::v110(){vfunc_called(this, "_ZN7S1812C34v110Ev");}
void  S1812C3 ::v111(){vfunc_called(this, "_ZN7S1812C34v111Ev");}
S1812C3 ::~S1812C3(){ note_dtor("S1812C3", this);} // tgen
S1812C3 ::S1812C3(){ note_ctor("S1812C3", this);} // tgen

static void Test_S1812C3()
{
  extern Class_Descriptor cd_S1812C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1812C3, buf);
    S1812C3 *dp, &lv = *(dp=new (buf) S1812C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1812C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1812C3)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S1812C3");
    test_class_info(&lv, &cd_S1812C3);
    dp->~S1812C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1812C3(Test_S1812C3, "S1812C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1812C3C1Ev();
extern void _ZN7S1812C3D1Ev();
Name_Map name_map_S1812C3[] = {
  NSPAIR(_ZN7S1812C3C1Ev),
  NSPAIR(_ZN7S1812C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S1812C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1812C3[];
extern void _ZN7S1812C3D1Ev();
extern void _ZN7S1812C3D0Ev();
extern void _ZN7S1812C32v5Ev();
extern void _ZN7S1812C32v6Ev();
extern void _ZN7S1812C32v7Ev();
extern void _ZN7S1812C32v8Ev();
extern void _ZN7S1812C32v9Ev();
extern void _ZN7S1812C33v10Ev();
extern void _ZN7S1812C33v11Ev();
extern void _ZN7S1812C33v12Ev();
extern void _ZN7S1812C33v13Ev();
extern void _ZN7S1812C33v14Ev();
extern void _ZN7S1812C33v15Ev();
extern void _ZN7S1812C33v16Ev();
extern void _ZN7S1812C33v17Ev();
extern void _ZN7S1812C33v18Ev();
extern void _ZN7S1812C33v19Ev();
extern void _ZN7S1812C33v20Ev();
extern void _ZN7S1812C33v21Ev();
extern void _ZN7S1812C33v22Ev();
extern void _ZN7S1812C33v23Ev();
extern void _ZN7S1812C33v24Ev();
extern void _ZN7S1812C33v25Ev();
extern void _ZN7S1812C33v26Ev();
extern void _ZN7S1812C33v27Ev();
extern void _ZN7S1812C33v28Ev();
extern void _ZN7S1812C33v29Ev();
extern void _ZN7S1812C33v30Ev();
extern void _ZN7S1812C33v31Ev();
extern void _ZN7S1812C33v32Ev();
extern void _ZN7S1812C33v33Ev();
extern void _ZN7S1812C33v34Ev();
extern void _ZN7S1812C33v35Ev();
extern void _ZN7S1812C33v36Ev();
extern void _ZN7S1812C33v37Ev();
extern void _ZN7S1812C33v38Ev();
extern void _ZN7S1812C33v39Ev();
extern void _ZN7S1812C33v40Ev();
extern void _ZN7S1812C33v41Ev();
extern void _ZN7S1812C33v42Ev();
extern void _ZN7S1812C33v43Ev();
extern void _ZN7S1812C33v44Ev();
extern void _ZN7S1812C33v45Ev();
extern void _ZN7S1812C33v46Ev();
extern void _ZN7S1812C33v47Ev();
extern void _ZN7S1812C33v48Ev();
extern void _ZN7S1812C33v49Ev();
extern void _ZN7S1812C33v50Ev();
extern void _ZN7S1812C33v51Ev();
extern void _ZN7S1812C33v52Ev();
extern void _ZN7S1812C33v53Ev();
extern void _ZN7S1812C33v54Ev();
extern void _ZN7S1812C33v55Ev();
extern void _ZN7S1812C33v56Ev();
extern void _ZN7S1812C33v57Ev();
extern void _ZN7S1812C33v58Ev();
extern void _ZN7S1812C33v59Ev();
extern void _ZN7S1812C33v60Ev();
extern void _ZN7S1812C33v61Ev();
extern void _ZN7S1812C33v62Ev();
extern void _ZN7S1812C33v63Ev();
extern void _ZN7S1812C33v64Ev();
extern void _ZN7S1812C33v65Ev();
extern void _ZN7S1812C33v66Ev();
extern void _ZN7S1812C33v67Ev();
extern void _ZN7S1812C33v68Ev();
extern void _ZN7S1812C33v69Ev();
extern void _ZN7S1812C33v70Ev();
extern void _ZN7S1812C33v71Ev();
extern void _ZN7S1812C33v72Ev();
extern void _ZN7S1812C33v73Ev();
extern void _ZN7S1812C33v74Ev();
extern void _ZN7S1812C33v75Ev();
extern void _ZN7S1812C33v76Ev();
extern void _ZN7S1812C33v77Ev();
extern void _ZN7S1812C33v78Ev();
extern void _ZN7S1812C33v79Ev();
extern void _ZN7S1812C33v80Ev();
extern void _ZN7S1812C33v81Ev();
extern void _ZN7S1812C33v82Ev();
extern void _ZN7S1812C33v83Ev();
extern void _ZN7S1812C33v84Ev();
extern void _ZN7S1812C33v85Ev();
extern void _ZN7S1812C33v86Ev();
extern void _ZN7S1812C33v87Ev();
extern void _ZN7S1812C33v88Ev();
extern void _ZN7S1812C33v89Ev();
extern void _ZN7S1812C33v90Ev();
extern void _ZN7S1812C33v91Ev();
extern void _ZN7S1812C33v92Ev();
extern void _ZN7S1812C33v93Ev();
extern void _ZN7S1812C33v94Ev();
extern void _ZN7S1812C33v95Ev();
extern void _ZN7S1812C33v96Ev();
extern void _ZN7S1812C33v97Ev();
extern void _ZN7S1812C33v98Ev();
extern void _ZN7S1812C33v99Ev();
extern void _ZN7S1812C34v100Ev();
extern void _ZN7S1812C34v101Ev();
extern void _ZN7S1812C34v102Ev();
extern void _ZN7S1812C34v103Ev();
extern void _ZN7S1812C34v104Ev();
extern void _ZN7S1812C34v105Ev();
extern void _ZN7S1812C34v106Ev();
extern void _ZN7S1812C34v107Ev();
extern void _ZN7S1812C34v108Ev();
extern void _ZN7S1812C34v109Ev();
extern void _ZN7S1812C34v110Ev();
extern void _ZN7S1812C34v111Ev();
static  VTBL_ENTRY vtc_S1812C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1812C3[0]),
  (VTBL_ENTRY)&_ZN7S1812C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1812C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1812C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1812C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1812C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1812C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1812C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v111Ev,
};
extern VTBL_ENTRY _ZTI7S1812C3[];
extern  VTBL_ENTRY _ZTV7S1812C3[];
Class_Descriptor cd_S1812C3 = {  "S1812C3", // class name
  bases_S1812C3, 1,
  &(vtc_S1812C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1812C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1812C3),111, //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  S1812C2  : S1812C3 {
  ~S1812C2(); // tgen
  S1812C2(); // tgen
};
//SIG(-1 S1812C2) C1{ BC2{ BC3{ vd m Fp Fi} 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 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}}


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

static void Test_S1812C2()
{
  extern Class_Descriptor cd_S1812C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1812C2, buf);
    S1812C2 *dp, &lv = *(dp=new (buf) S1812C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1812C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1812C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S1812C3*), 0, "S1812C2");
    check_base_class_offset(lv, (S1812C3*), 0, "S1812C2");
    test_class_info(&lv, &cd_S1812C2);
    dp->~S1812C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1812C2(Test_S1812C2, "S1812C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1812C2C1Ev();
extern void _ZN7S1812C2D1Ev();
Name_Map name_map_S1812C2[] = {
  NSPAIR(_ZN7S1812C2C1Ev),
  NSPAIR(_ZN7S1812C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1812C3;
extern VTBL_ENTRY _ZTI7S1812C3[];
extern  VTBL_ENTRY _ZTV7S1812C3[];
static Base_Class bases_S1812C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1812C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1812C2[];
extern void _ZN7S1812C2D1Ev();
extern void _ZN7S1812C2D0Ev();
extern void _ZN7S1812C32v5Ev();
extern void _ZN7S1812C32v6Ev();
extern void _ZN7S1812C32v7Ev();
extern void _ZN7S1812C32v8Ev();
extern void _ZN7S1812C32v9Ev();
extern void _ZN7S1812C33v10Ev();
extern void _ZN7S1812C33v11Ev();
extern void _ZN7S1812C33v12Ev();
extern void _ZN7S1812C33v13Ev();
extern void _ZN7S1812C33v14Ev();
extern void _ZN7S1812C33v15Ev();
extern void _ZN7S1812C33v16Ev();
extern void _ZN7S1812C33v17Ev();
extern void _ZN7S1812C33v18Ev();
extern void _ZN7S1812C33v19Ev();
extern void _ZN7S1812C33v20Ev();
extern void _ZN7S1812C33v21Ev();
extern void _ZN7S1812C33v22Ev();
extern void _ZN7S1812C33v23Ev();
extern void _ZN7S1812C33v24Ev();
extern void _ZN7S1812C33v25Ev();
extern void _ZN7S1812C33v26Ev();
extern void _ZN7S1812C33v27Ev();
extern void _ZN7S1812C33v28Ev();
extern void _ZN7S1812C33v29Ev();
extern void _ZN7S1812C33v30Ev();
extern void _ZN7S1812C33v31Ev();
extern void _ZN7S1812C33v32Ev();
extern void _ZN7S1812C33v33Ev();
extern void _ZN7S1812C33v34Ev();
extern void _ZN7S1812C33v35Ev();
extern void _ZN7S1812C33v36Ev();
extern void _ZN7S1812C33v37Ev();
extern void _ZN7S1812C33v38Ev();
extern void _ZN7S1812C33v39Ev();
extern void _ZN7S1812C33v40Ev();
extern void _ZN7S1812C33v41Ev();
extern void _ZN7S1812C33v42Ev();
extern void _ZN7S1812C33v43Ev();
extern void _ZN7S1812C33v44Ev();
extern void _ZN7S1812C33v45Ev();
extern void _ZN7S1812C33v46Ev();
extern void _ZN7S1812C33v47Ev();
extern void _ZN7S1812C33v48Ev();
extern void _ZN7S1812C33v49Ev();
extern void _ZN7S1812C33v50Ev();
extern void _ZN7S1812C33v51Ev();
extern void _ZN7S1812C33v52Ev();
extern void _ZN7S1812C33v53Ev();
extern void _ZN7S1812C33v54Ev();
extern void _ZN7S1812C33v55Ev();
extern void _ZN7S1812C33v56Ev();
extern void _ZN7S1812C33v57Ev();
extern void _ZN7S1812C33v58Ev();
extern void _ZN7S1812C33v59Ev();
extern void _ZN7S1812C33v60Ev();
extern void _ZN7S1812C33v61Ev();
extern void _ZN7S1812C33v62Ev();
extern void _ZN7S1812C33v63Ev();
extern void _ZN7S1812C33v64Ev();
extern void _ZN7S1812C33v65Ev();
extern void _ZN7S1812C33v66Ev();
extern void _ZN7S1812C33v67Ev();
extern void _ZN7S1812C33v68Ev();
extern void _ZN7S1812C33v69Ev();
extern void _ZN7S1812C33v70Ev();
extern void _ZN7S1812C33v71Ev();
extern void _ZN7S1812C33v72Ev();
extern void _ZN7S1812C33v73Ev();
extern void _ZN7S1812C33v74Ev();
extern void _ZN7S1812C33v75Ev();
extern void _ZN7S1812C33v76Ev();
extern void _ZN7S1812C33v77Ev();
extern void _ZN7S1812C33v78Ev();
extern void _ZN7S1812C33v79Ev();
extern void _ZN7S1812C33v80Ev();
extern void _ZN7S1812C33v81Ev();
extern void _ZN7S1812C33v82Ev();
extern void _ZN7S1812C33v83Ev();
extern void _ZN7S1812C33v84Ev();
extern void _ZN7S1812C33v85Ev();
extern void _ZN7S1812C33v86Ev();
extern void _ZN7S1812C33v87Ev();
extern void _ZN7S1812C33v88Ev();
extern void _ZN7S1812C33v89Ev();
extern void _ZN7S1812C33v90Ev();
extern void _ZN7S1812C33v91Ev();
extern void _ZN7S1812C33v92Ev();
extern void _ZN7S1812C33v93Ev();
extern void _ZN7S1812C33v94Ev();
extern void _ZN7S1812C33v95Ev();
extern void _ZN7S1812C33v96Ev();
extern void _ZN7S1812C33v97Ev();
extern void _ZN7S1812C33v98Ev();
extern void _ZN7S1812C33v99Ev();
extern void _ZN7S1812C34v100Ev();
extern void _ZN7S1812C34v101Ev();
extern void _ZN7S1812C34v102Ev();
extern void _ZN7S1812C34v103Ev();
extern void _ZN7S1812C34v104Ev();
extern void _ZN7S1812C34v105Ev();
extern void _ZN7S1812C34v106Ev();
extern void _ZN7S1812C34v107Ev();
extern void _ZN7S1812C34v108Ev();
extern void _ZN7S1812C34v109Ev();
extern void _ZN7S1812C34v110Ev();
extern void _ZN7S1812C34v111Ev();
static  VTBL_ENTRY vtc_S1812C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1812C2[0]),
  (VTBL_ENTRY)&_ZN7S1812C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1812C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1812C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1812C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1812C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1812C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1812C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v111Ev,
};
extern VTBL_ENTRY _ZTI7S1812C2[];
extern  VTBL_ENTRY _ZTV7S1812C2[];
Class_Descriptor cd_S1812C2 = {  "S1812C2", // class name
  bases_S1812C2, 2,
  &(vtc_S1812C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1812C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1812C2),111, //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  S1812C1  : S1812C2 {
  virtual void  v1(); // _ZN7S1812C12v1Ev
  virtual void  v2(); // _ZN7S1812C12v2Ev
  virtual void  v3(); // _ZN7S1812C12v3Ev
  virtual void  v4(); // _ZN7S1812C12v4Ev
  ~S1812C1(); // tgen
  S1812C1(); // tgen
};
//SIG(1 S1812C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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 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}} v1 v2 v3 v4}


void  S1812C1 ::v1(){vfunc_called(this, "_ZN7S1812C12v1Ev");}
void  S1812C1 ::v2(){vfunc_called(this, "_ZN7S1812C12v2Ev");}
void  S1812C1 ::v3(){vfunc_called(this, "_ZN7S1812C12v3Ev");}
void  S1812C1 ::v4(){vfunc_called(this, "_ZN7S1812C12v4Ev");}
S1812C1 ::~S1812C1(){ note_dtor("S1812C1", this);} // tgen
S1812C1 ::S1812C1(){ note_ctor("S1812C1", this);} // tgen

static void Test_S1812C1()
{
  extern Class_Descriptor cd_S1812C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1812C1, buf);
    S1812C1 *dp, &lv = *(dp=new (buf) S1812C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1812C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1812C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S1812C3*)(S1812C2*), 0, "S1812C1");
    check_base_class_offset(lv, (S1812C3*)(S1812C2*), 0, "S1812C1");
    check_base_class_offset(lv, (S1812C2*), 0, "S1812C1");
    test_class_info(&lv, &cd_S1812C1);
    dp->~S1812C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1812C1(Test_S1812C1, "S1812C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1812C1C1Ev();
extern void _ZN7S1812C1D1Ev();
Name_Map name_map_S1812C1[] = {
  NSPAIR(_ZN7S1812C1C1Ev),
  NSPAIR(_ZN7S1812C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1812C3;
extern VTBL_ENTRY _ZTI7S1812C3[];
extern  VTBL_ENTRY _ZTV7S1812C3[];
extern Class_Descriptor cd_S1812C2;
extern VTBL_ENTRY _ZTI7S1812C2[];
extern  VTBL_ENTRY _ZTV7S1812C2[];
static Base_Class bases_S1812C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1812C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1812C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1812C1[];
extern void _ZN7S1812C1D1Ev();
extern void _ZN7S1812C1D0Ev();
extern void _ZN7S1812C32v5Ev();
extern void _ZN7S1812C32v6Ev();
extern void _ZN7S1812C32v7Ev();
extern void _ZN7S1812C32v8Ev();
extern void _ZN7S1812C32v9Ev();
extern void _ZN7S1812C33v10Ev();
extern void _ZN7S1812C33v11Ev();
extern void _ZN7S1812C33v12Ev();
extern void _ZN7S1812C33v13Ev();
extern void _ZN7S1812C33v14Ev();
extern void _ZN7S1812C33v15Ev();
extern void _ZN7S1812C33v16Ev();
extern void _ZN7S1812C33v17Ev();
extern void _ZN7S1812C33v18Ev();
extern void _ZN7S1812C33v19Ev();
extern void _ZN7S1812C33v20Ev();
extern void _ZN7S1812C33v21Ev();
extern void _ZN7S1812C33v22Ev();
extern void _ZN7S1812C33v23Ev();
extern void _ZN7S1812C33v24Ev();
extern void _ZN7S1812C33v25Ev();
extern void _ZN7S1812C33v26Ev();
extern void _ZN7S1812C33v27Ev();
extern void _ZN7S1812C33v28Ev();
extern void _ZN7S1812C33v29Ev();
extern void _ZN7S1812C33v30Ev();
extern void _ZN7S1812C33v31Ev();
extern void _ZN7S1812C33v32Ev();
extern void _ZN7S1812C33v33Ev();
extern void _ZN7S1812C33v34Ev();
extern void _ZN7S1812C33v35Ev();
extern void _ZN7S1812C33v36Ev();
extern void _ZN7S1812C33v37Ev();
extern void _ZN7S1812C33v38Ev();
extern void _ZN7S1812C33v39Ev();
extern void _ZN7S1812C33v40Ev();
extern void _ZN7S1812C33v41Ev();
extern void _ZN7S1812C33v42Ev();
extern void _ZN7S1812C33v43Ev();
extern void _ZN7S1812C33v44Ev();
extern void _ZN7S1812C33v45Ev();
extern void _ZN7S1812C33v46Ev();
extern void _ZN7S1812C33v47Ev();
extern void _ZN7S1812C33v48Ev();
extern void _ZN7S1812C33v49Ev();
extern void _ZN7S1812C33v50Ev();
extern void _ZN7S1812C33v51Ev();
extern void _ZN7S1812C33v52Ev();
extern void _ZN7S1812C33v53Ev();
extern void _ZN7S1812C33v54Ev();
extern void _ZN7S1812C33v55Ev();
extern void _ZN7S1812C33v56Ev();
extern void _ZN7S1812C33v57Ev();
extern void _ZN7S1812C33v58Ev();
extern void _ZN7S1812C33v59Ev();
extern void _ZN7S1812C33v60Ev();
extern void _ZN7S1812C33v61Ev();
extern void _ZN7S1812C33v62Ev();
extern void _ZN7S1812C33v63Ev();
extern void _ZN7S1812C33v64Ev();
extern void _ZN7S1812C33v65Ev();
extern void _ZN7S1812C33v66Ev();
extern void _ZN7S1812C33v67Ev();
extern void _ZN7S1812C33v68Ev();
extern void _ZN7S1812C33v69Ev();
extern void _ZN7S1812C33v70Ev();
extern void _ZN7S1812C33v71Ev();
extern void _ZN7S1812C33v72Ev();
extern void _ZN7S1812C33v73Ev();
extern void _ZN7S1812C33v74Ev();
extern void _ZN7S1812C33v75Ev();
extern void _ZN7S1812C33v76Ev();
extern void _ZN7S1812C33v77Ev();
extern void _ZN7S1812C33v78Ev();
extern void _ZN7S1812C33v79Ev();
extern void _ZN7S1812C33v80Ev();
extern void _ZN7S1812C33v81Ev();
extern void _ZN7S1812C33v82Ev();
extern void _ZN7S1812C33v83Ev();
extern void _ZN7S1812C33v84Ev();
extern void _ZN7S1812C33v85Ev();
extern void _ZN7S1812C33v86Ev();
extern void _ZN7S1812C33v87Ev();
extern void _ZN7S1812C33v88Ev();
extern void _ZN7S1812C33v89Ev();
extern void _ZN7S1812C33v90Ev();
extern void _ZN7S1812C33v91Ev();
extern void _ZN7S1812C33v92Ev();
extern void _ZN7S1812C33v93Ev();
extern void _ZN7S1812C33v94Ev();
extern void _ZN7S1812C33v95Ev();
extern void _ZN7S1812C33v96Ev();
extern void _ZN7S1812C33v97Ev();
extern void _ZN7S1812C33v98Ev();
extern void _ZN7S1812C33v99Ev();
extern void _ZN7S1812C34v100Ev();
extern void _ZN7S1812C34v101Ev();
extern void _ZN7S1812C34v102Ev();
extern void _ZN7S1812C34v103Ev();
extern void _ZN7S1812C34v104Ev();
extern void _ZN7S1812C34v105Ev();
extern void _ZN7S1812C34v106Ev();
extern void _ZN7S1812C34v107Ev();
extern void _ZN7S1812C34v108Ev();
extern void _ZN7S1812C34v109Ev();
extern void _ZN7S1812C34v110Ev();
extern void _ZN7S1812C34v111Ev();
extern void _ZN7S1812C12v1Ev();
extern void _ZN7S1812C12v2Ev();
extern void _ZN7S1812C12v3Ev();
extern void _ZN7S1812C12v4Ev();
static  VTBL_ENTRY vtc_S1812C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1812C1[0]),
  (VTBL_ENTRY)&_ZN7S1812C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1812C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1812C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1812C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1812C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1812C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1812C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v51Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v52Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v53Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v54Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v55Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v56Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v57Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v58Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v59Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v60Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v61Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v62Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v63Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v64Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v65Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v66Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v67Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v93Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v94Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v95Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v96Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v97Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v98Ev,
  (VTBL_ENTRY)&_ZN7S1812C33v99Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v100Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v101Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v102Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v103Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v104Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v105Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v106Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v107Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v108Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v109Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v110Ev,
  (VTBL_ENTRY)&_ZN7S1812C34v111Ev,
  (VTBL_ENTRY)&_ZN7S1812C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1812C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1812C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1812C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1812C1[];
extern  VTBL_ENTRY _ZTV7S1812C1[];
Class_Descriptor cd_S1812C1 = {  "S1812C1", // class name
  bases_S1812C1, 3,
  &(vtc_S1812C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1812C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1812C1),115, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2356C4  {
  ::S5166C19_nt s2356c4f0;
  int s2356c4f1[2];
  char s2356c4f2;
  virtual  ~S2356C4(); // _ZN7S2356C4D1Ev
  virtual void  v5(); // _ZN7S2356C42v5Ev
  virtual void  v6(); // _ZN7S2356C42v6Ev
  virtual void  v7(); // _ZN7S2356C42v7Ev
  S2356C4(); // tgen
};
//SIG(-1 S2356C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2356C4 ::~S2356C4(){ note_dtor("S2356C4", this);}
void  S2356C4 ::v5(){vfunc_called(this, "_ZN7S2356C42v5Ev");}
void  S2356C4 ::v6(){vfunc_called(this, "_ZN7S2356C42v6Ev");}
void  S2356C4 ::v7(){vfunc_called(this, "_ZN7S2356C42v7Ev");}
S2356C4 ::S2356C4(){ note_ctor("S2356C4", this);} // tgen

static void Test_S2356C4()
{
  extern Class_Descriptor cd_S2356C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2356C4, buf);
    S2356C4 *dp, &lv = *(dp=new (buf) S2356C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2356C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2356C4)");
    check_field_offset(lv, s2356c4f0, ABISELECT(8,4), "S2356C4.s2356c4f0");
    check_field_offset(lv, s2356c4f1, ABISELECT(24,16), "S2356C4.s2356c4f1");
    check_field_offset(lv, s2356c4f2, ABISELECT(32,24), "S2356C4.s2356c4f2");
    test_class_info(&lv, &cd_S2356C4);
    dp->~S2356C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2356C4(Test_S2356C4, "S2356C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2356C4C1Ev();
extern void _ZN7S2356C4D1Ev();
Name_Map name_map_S2356C4[] = {
  NSPAIR(_ZN7S2356C4C1Ev),
  NSPAIR(_ZN7S2356C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2356C4[];
extern void _ZN7S2356C4D1Ev();
extern void _ZN7S2356C4D0Ev();
extern void _ZN7S2356C42v5Ev();
extern void _ZN7S2356C42v6Ev();
extern void _ZN7S2356C42v7Ev();
static  VTBL_ENTRY vtc_S2356C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2356C4[0]),
  (VTBL_ENTRY)&_ZN7S2356C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2356C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2356C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2356C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2356C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S2356C4[];
extern  VTBL_ENTRY _ZTV7S2356C4[];
Class_Descriptor cd_S2356C4 = {  "S2356C4", // class name
  0,0,//no base classes
  &(vtc_S2356C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2356C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2356C4),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  S2356C7  {
  virtual  ~S2356C7(); // _ZN7S2356C7D1Ev
  virtual void  v8(); // _ZN7S2356C72v8Ev
  virtual void  v9(); // _ZN7S2356C72v9Ev
  virtual void  v10(); // _ZN7S2356C73v10Ev
  S2356C7(); // tgen
};
//SIG(-1 S2356C7) C1{ vd v1 v2 v3}


 S2356C7 ::~S2356C7(){ note_dtor("S2356C7", this);}
void  S2356C7 ::v8(){vfunc_called(this, "_ZN7S2356C72v8Ev");}
void  S2356C7 ::v9(){vfunc_called(this, "_ZN7S2356C72v9Ev");}
void  S2356C7 ::v10(){vfunc_called(this, "_ZN7S2356C73v10Ev");}
S2356C7 ::S2356C7(){ note_ctor("S2356C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2356C7C1Ev();
extern void _ZN7S2356C7D1Ev();
Name_Map name_map_S2356C7[] = {
  NSPAIR(_ZN7S2356C7C1Ev),
  NSPAIR(_ZN7S2356C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2356C7[];
extern void _ZN7S2356C7D1Ev();
extern void _ZN7S2356C7D0Ev();
extern void _ZN7S2356C72v8Ev();
extern void _ZN7S2356C72v9Ev();
extern void _ZN7S2356C73v10Ev();
static  VTBL_ENTRY vtc_S2356C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2356C7[0]),
  (VTBL_ENTRY)&_ZN7S2356C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2356C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2356C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2356C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2356C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2356C7[];
extern  VTBL_ENTRY _ZTV7S2356C7[];
Class_Descriptor cd_S2356C7 = {  "S2356C7", // class name
  0,0,//no base classes
  &(vtc_S2356C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2356C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2356C7),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  S2356C3  : S2356C4 , S2356C7 {
  void *s2356c3f0;
  char s2356c3f1;
  int s2356c3f2;
  virtual  ~S2356C3(); // _ZN7S2356C3D1Ev
  virtual void  v11(); // _ZN7S2356C33v11Ev
  virtual void  v12(); // _ZN7S2356C33v12Ev
  virtual void  v13(); // _ZN7S2356C33v13Ev
  virtual void  v14(); // _ZN7S2356C33v14Ev
  virtual void  v15(); // _ZN7S2356C33v15Ev
  virtual void  v16(); // _ZN7S2356C33v16Ev
  virtual void  v17(); // _ZN7S2356C33v17Ev
  virtual void  v18(); // _ZN7S2356C33v18Ev
  virtual void  v19(); // _ZN7S2356C33v19Ev
  virtual void  v20(); // _ZN7S2356C33v20Ev
  S2356C3(); // tgen
};
//SIG(-1 S2356C3) C1{ BC2{ vd v11 v12 v13 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fc Fi}


 S2356C3 ::~S2356C3(){ note_dtor("S2356C3", this);}
void  S2356C3 ::v11(){vfunc_called(this, "_ZN7S2356C33v11Ev");}
void  S2356C3 ::v12(){vfunc_called(this, "_ZN7S2356C33v12Ev");}
void  S2356C3 ::v13(){vfunc_called(this, "_ZN7S2356C33v13Ev");}
void  S2356C3 ::v14(){vfunc_called(this, "_ZN7S2356C33v14Ev");}
void  S2356C3 ::v15(){vfunc_called(this, "_ZN7S2356C33v15Ev");}
void  S2356C3 ::v16(){vfunc_called(this, "_ZN7S2356C33v16Ev");}
void  S2356C3 ::v17(){vfunc_called(this, "_ZN7S2356C33v17Ev");}
void  S2356C3 ::v18(){vfunc_called(this, "_ZN7S2356C33v18Ev");}
void  S2356C3 ::v19(){vfunc_called(this, "_ZN7S2356C33v19Ev");}
void  S2356C3 ::v20(){vfunc_called(this, "_ZN7S2356C33v20Ev");}
S2356C3 ::S2356C3(){ note_ctor("S2356C3", this);} // tgen

static void Test_S2356C3()
{
  extern Class_Descriptor cd_S2356C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S2356C3, buf);
    S2356C3 *dp, &lv = *(dp=new (buf) S2356C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S2356C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2356C3)");
    check_base_class_offset(lv, (S2356C4*), 0, "S2356C3");
    check_base_class_offset(lv, (S2356C7*), ABISELECT(40,28), "S2356C3");
    check_field_offset(lv, s2356c3f0, ABISELECT(48,32), "S2356C3.s2356c3f0");
    check_field_offset(lv, s2356c3f1, ABISELECT(56,36), "S2356C3.s2356c3f1");
    check_field_offset(lv, s2356c3f2, ABISELECT(60,40), "S2356C3.s2356c3f2");
    test_class_info(&lv, &cd_S2356C3);
    dp->~S2356C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2356C3(Test_S2356C3, "S2356C3", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S2356C3C1Ev();
extern void _ZN7S2356C3D1Ev();
Name_Map name_map_S2356C3[] = {
  NSPAIR(_ZN7S2356C3C1Ev),
  NSPAIR(_ZN7S2356C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2356C4;
extern VTBL_ENTRY _ZTI7S2356C4[];
extern  VTBL_ENTRY _ZTV7S2356C4[];
extern Class_Descriptor cd_S2356C7;
extern VTBL_ENTRY _ZTI7S2356C7[];
extern  VTBL_ENTRY _ZTV7S2356C7[];
static Base_Class bases_S2356C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2356C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2356C7,    ABISELECT(40,28), //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2356C3[];
extern void _ZN7S2356C3D1Ev();
extern void _ZN7S2356C3D0Ev();
extern void _ZN7S2356C42v5Ev();
extern void _ZN7S2356C42v6Ev();
extern void _ZN7S2356C42v7Ev();
extern void _ZN7S2356C33v11Ev();
extern void _ZN7S2356C33v12Ev();
extern void _ZN7S2356C33v13Ev();
extern void _ZN7S2356C33v14Ev();
extern void _ZN7S2356C33v15Ev();
extern void _ZN7S2356C33v16Ev();
extern void _ZN7S2356C33v17Ev();
extern void _ZN7S2356C33v18Ev();
extern void _ZN7S2356C33v19Ev();
extern void _ZN7S2356C33v20Ev();
extern void ABISELECT(_ZThn40_N7S2356C3D1Ev,_ZThn28_N7S2356C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2356C3D0Ev,_ZThn28_N7S2356C3D0Ev)();
extern void _ZN7S2356C72v8Ev();
extern void _ZN7S2356C72v9Ev();
extern void _ZN7S2356C73v10Ev();
static  VTBL_ENTRY vtc_S2356C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2356C3[0]),
  (VTBL_ENTRY)&_ZN7S2356C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2356C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2356C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2356C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2356C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v20Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2356C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2356C3D1Ev,_ZThn28_N7S2356C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2356C3D0Ev,_ZThn28_N7S2356C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2356C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2356C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2356C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2356C3[];
extern  VTBL_ENTRY _ZTV7S2356C3[];
Class_Descriptor cd_S2356C3 = {  "S2356C3", // class name
  bases_S2356C3, 2,
  &(vtc_S2356C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S2356C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2356C3),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  S2356C10  {
  virtual  ~S2356C10(); // _ZN8S2356C10D1Ev
  virtual void  v21(); // _ZN8S2356C103v21Ev
  virtual void  v22(); // _ZN8S2356C103v22Ev
  virtual void  v23(); // _ZN8S2356C103v23Ev
  S2356C10(); // tgen
};
//SIG(-1 S2356C10) C1{ vd v1 v2 v3}


 S2356C10 ::~S2356C10(){ note_dtor("S2356C10", this);}
void  S2356C10 ::v21(){vfunc_called(this, "_ZN8S2356C103v21Ev");}
void  S2356C10 ::v22(){vfunc_called(this, "_ZN8S2356C103v22Ev");}
void  S2356C10 ::v23(){vfunc_called(this, "_ZN8S2356C103v23Ev");}
S2356C10 ::S2356C10(){ note_ctor("S2356C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2356C10C1Ev();
extern void _ZN8S2356C10D1Ev();
Name_Map name_map_S2356C10[] = {
  NSPAIR(_ZN8S2356C10C1Ev),
  NSPAIR(_ZN8S2356C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2356C10[];
extern void _ZN8S2356C10D1Ev();
extern void _ZN8S2356C10D0Ev();
extern void _ZN8S2356C103v21Ev();
extern void _ZN8S2356C103v22Ev();
extern void _ZN8S2356C103v23Ev();
static  VTBL_ENTRY vtc_S2356C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2356C10[0]),
  (VTBL_ENTRY)&_ZN8S2356C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2356C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2356C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2356C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2356C103v23Ev,
};
extern VTBL_ENTRY _ZTI8S2356C10[];
extern  VTBL_ENTRY _ZTV8S2356C10[];
Class_Descriptor cd_S2356C10 = {  "S2356C10", // class name
  0,0,//no base classes
  &(vtc_S2356C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2356C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2356C10),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  S2356C9  : S2356C10 {
  ::S5166C36 s2356c9f0;
  ::S2355C13_nt s2356c9f1;
  char s2356c9f2;
  virtual  ~S2356C9(); // _ZN7S2356C9D1Ev
  virtual void  v24(); // _ZN7S2356C93v24Ev
  virtual void  v25(); // _ZN7S2356C93v25Ev
  virtual void  v26(); // _ZN7S2356C93v26Ev
  S2356C9(); // tgen
};
//SIG(-1 S2356C9) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2356C9 ::~S2356C9(){ note_dtor("S2356C9", this);}
void  S2356C9 ::v24(){vfunc_called(this, "_ZN7S2356C93v24Ev");}
void  S2356C9 ::v25(){vfunc_called(this, "_ZN7S2356C93v25Ev");}
void  S2356C9 ::v26(){vfunc_called(this, "_ZN7S2356C93v26Ev");}
S2356C9 ::S2356C9(){ note_ctor("S2356C9", this);} // tgen

static void Test_S2356C9()
{
  extern Class_Descriptor cd_S2356C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2356C9, buf);
    S2356C9 *dp, &lv = *(dp=new (buf) S2356C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2356C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2356C9)");
    check_base_class_offset(lv, (S2356C10*), 0, "S2356C9");
    check_field_offset(lv, s2356c9f0, ABISELECT(8,4), "S2356C9.s2356c9f0");
    check_field_offset(lv, s2356c9f1, ABISELECT(32,20), "S2356C9.s2356c9f1");
    check_field_offset(lv, s2356c9f2, ABISELECT(64,52), "S2356C9.s2356c9f2");
    test_class_info(&lv, &cd_S2356C9);
    dp->~S2356C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2356C9(Test_S2356C9, "S2356C9", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2356C9C1Ev();
extern void _ZN7S2356C9D1Ev();
Name_Map name_map_S2356C9[] = {
  NSPAIR(_ZN7S2356C9C1Ev),
  NSPAIR(_ZN7S2356C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2356C10;
extern VTBL_ENTRY _ZTI8S2356C10[];
extern  VTBL_ENTRY _ZTV8S2356C10[];
static Base_Class bases_S2356C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2356C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2356C9[];
extern void _ZN7S2356C9D1Ev();
extern void _ZN7S2356C9D0Ev();
extern void _ZN8S2356C103v21Ev();
extern void _ZN8S2356C103v22Ev();
extern void _ZN8S2356C103v23Ev();
extern void _ZN7S2356C93v24Ev();
extern void _ZN7S2356C93v25Ev();
extern void _ZN7S2356C93v26Ev();
static  VTBL_ENTRY vtc_S2356C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2356C9[0]),
  (VTBL_ENTRY)&_ZN7S2356C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2356C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2356C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2356C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2356C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2356C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2356C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2356C93v26Ev,
};
extern VTBL_ENTRY _ZTI7S2356C9[];
extern  VTBL_ENTRY _ZTV7S2356C9[];
Class_Descriptor cd_S2356C9 = {  "S2356C9", // class name
  bases_S2356C9, 1,
  &(vtc_S2356C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2356C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2356C9),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  S2356C8  : S2356C9 {
  virtual  ~S2356C8(); // _ZN7S2356C8D1Ev
  virtual void  v27(); // _ZN7S2356C83v27Ev
  virtual void  v28(); // _ZN7S2356C83v28Ev
  virtual void  v29(); // _ZN7S2356C83v29Ev
  virtual void  v30(); // _ZN7S2356C83v30Ev
  S2356C8(); // tgen
};
//SIG(-1 S2356C8) C1{ BC2{ BC3{ vd v5 v6 v7} vd v8 v9 v10 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4}


 S2356C8 ::~S2356C8(){ note_dtor("S2356C8", this);}
void  S2356C8 ::v27(){vfunc_called(this, "_ZN7S2356C83v27Ev");}
void  S2356C8 ::v28(){vfunc_called(this, "_ZN7S2356C83v28Ev");}
void  S2356C8 ::v29(){vfunc_called(this, "_ZN7S2356C83v29Ev");}
void  S2356C8 ::v30(){vfunc_called(this, "_ZN7S2356C83v30Ev");}
S2356C8 ::S2356C8(){ note_ctor("S2356C8", this);} // tgen

static void Test_S2356C8()
{
  extern Class_Descriptor cd_S2356C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2356C8, buf);
    S2356C8 *dp, &lv = *(dp=new (buf) S2356C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2356C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2356C8)");
    check_base_class_offset(lv, (S2356C10*)(S2356C9*), 0, "S2356C8");
    check_base_class_offset(lv, (S2356C9*), 0, "S2356C8");
    test_class_info(&lv, &cd_S2356C8);
    dp->~S2356C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2356C8(Test_S2356C8, "S2356C8", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2356C8C1Ev();
extern void _ZN7S2356C8D1Ev();
Name_Map name_map_S2356C8[] = {
  NSPAIR(_ZN7S2356C8C1Ev),
  NSPAIR(_ZN7S2356C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2356C10;
extern VTBL_ENTRY _ZTI8S2356C10[];
extern  VTBL_ENTRY _ZTV8S2356C10[];
extern Class_Descriptor cd_S2356C9;
extern VTBL_ENTRY _ZTI7S2356C9[];
extern  VTBL_ENTRY _ZTV7S2356C9[];
static Base_Class bases_S2356C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2356C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2356C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2356C8[];
extern void _ZN7S2356C8D1Ev();
extern void _ZN7S2356C8D0Ev();
extern void _ZN8S2356C103v21Ev();
extern void _ZN8S2356C103v22Ev();
extern void _ZN8S2356C103v23Ev();
extern void _ZN7S2356C93v24Ev();
extern void _ZN7S2356C93v25Ev();
extern void _ZN7S2356C93v26Ev();
extern void _ZN7S2356C83v27Ev();
extern void _ZN7S2356C83v28Ev();
extern void _ZN7S2356C83v29Ev();
extern void _ZN7S2356C83v30Ev();
static  VTBL_ENTRY vtc_S2356C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2356C8[0]),
  (VTBL_ENTRY)&_ZN7S2356C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2356C8D0Ev,
  (VTBL_ENTRY)&_ZN8S2356C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2356C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2356C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2356C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2356C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2356C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2356C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2356C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2356C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2356C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2356C8[];
extern  VTBL_ENTRY _ZTV7S2356C8[];
Class_Descriptor cd_S2356C8 = {  "S2356C8", // class name
  bases_S2356C8, 2,
  &(vtc_S2356C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2356C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2356C8),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2356C2  : S2356C3 , S2356C8 {
  int s2356c2f0[3];
  char s2356c2f1;
  ::S5166C24 s2356c2f2;
  virtual  ~S2356C2(); // _ZN7S2356C2D1Ev
  virtual void  v31(); // _ZN7S2356C23v31Ev
  virtual void  v32(); // _ZN7S2356C23v32Ev
  virtual void  v33(); // _ZN7S2356C23v33Ev
  virtual void  v34(); // _ZN7S2356C23v34Ev
  virtual void  v35(); // _ZN7S2356C23v35Ev
  virtual void  v36(); // _ZN7S2356C23v36Ev
  S2356C2(); // tgen
};
//SIG(-1 S2356C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd v10 v11 v12} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp Fc Fi} BC7{ BC8{ BC9{ vd v23 v24 v25} vd v26 v27 v28 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m FL[4]} Fc} vd v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 Fi[3] Fc FC13{ BC14{ m Fp Fi FC15{ m} FC16{ m}}}}


 S2356C2 ::~S2356C2(){ note_dtor("S2356C2", this);}
void  S2356C2 ::v31(){vfunc_called(this, "_ZN7S2356C23v31Ev");}
void  S2356C2 ::v32(){vfunc_called(this, "_ZN7S2356C23v32Ev");}
void  S2356C2 ::v33(){vfunc_called(this, "_ZN7S2356C23v33Ev");}
void  S2356C2 ::v34(){vfunc_called(this, "_ZN7S2356C23v34Ev");}
void  S2356C2 ::v35(){vfunc_called(this, "_ZN7S2356C23v35Ev");}
void  S2356C2 ::v36(){vfunc_called(this, "_ZN7S2356C23v36Ev");}
S2356C2 ::S2356C2(){ note_ctor("S2356C2", this);} // tgen

static void Test_S2356C2()
{
  extern Class_Descriptor cd_S2356C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,33)];
    init_test(&cd_S2356C2, buf);
    S2356C2 *dp, &lv = *(dp=new (buf) S2356C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,128), "sizeof(S2356C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2356C2)");
    check_base_class_offset(lv, (S2356C4*)(S2356C3*), 0, "S2356C2");
    check_base_class_offset(lv, (S2356C7*)(S2356C3*), ABISELECT(40,28), "S2356C2");
    check_base_class_offset(lv, (S2356C3*), 0, "S2356C2");
    check_base_class_offset(lv, (S2356C10*)(S2356C9*)(S2356C8*), ABISELECT(64,44), "S2356C2");
    check_base_class_offset(lv, (S2356C9*)(S2356C8*), ABISELECT(64,44), "S2356C2");
    check_base_class_offset(lv, (S2356C8*), ABISELECT(64,44), "S2356C2");
    check_field_offset(lv, s2356c2f0, ABISELECT(132,100), "S2356C2.s2356c2f0");
    check_field_offset(lv, s2356c2f1, ABISELECT(144,112), "S2356C2.s2356c2f1");
    check_field_offset(lv, s2356c2f2, ABISELECT(152,116), "S2356C2.s2356c2f2");
    test_class_info(&lv, &cd_S2356C2);
    dp->~S2356C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2356C2(Test_S2356C2, "S2356C2", ABISELECT(168,128));

#else // __cplusplus

extern void _ZN7S2356C2C1Ev();
extern void _ZN7S2356C2D1Ev();
Name_Map name_map_S2356C2[] = {
  NSPAIR(_ZN7S2356C2C1Ev),
  NSPAIR(_ZN7S2356C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2356C4;
extern VTBL_ENTRY _ZTI7S2356C4[];
extern  VTBL_ENTRY _ZTV7S2356C4[];
extern Class_Descriptor cd_S2356C7;
extern VTBL_ENTRY _ZTI7S2356C7[];
extern  VTBL_ENTRY _ZTV7S2356C7[];
extern Class_Descriptor cd_S2356C3;
extern VTBL_ENTRY _ZTI7S2356C3[];
extern  VTBL_ENTRY _ZTV7S2356C3[];
extern Class_Descriptor cd_S2356C10;
extern VTBL_ENTRY _ZTI8S2356C10[];
extern  VTBL_ENTRY _ZTV8S2356C10[];
extern Class_Descriptor cd_S2356C9;
extern VTBL_ENTRY _ZTI7S2356C9[];
extern  VTBL_ENTRY _ZTV7S2356C9[];
extern Class_Descriptor cd_S2356C8;
extern VTBL_ENTRY _ZTI7S2356C8[];
extern  VTBL_ENTRY _ZTV7S2356C8[];
static Base_Class bases_S2356C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2356C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2356C7,    ABISELECT(40,28), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2356C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2356C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2356C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2356C8,    ABISELECT(64,44), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2356C2[];
extern void _ZN7S2356C2D1Ev();
extern void _ZN7S2356C2D0Ev();
extern void _ZN7S2356C42v5Ev();
extern void _ZN7S2356C42v6Ev();
extern void _ZN7S2356C42v7Ev();
extern void _ZN7S2356C33v11Ev();
extern void _ZN7S2356C33v12Ev();
extern void _ZN7S2356C33v13Ev();
extern void _ZN7S2356C33v14Ev();
extern void _ZN7S2356C33v15Ev();
extern void _ZN7S2356C33v16Ev();
extern void _ZN7S2356C33v17Ev();
extern void _ZN7S2356C33v18Ev();
extern void _ZN7S2356C33v19Ev();
extern void _ZN7S2356C33v20Ev();
extern void _ZN7S2356C23v31Ev();
extern void _ZN7S2356C23v32Ev();
extern void _ZN7S2356C23v33Ev();
extern void _ZN7S2356C23v34Ev();
extern void _ZN7S2356C23v35Ev();
extern void _ZN7S2356C23v36Ev();
extern void ABISELECT(_ZThn40_N7S2356C2D1Ev,_ZThn28_N7S2356C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2356C2D0Ev,_ZThn28_N7S2356C2D0Ev)();
extern void _ZN7S2356C72v8Ev();
extern void _ZN7S2356C72v9Ev();
extern void _ZN7S2356C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2356C2D1Ev,_ZThn44_N7S2356C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S2356C2D0Ev,_ZThn44_N7S2356C2D0Ev)();
extern void _ZN8S2356C103v21Ev();
extern void _ZN8S2356C103v22Ev();
extern void _ZN8S2356C103v23Ev();
extern void _ZN7S2356C93v24Ev();
extern void _ZN7S2356C93v25Ev();
extern void _ZN7S2356C93v26Ev();
extern void _ZN7S2356C83v27Ev();
extern void _ZN7S2356C83v28Ev();
extern void _ZN7S2356C83v29Ev();
extern void _ZN7S2356C83v30Ev();
static  VTBL_ENTRY vtc_S2356C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2356C2[0]),
  (VTBL_ENTRY)&_ZN7S2356C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2356C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2356C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2356C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2356C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2356C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2356C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2356C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2356C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2356C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2356C23v36Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2356C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2356C2D1Ev,_ZThn28_N7S2356C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2356C2D0Ev,_ZThn28_N7S2356C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2356C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2356C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2356C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2356C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2356C2D1Ev,_ZThn44_N7S2356C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2356C2D0Ev,_ZThn44_N7S2356C2D0Ev),
  (VTBL_ENTRY)&_ZN8S2356C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2356C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2356C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2356C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2356C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2356C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2356C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2356C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2356C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2356C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2356C2[];
extern  VTBL_ENTRY _ZTV7S2356C2[];
Class_Descriptor cd_S2356C2 = {  "S2356C2", // class name
  bases_S2356C2, 6,
  &(vtc_S2356C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,128), // object size
  NSPAIRA(_ZTI7S2356C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2356C2),44, //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  S2356C1  : S2356C2 {
  ::S2355C18_nt s2356c1f0;
  ::S2355C19_nt s2356c1f1;
  int s2356c1f2[4];
  ::S2355C25_nt s2356c1f3;
  void *s2356c1f4;
  virtual  ~S2356C1(); // _ZN7S2356C1D1Ev
  virtual void  v1(); // _ZN7S2356C12v1Ev
  virtual void  v2(); // _ZN7S2356C12v2Ev
  virtual void  v3(); // _ZN7S2356C12v3Ev
  virtual void  v4(); // _ZN7S2356C12v4Ev
  S2356C1(); // tgen
};
//SIG(1 S2356C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd v8 v9 v10} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp Fc Fi} BC8{ BC9{ BC10{ vd v21 v22 v23} vd v24 v25 v26 FC11{ m Fp Fi[2] FC12{ m}} FC13{ m FL[4]} Fc} vd v27 v28 v29 v30} vd v31 v32 v33 v34 v35 v36 Fi[3] Fc FC14{ BC15{ m Fp Fi FC16{ m} FC17{ m}}}} vd v1 v2 v3 v4 FC18{ vd v37 v38 v39 v40 Fp} FC19{ BC20{ vd v42 FC21{ m FC15} Fp[3] Fc} v41 Fp} Fi[4] FC22{ Fi[2] FC23{ Fi[2]}[10] FC24{ Fi[3] Fc[256]}[10]} Fp}


 S2356C1 ::~S2356C1(){ note_dtor("S2356C1", this);}
void  S2356C1 ::v1(){vfunc_called(this, "_ZN7S2356C12v1Ev");}
void  S2356C1 ::v2(){vfunc_called(this, "_ZN7S2356C12v2Ev");}
void  S2356C1 ::v3(){vfunc_called(this, "_ZN7S2356C12v3Ev");}
void  S2356C1 ::v4(){vfunc_called(this, "_ZN7S2356C12v4Ev");}
S2356C1 ::S2356C1(){ note_ctor("S2356C1", this);} // tgen

static void Test_S2356C1()
{
  extern Class_Descriptor cd_S2356C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(381,741)];
    init_test(&cd_S2356C1, buf);
    S2356C1 *dp, &lv = *(dp=new (buf) S2356C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3040,2960), "sizeof(S2356C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2356C1)");
    check_base_class_offset(lv, (S2356C4*)(S2356C3*)(S2356C2*), 0, "S2356C1");
    check_base_class_offset(lv, (S2356C7*)(S2356C3*)(S2356C2*), ABISELECT(40,28), "S2356C1");
    check_base_class_offset(lv, (S2356C3*)(S2356C2*), 0, "S2356C1");
    check_base_class_offset(lv, (S2356C10*)(S2356C9*)(S2356C8*)(S2356C2*), ABISELECT(64,44), "S2356C1");
    check_base_class_offset(lv, (S2356C9*)(S2356C8*)(S2356C2*), ABISELECT(64,44), "S2356C1");
    check_base_class_offset(lv, (S2356C8*)(S2356C2*), ABISELECT(64,44), "S2356C1");
    check_base_class_offset(lv, (S2356C2*), 0, "S2356C1");
    check_field_offset(lv, s2356c1f0, ABISELECT(168,128), "S2356C1.s2356c1f0");
    check_field_offset(lv, s2356c1f1, ABISELECT(184,136), "S2356C1.s2356c1f1");
    check_field_offset(lv, s2356c1f2, ABISELECT(248,172), "S2356C1.s2356c1f2");
    check_field_offset(lv, s2356c1f3, ABISELECT(264,188), "S2356C1.s2356c1f3");
    check_field_offset(lv, s2356c1f4, ABISELECT(3032,2956), "S2356C1.s2356c1f4");
    test_class_info(&lv, &cd_S2356C1);
    dp->~S2356C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2356C1(Test_S2356C1, "S2356C1", ABISELECT(3040,2960));

#else // __cplusplus

extern void _ZN7S2356C1C1Ev();
extern void _ZN7S2356C1D1Ev();
Name_Map name_map_S2356C1[] = {
  NSPAIR(_ZN7S2356C1C1Ev),
  NSPAIR(_ZN7S2356C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2356C4;
extern VTBL_ENTRY _ZTI7S2356C4[];
extern  VTBL_ENTRY _ZTV7S2356C4[];
extern Class_Descriptor cd_S2356C7;
extern VTBL_ENTRY _ZTI7S2356C7[];
extern  VTBL_ENTRY _ZTV7S2356C7[];
extern Class_Descriptor cd_S2356C3;
extern VTBL_ENTRY _ZTI7S2356C3[];
extern  VTBL_ENTRY _ZTV7S2356C3[];
extern Class_Descriptor cd_S2356C10;
extern VTBL_ENTRY _ZTI8S2356C10[];
extern  VTBL_ENTRY _ZTV8S2356C10[];
extern Class_Descriptor cd_S2356C9;
extern VTBL_ENTRY _ZTI7S2356C9[];
extern  VTBL_ENTRY _ZTV7S2356C9[];
extern Class_Descriptor cd_S2356C8;
extern VTBL_ENTRY _ZTI7S2356C8[];
extern  VTBL_ENTRY _ZTV7S2356C8[];
extern Class_Descriptor cd_S2356C2;
extern VTBL_ENTRY _ZTI7S2356C2[];
extern  VTBL_ENTRY _ZTV7S2356C2[];
static Base_Class bases_S2356C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2356C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2356C7,    ABISELECT(40,28), //bcp->offset
    27, //bcp->virtual_function_table_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_S2356C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2356C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2356C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2356C8,    ABISELECT(64,44), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2356C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2356C1[];
extern void _ZN7S2356C1D1Ev();
extern void _ZN7S2356C1D0Ev();
extern void _ZN7S2356C42v5Ev();
extern void _ZN7S2356C42v6Ev();
extern void _ZN7S2356C42v7Ev();
extern void _ZN7S2356C33v11Ev();
extern void _ZN7S2356C33v12Ev();
extern void _ZN7S2356C33v13Ev();
extern void _ZN7S2356C33v14Ev();
extern void _ZN7S2356C33v15Ev();
extern void _ZN7S2356C33v16Ev();
extern void _ZN7S2356C33v17Ev();
extern void _ZN7S2356C33v18Ev();
extern void _ZN7S2356C33v19Ev();
extern void _ZN7S2356C33v20Ev();
extern void _ZN7S2356C23v31Ev();
extern void _ZN7S2356C23v32Ev();
extern void _ZN7S2356C23v33Ev();
extern void _ZN7S2356C23v34Ev();
extern void _ZN7S2356C23v35Ev();
extern void _ZN7S2356C23v36Ev();
extern void _ZN7S2356C12v1Ev();
extern void _ZN7S2356C12v2Ev();
extern void _ZN7S2356C12v3Ev();
extern void _ZN7S2356C12v4Ev();
extern void ABISELECT(_ZThn40_N7S2356C1D1Ev,_ZThn28_N7S2356C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2356C1D0Ev,_ZThn28_N7S2356C1D0Ev)();
extern void _ZN7S2356C72v8Ev();
extern void _ZN7S2356C72v9Ev();
extern void _ZN7S2356C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2356C1D1Ev,_ZThn44_N7S2356C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S2356C1D0Ev,_ZThn44_N7S2356C1D0Ev)();
extern void _ZN8S2356C103v21Ev();
extern void _ZN8S2356C103v22Ev();
extern void _ZN8S2356C103v23Ev();
extern void _ZN7S2356C93v24Ev();
extern void _ZN7S2356C93v25Ev();
extern void _ZN7S2356C93v26Ev();
extern void _ZN7S2356C83v27Ev();
extern void _ZN7S2356C83v28Ev();
extern void _ZN7S2356C83v29Ev();
extern void _ZN7S2356C83v30Ev();
static  VTBL_ENTRY vtc_S2356C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2356C1[0]),
  (VTBL_ENTRY)&_ZN7S2356C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2356C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2356C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2356C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2356C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2356C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2356C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2356C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2356C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2356C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2356C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2356C23v36Ev,
  (VTBL_ENTRY)&_ZN7S2356C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2356C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2356C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2356C12v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2356C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2356C1D1Ev,_ZThn28_N7S2356C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2356C1D0Ev,_ZThn28_N7S2356C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2356C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2356C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2356C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2356C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2356C1D1Ev,_ZThn44_N7S2356C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2356C1D0Ev,_ZThn44_N7S2356C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2356C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2356C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2356C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2356C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2356C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2356C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2356C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2356C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2356C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2356C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2356C1[];
extern  VTBL_ENTRY _ZTV7S2356C1[];
Class_Descriptor cd_S2356C1 = {  "S2356C1", // class name
  bases_S2356C1, 7,
  &(vtc_S2356C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3040,2960), // object size
  NSPAIRA(_ZTI7S2356C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2356C1),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2365C4  {
  ::S5166C19_nt s2365c4f0;
  int s2365c4f1[2];
  char s2365c4f2;
  virtual  ~S2365C4(); // _ZN7S2365C4D1Ev
  virtual void  v5(); // _ZN7S2365C42v5Ev
  virtual void  v6(); // _ZN7S2365C42v6Ev
  virtual void  v7(); // _ZN7S2365C42v7Ev
  S2365C4(); // tgen
};
//SIG(-1 S2365C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2365C4 ::~S2365C4(){ note_dtor("S2365C4", this);}
void  S2365C4 ::v5(){vfunc_called(this, "_ZN7S2365C42v5Ev");}
void  S2365C4 ::v6(){vfunc_called(this, "_ZN7S2365C42v6Ev");}
void  S2365C4 ::v7(){vfunc_called(this, "_ZN7S2365C42v7Ev");}
S2365C4 ::S2365C4(){ note_ctor("S2365C4", this);} // tgen

static void Test_S2365C4()
{
  extern Class_Descriptor cd_S2365C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2365C4, buf);
    S2365C4 *dp, &lv = *(dp=new (buf) S2365C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2365C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2365C4)");
    check_field_offset(lv, s2365c4f0, ABISELECT(8,4), "S2365C4.s2365c4f0");
    check_field_offset(lv, s2365c4f1, ABISELECT(24,16), "S2365C4.s2365c4f1");
    check_field_offset(lv, s2365c4f2, ABISELECT(32,24), "S2365C4.s2365c4f2");
    test_class_info(&lv, &cd_S2365C4);
    dp->~S2365C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2365C4(Test_S2365C4, "S2365C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2365C4C1Ev();
extern void _ZN7S2365C4D1Ev();
Name_Map name_map_S2365C4[] = {
  NSPAIR(_ZN7S2365C4C1Ev),
  NSPAIR(_ZN7S2365C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2365C4[];
extern void _ZN7S2365C4D1Ev();
extern void _ZN7S2365C4D0Ev();
extern void _ZN7S2365C42v5Ev();
extern void _ZN7S2365C42v6Ev();
extern void _ZN7S2365C42v7Ev();
static  VTBL_ENTRY vtc_S2365C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2365C4[0]),
  (VTBL_ENTRY)&_ZN7S2365C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2365C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2365C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2365C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2365C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S2365C4[];
extern  VTBL_ENTRY _ZTV7S2365C4[];
Class_Descriptor cd_S2365C4 = {  "S2365C4", // class name
  0,0,//no base classes
  &(vtc_S2365C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2365C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2365C4),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  S2365C7  {
  virtual  ~S2365C7(); // _ZN7S2365C7D1Ev
  virtual void  v8(); // _ZN7S2365C72v8Ev
  virtual void  v9(); // _ZN7S2365C72v9Ev
  virtual void  v10(); // _ZN7S2365C73v10Ev
  S2365C7(); // tgen
};
//SIG(-1 S2365C7) C1{ vd v1 v2 v3}


 S2365C7 ::~S2365C7(){ note_dtor("S2365C7", this);}
void  S2365C7 ::v8(){vfunc_called(this, "_ZN7S2365C72v8Ev");}
void  S2365C7 ::v9(){vfunc_called(this, "_ZN7S2365C72v9Ev");}
void  S2365C7 ::v10(){vfunc_called(this, "_ZN7S2365C73v10Ev");}
S2365C7 ::S2365C7(){ note_ctor("S2365C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2365C7C1Ev();
extern void _ZN7S2365C7D1Ev();
Name_Map name_map_S2365C7[] = {
  NSPAIR(_ZN7S2365C7C1Ev),
  NSPAIR(_ZN7S2365C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2365C7[];
extern void _ZN7S2365C7D1Ev();
extern void _ZN7S2365C7D0Ev();
extern void _ZN7S2365C72v8Ev();
extern void _ZN7S2365C72v9Ev();
extern void _ZN7S2365C73v10Ev();
static  VTBL_ENTRY vtc_S2365C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2365C7[0]),
  (VTBL_ENTRY)&_ZN7S2365C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2365C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2365C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2365C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2365C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2365C7[];
extern  VTBL_ENTRY _ZTV7S2365C7[];
Class_Descriptor cd_S2365C7 = {  "S2365C7", // class name
  0,0,//no base classes
  &(vtc_S2365C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2365C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2365C7),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  S2365C3  : S2365C4 , S2365C7 {
  void *s2365c3f0;
  char s2365c3f1;
  int s2365c3f2;
  virtual  ~S2365C3(); // _ZN7S2365C3D1Ev
  virtual void  v11(); // _ZN7S2365C33v11Ev
  virtual void  v12(); // _ZN7S2365C33v12Ev
  virtual void  v13(); // _ZN7S2365C33v13Ev
  virtual void  v14(); // _ZN7S2365C33v14Ev
  virtual void  v15(); // _ZN7S2365C33v15Ev
  virtual void  v16(); // _ZN7S2365C33v16Ev
  virtual void  v17(); // _ZN7S2365C33v17Ev
  virtual void  v18(); // _ZN7S2365C33v18Ev
  virtual void  v19(); // _ZN7S2365C33v19Ev
  virtual void  v20(); // _ZN7S2365C33v20Ev
  S2365C3(); // tgen
};
//SIG(-1 S2365C3) C1{ BC2{ vd v11 v12 v13 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fc Fi}


 S2365C3 ::~S2365C3(){ note_dtor("S2365C3", this);}
void  S2365C3 ::v11(){vfunc_called(this, "_ZN7S2365C33v11Ev");}
void  S2365C3 ::v12(){vfunc_called(this, "_ZN7S2365C33v12Ev");}
void  S2365C3 ::v13(){vfunc_called(this, "_ZN7S2365C33v13Ev");}
void  S2365C3 ::v14(){vfunc_called(this, "_ZN7S2365C33v14Ev");}
void  S2365C3 ::v15(){vfunc_called(this, "_ZN7S2365C33v15Ev");}
void  S2365C3 ::v16(){vfunc_called(this, "_ZN7S2365C33v16Ev");}
void  S2365C3 ::v17(){vfunc_called(this, "_ZN7S2365C33v17Ev");}
void  S2365C3 ::v18(){vfunc_called(this, "_ZN7S2365C33v18Ev");}
void  S2365C3 ::v19(){vfunc_called(this, "_ZN7S2365C33v19Ev");}
void  S2365C3 ::v20(){vfunc_called(this, "_ZN7S2365C33v20Ev");}
S2365C3 ::S2365C3(){ note_ctor("S2365C3", this);} // tgen

static void Test_S2365C3()
{
  extern Class_Descriptor cd_S2365C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S2365C3, buf);
    S2365C3 *dp, &lv = *(dp=new (buf) S2365C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S2365C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2365C3)");
    check_base_class_offset(lv, (S2365C4*), 0, "S2365C3");
    check_base_class_offset(lv, (S2365C7*), ABISELECT(40,28), "S2365C3");
    check_field_offset(lv, s2365c3f0, ABISELECT(48,32), "S2365C3.s2365c3f0");
    check_field_offset(lv, s2365c3f1, ABISELECT(56,36), "S2365C3.s2365c3f1");
    check_field_offset(lv, s2365c3f2, ABISELECT(60,40), "S2365C3.s2365c3f2");
    test_class_info(&lv, &cd_S2365C3);
    dp->~S2365C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2365C3(Test_S2365C3, "S2365C3", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S2365C3C1Ev();
extern void _ZN7S2365C3D1Ev();
Name_Map name_map_S2365C3[] = {
  NSPAIR(_ZN7S2365C3C1Ev),
  NSPAIR(_ZN7S2365C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2365C4;
extern VTBL_ENTRY _ZTI7S2365C4[];
extern  VTBL_ENTRY _ZTV7S2365C4[];
extern Class_Descriptor cd_S2365C7;
extern VTBL_ENTRY _ZTI7S2365C7[];
extern  VTBL_ENTRY _ZTV7S2365C7[];
static Base_Class bases_S2365C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2365C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2365C7,    ABISELECT(40,28), //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2365C3[];
extern void _ZN7S2365C3D1Ev();
extern void _ZN7S2365C3D0Ev();
extern void _ZN7S2365C42v5Ev();
extern void _ZN7S2365C42v6Ev();
extern void _ZN7S2365C42v7Ev();
extern void _ZN7S2365C33v11Ev();
extern void _ZN7S2365C33v12Ev();
extern void _ZN7S2365C33v13Ev();
extern void _ZN7S2365C33v14Ev();
extern void _ZN7S2365C33v15Ev();
extern void _ZN7S2365C33v16Ev();
extern void _ZN7S2365C33v17Ev();
extern void _ZN7S2365C33v18Ev();
extern void _ZN7S2365C33v19Ev();
extern void _ZN7S2365C33v20Ev();
extern void ABISELECT(_ZThn40_N7S2365C3D1Ev,_ZThn28_N7S2365C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2365C3D0Ev,_ZThn28_N7S2365C3D0Ev)();
extern void _ZN7S2365C72v8Ev();
extern void _ZN7S2365C72v9Ev();
extern void _ZN7S2365C73v10Ev();
static  VTBL_ENTRY vtc_S2365C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2365C3[0]),
  (VTBL_ENTRY)&_ZN7S2365C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2365C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2365C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2365C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2365C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v20Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2365C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2365C3D1Ev,_ZThn28_N7S2365C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2365C3D0Ev,_ZThn28_N7S2365C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2365C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2365C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2365C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2365C3[];
extern  VTBL_ENTRY _ZTV7S2365C3[];
Class_Descriptor cd_S2365C3 = {  "S2365C3", // class name
  bases_S2365C3, 2,
  &(vtc_S2365C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S2365C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2365C3),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  S2365C10  {
  virtual  ~S2365C10(); // _ZN8S2365C10D1Ev
  virtual void  v21(); // _ZN8S2365C103v21Ev
  virtual void  v22(); // _ZN8S2365C103v22Ev
  virtual void  v23(); // _ZN8S2365C103v23Ev
  S2365C10(); // tgen
};
//SIG(-1 S2365C10) C1{ vd v1 v2 v3}


 S2365C10 ::~S2365C10(){ note_dtor("S2365C10", this);}
void  S2365C10 ::v21(){vfunc_called(this, "_ZN8S2365C103v21Ev");}
void  S2365C10 ::v22(){vfunc_called(this, "_ZN8S2365C103v22Ev");}
void  S2365C10 ::v23(){vfunc_called(this, "_ZN8S2365C103v23Ev");}
S2365C10 ::S2365C10(){ note_ctor("S2365C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2365C10C1Ev();
extern void _ZN8S2365C10D1Ev();
Name_Map name_map_S2365C10[] = {
  NSPAIR(_ZN8S2365C10C1Ev),
  NSPAIR(_ZN8S2365C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2365C10[];
extern void _ZN8S2365C10D1Ev();
extern void _ZN8S2365C10D0Ev();
extern void _ZN8S2365C103v21Ev();
extern void _ZN8S2365C103v22Ev();
extern void _ZN8S2365C103v23Ev();
static  VTBL_ENTRY vtc_S2365C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2365C10[0]),
  (VTBL_ENTRY)&_ZN8S2365C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2365C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2365C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2365C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2365C103v23Ev,
};
extern VTBL_ENTRY _ZTI8S2365C10[];
extern  VTBL_ENTRY _ZTV8S2365C10[];
Class_Descriptor cd_S2365C10 = {  "S2365C10", // class name
  0,0,//no base classes
  &(vtc_S2365C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2365C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2365C10),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  S2365C9  : S2365C10 {
  ::S5166C36 s2365c9f0;
  ::S2355C13_nt s2365c9f1;
  char s2365c9f2;
  virtual  ~S2365C9(); // _ZN7S2365C9D1Ev
  virtual void  v24(); // _ZN7S2365C93v24Ev
  virtual void  v25(); // _ZN7S2365C93v25Ev
  virtual void  v26(); // _ZN7S2365C93v26Ev
  S2365C9(); // tgen
};
//SIG(-1 S2365C9) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2365C9 ::~S2365C9(){ note_dtor("S2365C9", this);}
void  S2365C9 ::v24(){vfunc_called(this, "_ZN7S2365C93v24Ev");}
void  S2365C9 ::v25(){vfunc_called(this, "_ZN7S2365C93v25Ev");}
void  S2365C9 ::v26(){vfunc_called(this, "_ZN7S2365C93v26Ev");}
S2365C9 ::S2365C9(){ note_ctor("S2365C9", this);} // tgen

static void Test_S2365C9()
{
  extern Class_Descriptor cd_S2365C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2365C9, buf);
    S2365C9 *dp, &lv = *(dp=new (buf) S2365C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2365C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2365C9)");
    check_base_class_offset(lv, (S2365C10*), 0, "S2365C9");
    check_field_offset(lv, s2365c9f0, ABISELECT(8,4), "S2365C9.s2365c9f0");
    check_field_offset(lv, s2365c9f1, ABISELECT(32,20), "S2365C9.s2365c9f1");
    check_field_offset(lv, s2365c9f2, ABISELECT(64,52), "S2365C9.s2365c9f2");
    test_class_info(&lv, &cd_S2365C9);
    dp->~S2365C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2365C9(Test_S2365C9, "S2365C9", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2365C9C1Ev();
extern void _ZN7S2365C9D1Ev();
Name_Map name_map_S2365C9[] = {
  NSPAIR(_ZN7S2365C9C1Ev),
  NSPAIR(_ZN7S2365C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2365C10;
extern VTBL_ENTRY _ZTI8S2365C10[];
extern  VTBL_ENTRY _ZTV8S2365C10[];
static Base_Class bases_S2365C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2365C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2365C9[];
extern void _ZN7S2365C9D1Ev();
extern void _ZN7S2365C9D0Ev();
extern void _ZN8S2365C103v21Ev();
extern void _ZN8S2365C103v22Ev();
extern void _ZN8S2365C103v23Ev();
extern void _ZN7S2365C93v24Ev();
extern void _ZN7S2365C93v25Ev();
extern void _ZN7S2365C93v26Ev();
static  VTBL_ENTRY vtc_S2365C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2365C9[0]),
  (VTBL_ENTRY)&_ZN7S2365C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2365C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2365C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2365C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2365C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2365C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2365C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2365C93v26Ev,
};
extern VTBL_ENTRY _ZTI7S2365C9[];
extern  VTBL_ENTRY _ZTV7S2365C9[];
Class_Descriptor cd_S2365C9 = {  "S2365C9", // class name
  bases_S2365C9, 1,
  &(vtc_S2365C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2365C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2365C9),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  S2365C8  : S2365C9 {
  virtual  ~S2365C8(); // _ZN7S2365C8D1Ev
  virtual void  v27(); // _ZN7S2365C83v27Ev
  virtual void  v28(); // _ZN7S2365C83v28Ev
  virtual void  v29(); // _ZN7S2365C83v29Ev
  virtual void  v30(); // _ZN7S2365C83v30Ev
  S2365C8(); // tgen
};
//SIG(-1 S2365C8) C1{ BC2{ BC3{ vd v5 v6 v7} vd v8 v9 v10 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4}


 S2365C8 ::~S2365C8(){ note_dtor("S2365C8", this);}
void  S2365C8 ::v27(){vfunc_called(this, "_ZN7S2365C83v27Ev");}
void  S2365C8 ::v28(){vfunc_called(this, "_ZN7S2365C83v28Ev");}
void  S2365C8 ::v29(){vfunc_called(this, "_ZN7S2365C83v29Ev");}
void  S2365C8 ::v30(){vfunc_called(this, "_ZN7S2365C83v30Ev");}
S2365C8 ::S2365C8(){ note_ctor("S2365C8", this);} // tgen

static void Test_S2365C8()
{
  extern Class_Descriptor cd_S2365C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2365C8, buf);
    S2365C8 *dp, &lv = *(dp=new (buf) S2365C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2365C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2365C8)");
    check_base_class_offset(lv, (S2365C10*)(S2365C9*), 0, "S2365C8");
    check_base_class_offset(lv, (S2365C9*), 0, "S2365C8");
    test_class_info(&lv, &cd_S2365C8);
    dp->~S2365C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2365C8(Test_S2365C8, "S2365C8", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2365C8C1Ev();
extern void _ZN7S2365C8D1Ev();
Name_Map name_map_S2365C8[] = {
  NSPAIR(_ZN7S2365C8C1Ev),
  NSPAIR(_ZN7S2365C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2365C10;
extern VTBL_ENTRY _ZTI8S2365C10[];
extern  VTBL_ENTRY _ZTV8S2365C10[];
extern Class_Descriptor cd_S2365C9;
extern VTBL_ENTRY _ZTI7S2365C9[];
extern  VTBL_ENTRY _ZTV7S2365C9[];
static Base_Class bases_S2365C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2365C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2365C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2365C8[];
extern void _ZN7S2365C8D1Ev();
extern void _ZN7S2365C8D0Ev();
extern void _ZN8S2365C103v21Ev();
extern void _ZN8S2365C103v22Ev();
extern void _ZN8S2365C103v23Ev();
extern void _ZN7S2365C93v24Ev();
extern void _ZN7S2365C93v25Ev();
extern void _ZN7S2365C93v26Ev();
extern void _ZN7S2365C83v27Ev();
extern void _ZN7S2365C83v28Ev();
extern void _ZN7S2365C83v29Ev();
extern void _ZN7S2365C83v30Ev();
static  VTBL_ENTRY vtc_S2365C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2365C8[0]),
  (VTBL_ENTRY)&_ZN7S2365C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2365C8D0Ev,
  (VTBL_ENTRY)&_ZN8S2365C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2365C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2365C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2365C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2365C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2365C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2365C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2365C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2365C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2365C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2365C8[];
extern  VTBL_ENTRY _ZTV7S2365C8[];
Class_Descriptor cd_S2365C8 = {  "S2365C8", // class name
  bases_S2365C8, 2,
  &(vtc_S2365C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2365C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2365C8),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2365C2  : S2365C3 , S2365C8 {
  int s2365c2f0[3];
  char s2365c2f1;
  ::S5166C24 s2365c2f2;
  virtual  ~S2365C2(); // _ZN7S2365C2D1Ev
  virtual void  v31(); // _ZN7S2365C23v31Ev
  virtual void  v32(); // _ZN7S2365C23v32Ev
  virtual void  v33(); // _ZN7S2365C23v33Ev
  virtual void  v34(); // _ZN7S2365C23v34Ev
  virtual void  v35(); // _ZN7S2365C23v35Ev
  virtual void  v36(); // _ZN7S2365C23v36Ev
  S2365C2(); // tgen
};
//SIG(-1 S2365C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd v10 v11 v12} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp Fc Fi} BC7{ BC8{ BC9{ vd v23 v24 v25} vd v26 v27 v28 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m FL[4]} Fc} vd v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 Fi[3] Fc FC13{ BC14{ m Fp Fi FC15{ m} FC16{ m}}}}


 S2365C2 ::~S2365C2(){ note_dtor("S2365C2", this);}
void  S2365C2 ::v31(){vfunc_called(this, "_ZN7S2365C23v31Ev");}
void  S2365C2 ::v32(){vfunc_called(this, "_ZN7S2365C23v32Ev");}
void  S2365C2 ::v33(){vfunc_called(this, "_ZN7S2365C23v33Ev");}
void  S2365C2 ::v34(){vfunc_called(this, "_ZN7S2365C23v34Ev");}
void  S2365C2 ::v35(){vfunc_called(this, "_ZN7S2365C23v35Ev");}
void  S2365C2 ::v36(){vfunc_called(this, "_ZN7S2365C23v36Ev");}
S2365C2 ::S2365C2(){ note_ctor("S2365C2", this);} // tgen

static void Test_S2365C2()
{
  extern Class_Descriptor cd_S2365C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,33)];
    init_test(&cd_S2365C2, buf);
    S2365C2 *dp, &lv = *(dp=new (buf) S2365C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,128), "sizeof(S2365C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2365C2)");
    check_base_class_offset(lv, (S2365C4*)(S2365C3*), 0, "S2365C2");
    check_base_class_offset(lv, (S2365C7*)(S2365C3*), ABISELECT(40,28), "S2365C2");
    check_base_class_offset(lv, (S2365C3*), 0, "S2365C2");
    check_base_class_offset(lv, (S2365C10*)(S2365C9*)(S2365C8*), ABISELECT(64,44), "S2365C2");
    check_base_class_offset(lv, (S2365C9*)(S2365C8*), ABISELECT(64,44), "S2365C2");
    check_base_class_offset(lv, (S2365C8*), ABISELECT(64,44), "S2365C2");
    check_field_offset(lv, s2365c2f0, ABISELECT(132,100), "S2365C2.s2365c2f0");
    check_field_offset(lv, s2365c2f1, ABISELECT(144,112), "S2365C2.s2365c2f1");
    check_field_offset(lv, s2365c2f2, ABISELECT(152,116), "S2365C2.s2365c2f2");
    test_class_info(&lv, &cd_S2365C2);
    dp->~S2365C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2365C2(Test_S2365C2, "S2365C2", ABISELECT(168,128));

#else // __cplusplus

extern void _ZN7S2365C2C1Ev();
extern void _ZN7S2365C2D1Ev();
Name_Map name_map_S2365C2[] = {
  NSPAIR(_ZN7S2365C2C1Ev),
  NSPAIR(_ZN7S2365C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2365C4;
extern VTBL_ENTRY _ZTI7S2365C4[];
extern  VTBL_ENTRY _ZTV7S2365C4[];
extern Class_Descriptor cd_S2365C7;
extern VTBL_ENTRY _ZTI7S2365C7[];
extern  VTBL_ENTRY _ZTV7S2365C7[];
extern Class_Descriptor cd_S2365C3;
extern VTBL_ENTRY _ZTI7S2365C3[];
extern  VTBL_ENTRY _ZTV7S2365C3[];
extern Class_Descriptor cd_S2365C10;
extern VTBL_ENTRY _ZTI8S2365C10[];
extern  VTBL_ENTRY _ZTV8S2365C10[];
extern Class_Descriptor cd_S2365C9;
extern VTBL_ENTRY _ZTI7S2365C9[];
extern  VTBL_ENTRY _ZTV7S2365C9[];
extern Class_Descriptor cd_S2365C8;
extern VTBL_ENTRY _ZTI7S2365C8[];
extern  VTBL_ENTRY _ZTV7S2365C8[];
static Base_Class bases_S2365C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2365C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2365C7,    ABISELECT(40,28), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2365C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2365C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2365C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2365C8,    ABISELECT(64,44), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2365C2[];
extern void _ZN7S2365C2D1Ev();
extern void _ZN7S2365C2D0Ev();
extern void _ZN7S2365C42v5Ev();
extern void _ZN7S2365C42v6Ev();
extern void _ZN7S2365C42v7Ev();
extern void _ZN7S2365C33v11Ev();
extern void _ZN7S2365C33v12Ev();
extern void _ZN7S2365C33v13Ev();
extern void _ZN7S2365C33v14Ev();
extern void _ZN7S2365C33v15Ev();
extern void _ZN7S2365C33v16Ev();
extern void _ZN7S2365C33v17Ev();
extern void _ZN7S2365C33v18Ev();
extern void _ZN7S2365C33v19Ev();
extern void _ZN7S2365C33v20Ev();
extern void _ZN7S2365C23v31Ev();
extern void _ZN7S2365C23v32Ev();
extern void _ZN7S2365C23v33Ev();
extern void _ZN7S2365C23v34Ev();
extern void _ZN7S2365C23v35Ev();
extern void _ZN7S2365C23v36Ev();
extern void ABISELECT(_ZThn40_N7S2365C2D1Ev,_ZThn28_N7S2365C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2365C2D0Ev,_ZThn28_N7S2365C2D0Ev)();
extern void _ZN7S2365C72v8Ev();
extern void _ZN7S2365C72v9Ev();
extern void _ZN7S2365C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2365C2D1Ev,_ZThn44_N7S2365C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S2365C2D0Ev,_ZThn44_N7S2365C2D0Ev)();
extern void _ZN8S2365C103v21Ev();
extern void _ZN8S2365C103v22Ev();
extern void _ZN8S2365C103v23Ev();
extern void _ZN7S2365C93v24Ev();
extern void _ZN7S2365C93v25Ev();
extern void _ZN7S2365C93v26Ev();
extern void _ZN7S2365C83v27Ev();
extern void _ZN7S2365C83v28Ev();
extern void _ZN7S2365C83v29Ev();
extern void _ZN7S2365C83v30Ev();
static  VTBL_ENTRY vtc_S2365C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2365C2[0]),
  (VTBL_ENTRY)&_ZN7S2365C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2365C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2365C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2365C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2365C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2365C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2365C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2365C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2365C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2365C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2365C23v36Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2365C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2365C2D1Ev,_ZThn28_N7S2365C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2365C2D0Ev,_ZThn28_N7S2365C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2365C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2365C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2365C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2365C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2365C2D1Ev,_ZThn44_N7S2365C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2365C2D0Ev,_ZThn44_N7S2365C2D0Ev),
  (VTBL_ENTRY)&_ZN8S2365C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2365C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2365C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2365C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2365C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2365C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2365C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2365C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2365C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2365C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2365C2[];
extern  VTBL_ENTRY _ZTV7S2365C2[];
Class_Descriptor cd_S2365C2 = {  "S2365C2", // class name
  bases_S2365C2, 6,
  &(vtc_S2365C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,128), // object size
  NSPAIRA(_ZTI7S2365C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2365C2),44, //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  S2365C18_nt  {
  void *s2365c18f0;
  virtual  ~S2365C18_nt(); // _ZN11S2365C18_ntD1Ev
  virtual void  v37(); // _ZN11S2365C18_nt3v37Ev
  virtual void  v38(); // _ZN11S2365C18_nt3v38Ev
  virtual void  v39(); // _ZN11S2365C18_nt3v39Ev
  virtual void  v40(); // _ZN11S2365C18_nt3v40Ev
  virtual void  v41(); // _ZN11S2365C18_nt3v41Ev
  virtual void  v42(); // _ZN11S2365C18_nt3v42Ev
  virtual void  v43(); // _ZN11S2365C18_nt3v43Ev
  virtual void  v44(); // _ZN11S2365C18_nt3v44Ev
  S2365C18_nt(); // tgen
};
//SIG(-1 S2365C18_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 Fp}


 S2365C18_nt ::~S2365C18_nt(){ note_dtor("S2365C18_nt", this);}
void  S2365C18_nt ::v37(){vfunc_called(this, "_ZN11S2365C18_nt3v37Ev");}
void  S2365C18_nt ::v38(){vfunc_called(this, "_ZN11S2365C18_nt3v38Ev");}
void  S2365C18_nt ::v39(){vfunc_called(this, "_ZN11S2365C18_nt3v39Ev");}
void  S2365C18_nt ::v40(){vfunc_called(this, "_ZN11S2365C18_nt3v40Ev");}
void  S2365C18_nt ::v41(){vfunc_called(this, "_ZN11S2365C18_nt3v41Ev");}
void  S2365C18_nt ::v42(){vfunc_called(this, "_ZN11S2365C18_nt3v42Ev");}
void  S2365C18_nt ::v43(){vfunc_called(this, "_ZN11S2365C18_nt3v43Ev");}
void  S2365C18_nt ::v44(){vfunc_called(this, "_ZN11S2365C18_nt3v44Ev");}
S2365C18_nt ::S2365C18_nt(){ note_ctor("S2365C18_nt", this);} // tgen

//skip512 S2365C18_nt

#else // __cplusplus

extern void _ZN11S2365C18_ntC1Ev();
extern void _ZN11S2365C18_ntD1Ev();
Name_Map name_map_S2365C18_nt[] = {
  NSPAIR(_ZN11S2365C18_ntC1Ev),
  NSPAIR(_ZN11S2365C18_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S2365C18_nt[];
extern void _ZN11S2365C18_ntD1Ev();
extern void _ZN11S2365C18_ntD0Ev();
extern void _ZN11S2365C18_nt3v37Ev();
extern void _ZN11S2365C18_nt3v38Ev();
extern void _ZN11S2365C18_nt3v39Ev();
extern void _ZN11S2365C18_nt3v40Ev();
extern void _ZN11S2365C18_nt3v41Ev();
extern void _ZN11S2365C18_nt3v42Ev();
extern void _ZN11S2365C18_nt3v43Ev();
extern void _ZN11S2365C18_nt3v44Ev();
static  VTBL_ENTRY vtc_S2365C18_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2365C18_nt[0]),
  (VTBL_ENTRY)&_ZN11S2365C18_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2365C18_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2365C18_nt3v37Ev,
  (VTBL_ENTRY)&_ZN11S2365C18_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S2365C18_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S2365C18_nt3v40Ev,
  (VTBL_ENTRY)&_ZN11S2365C18_nt3v41Ev,
  (VTBL_ENTRY)&_ZN11S2365C18_nt3v42Ev,
  (VTBL_ENTRY)&_ZN11S2365C18_nt3v43Ev,
  (VTBL_ENTRY)&_ZN11S2365C18_nt3v44Ev,
};
extern VTBL_ENTRY _ZTI11S2365C18_nt[];
VTBL_ENTRY *P__ZTI11S2365C18_nt = _ZTI11S2365C18_nt; 
extern  VTBL_ENTRY _ZTV11S2365C18_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2365C1  : S2365C2 {
  ::S2365C18_nt s2365c1f0;
  ::S2355C19_nt s2365c1f1;
  int s2365c1f2[2];
  ::S5166C19_nt s2365c1f3;
  int s2365c1f4;
  void *s2365c1f5[3];
  int s2365c1f6;
  virtual  ~S2365C1(); // _ZN7S2365C1D1Ev
  virtual void  v1(); // _ZN7S2365C12v1Ev
  virtual void  v2(); // _ZN7S2365C12v2Ev
  virtual void  v3(); // _ZN7S2365C12v3Ev
  virtual void  v4(); // _ZN7S2365C12v4Ev
  S2365C1(); // tgen
};
//SIG(1 S2365C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd v8 v9 v10} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp Fc Fi} BC8{ BC9{ BC10{ vd v21 v22 v23} vd v24 v25 v26 FC11{ m Fp Fi[2] FC12{ m}} FC13{ m FL[4]} Fc} vd v27 v28 v29 v30} vd v31 v32 v33 v34 v35 v36 Fi[3] Fc FC14{ BC15{ m Fp Fi FC16{ m} FC17{ m}}}} vd v1 v2 v3 v4 FC18{ vd v37 v38 v39 v40 v41 v42 v43 v44 Fp} FC19{ BC20{ vd v46 FC21{ m FC15} Fp[3] Fc} v45 Fp} Fi[2] FC5 Fi Fp[3] Fi}


 S2365C1 ::~S2365C1(){ note_dtor("S2365C1", this);}
void  S2365C1 ::v1(){vfunc_called(this, "_ZN7S2365C12v1Ev");}
void  S2365C1 ::v2(){vfunc_called(this, "_ZN7S2365C12v2Ev");}
void  S2365C1 ::v3(){vfunc_called(this, "_ZN7S2365C12v3Ev");}
void  S2365C1 ::v4(){vfunc_called(this, "_ZN7S2365C12v4Ev");}
S2365C1 ::S2365C1(){ note_ctor("S2365C1", this);} // tgen

static void Test_S2365C1()
{
  extern Class_Descriptor cd_S2365C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,54)];
    init_test(&cd_S2365C1, buf);
    S2365C1 *dp, &lv = *(dp=new (buf) S2365C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,212), "sizeof(S2365C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2365C1)");
    check_base_class_offset(lv, (S2365C4*)(S2365C3*)(S2365C2*), 0, "S2365C1");
    check_base_class_offset(lv, (S2365C7*)(S2365C3*)(S2365C2*), ABISELECT(40,28), "S2365C1");
    check_base_class_offset(lv, (S2365C3*)(S2365C2*), 0, "S2365C1");
    check_base_class_offset(lv, (S2365C10*)(S2365C9*)(S2365C8*)(S2365C2*), ABISELECT(64,44), "S2365C1");
    check_base_class_offset(lv, (S2365C9*)(S2365C8*)(S2365C2*), ABISELECT(64,44), "S2365C1");
    check_base_class_offset(lv, (S2365C8*)(S2365C2*), ABISELECT(64,44), "S2365C1");
    check_base_class_offset(lv, (S2365C2*), 0, "S2365C1");
    check_field_offset(lv, s2365c1f0, ABISELECT(168,128), "S2365C1.s2365c1f0");
    check_field_offset(lv, s2365c1f1, ABISELECT(184,136), "S2365C1.s2365c1f1");
    check_field_offset(lv, s2365c1f2, ABISELECT(248,172), "S2365C1.s2365c1f2");
    check_field_offset(lv, s2365c1f3, ABISELECT(256,180), "S2365C1.s2365c1f3");
    check_field_offset(lv, s2365c1f4, ABISELECT(272,192), "S2365C1.s2365c1f4");
    check_field_offset(lv, s2365c1f5, ABISELECT(280,196), "S2365C1.s2365c1f5");
    check_field_offset(lv, s2365c1f6, ABISELECT(304,208), "S2365C1.s2365c1f6");
    test_class_info(&lv, &cd_S2365C1);
    dp->~S2365C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2365C1(Test_S2365C1, "S2365C1", ABISELECT(312,212));

#else // __cplusplus

extern void _ZN7S2365C1C1Ev();
extern void _ZN7S2365C1D1Ev();
Name_Map name_map_S2365C1[] = {
  NSPAIR(_ZN7S2365C1C1Ev),
  NSPAIR(_ZN7S2365C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2365C4;
extern VTBL_ENTRY _ZTI7S2365C4[];
extern  VTBL_ENTRY _ZTV7S2365C4[];
extern Class_Descriptor cd_S2365C7;
extern VTBL_ENTRY _ZTI7S2365C7[];
extern  VTBL_ENTRY _ZTV7S2365C7[];
extern Class_Descriptor cd_S2365C3;
extern VTBL_ENTRY _ZTI7S2365C3[];
extern  VTBL_ENTRY _ZTV7S2365C3[];
extern Class_Descriptor cd_S2365C10;
extern VTBL_ENTRY _ZTI8S2365C10[];
extern  VTBL_ENTRY _ZTV8S2365C10[];
extern Class_Descriptor cd_S2365C9;
extern VTBL_ENTRY _ZTI7S2365C9[];
extern  VTBL_ENTRY _ZTV7S2365C9[];
extern Class_Descriptor cd_S2365C8;
extern VTBL_ENTRY _ZTI7S2365C8[];
extern  VTBL_ENTRY _ZTV7S2365C8[];
extern Class_Descriptor cd_S2365C2;
extern VTBL_ENTRY _ZTI7S2365C2[];
extern  VTBL_ENTRY _ZTV7S2365C2[];
static Base_Class bases_S2365C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2365C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2365C7,    ABISELECT(40,28), //bcp->offset
    27, //bcp->virtual_function_table_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_S2365C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2365C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2365C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2365C8,    ABISELECT(64,44), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2365C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2365C1[];
extern void _ZN7S2365C1D1Ev();
extern void _ZN7S2365C1D0Ev();
extern void _ZN7S2365C42v5Ev();
extern void _ZN7S2365C42v6Ev();
extern void _ZN7S2365C42v7Ev();
extern void _ZN7S2365C33v11Ev();
extern void _ZN7S2365C33v12Ev();
extern void _ZN7S2365C33v13Ev();
extern void _ZN7S2365C33v14Ev();
extern void _ZN7S2365C33v15Ev();
extern void _ZN7S2365C33v16Ev();
extern void _ZN7S2365C33v17Ev();
extern void _ZN7S2365C33v18Ev();
extern void _ZN7S2365C33v19Ev();
extern void _ZN7S2365C33v20Ev();
extern void _ZN7S2365C23v31Ev();
extern void _ZN7S2365C23v32Ev();
extern void _ZN7S2365C23v33Ev();
extern void _ZN7S2365C23v34Ev();
extern void _ZN7S2365C23v35Ev();
extern void _ZN7S2365C23v36Ev();
extern void _ZN7S2365C12v1Ev();
extern void _ZN7S2365C12v2Ev();
extern void _ZN7S2365C12v3Ev();
extern void _ZN7S2365C12v4Ev();
extern void ABISELECT(_ZThn40_N7S2365C1D1Ev,_ZThn28_N7S2365C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2365C1D0Ev,_ZThn28_N7S2365C1D0Ev)();
extern void _ZN7S2365C72v8Ev();
extern void _ZN7S2365C72v9Ev();
extern void _ZN7S2365C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2365C1D1Ev,_ZThn44_N7S2365C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S2365C1D0Ev,_ZThn44_N7S2365C1D0Ev)();
extern void _ZN8S2365C103v21Ev();
extern void _ZN8S2365C103v22Ev();
extern void _ZN8S2365C103v23Ev();
extern void _ZN7S2365C93v24Ev();
extern void _ZN7S2365C93v25Ev();
extern void _ZN7S2365C93v26Ev();
extern void _ZN7S2365C83v27Ev();
extern void _ZN7S2365C83v28Ev();
extern void _ZN7S2365C83v29Ev();
extern void _ZN7S2365C83v30Ev();
static  VTBL_ENTRY vtc_S2365C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2365C1[0]),
  (VTBL_ENTRY)&_ZN7S2365C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2365C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2365C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2365C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2365C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2365C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2365C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2365C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2365C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2365C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2365C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2365C23v36Ev,
  (VTBL_ENTRY)&_ZN7S2365C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2365C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2365C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2365C12v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2365C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2365C1D1Ev,_ZThn28_N7S2365C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2365C1D0Ev,_ZThn28_N7S2365C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2365C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2365C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2365C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2365C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2365C1D1Ev,_ZThn44_N7S2365C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2365C1D0Ev,_ZThn44_N7S2365C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2365C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2365C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2365C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2365C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2365C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2365C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2365C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2365C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2365C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2365C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2365C1[];
extern  VTBL_ENTRY _ZTV7S2365C1[];
Class_Descriptor cd_S2365C1 = {  "S2365C1", // class name
  bases_S2365C1, 7,
  &(vtc_S2365C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,212), // object size
  NSPAIRA(_ZTI7S2365C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2365C1),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2292C4  {
  virtual  ~S2292C4(); // _ZN7S2292C4D1Ev
  virtual void  v44(); // _ZN7S2292C43v44Ev
  virtual void  v45(); // _ZN7S2292C43v45Ev
  virtual void  v46(); // _ZN7S2292C43v46Ev
  S2292C4(); // tgen
};
//SIG(-1 S2292C4) C1{ vd v1 v2 v3}


 S2292C4 ::~S2292C4(){ note_dtor("S2292C4", this);}
void  S2292C4 ::v44(){vfunc_called(this, "_ZN7S2292C43v44Ev");}
void  S2292C4 ::v45(){vfunc_called(this, "_ZN7S2292C43v45Ev");}
void  S2292C4 ::v46(){vfunc_called(this, "_ZN7S2292C43v46Ev");}
S2292C4 ::S2292C4(){ note_ctor("S2292C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2292C4C1Ev();
extern void _ZN7S2292C4D1Ev();
Name_Map name_map_S2292C4[] = {
  NSPAIR(_ZN7S2292C4C1Ev),
  NSPAIR(_ZN7S2292C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2292C4[];
extern void _ZN7S2292C4D1Ev();
extern void _ZN7S2292C4D0Ev();
extern void _ZN7S2292C43v44Ev();
extern void _ZN7S2292C43v45Ev();
extern void _ZN7S2292C43v46Ev();
static  VTBL_ENTRY vtc_S2292C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2292C4[0]),
  (VTBL_ENTRY)&_ZN7S2292C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2292C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2292C43v44Ev,
  (VTBL_ENTRY)&_ZN7S2292C43v45Ev,
  (VTBL_ENTRY)&_ZN7S2292C43v46Ev,
};
extern VTBL_ENTRY _ZTI7S2292C4[];
extern  VTBL_ENTRY _ZTV7S2292C4[];
Class_Descriptor cd_S2292C4 = {  "S2292C4", // class name
  0,0,//no base classes
  &(vtc_S2292C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2292C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2292C4),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  S2292C3  : S2292C4 {
  ::S5166C36 s2292c3f0;
  ::S2355C13_nt s2292c3f1;
  char s2292c3f2;
  virtual  ~S2292C3(); // _ZN7S2292C3D1Ev
  virtual void  v47(); // _ZN7S2292C33v47Ev
  virtual void  v48(); // _ZN7S2292C33v48Ev
  virtual void  v49(); // _ZN7S2292C33v49Ev
  S2292C3(); // tgen
};
//SIG(-1 S2292C3) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2292C3 ::~S2292C3(){ note_dtor("S2292C3", this);}
void  S2292C3 ::v47(){vfunc_called(this, "_ZN7S2292C33v47Ev");}
void  S2292C3 ::v48(){vfunc_called(this, "_ZN7S2292C33v48Ev");}
void  S2292C3 ::v49(){vfunc_called(this, "_ZN7S2292C33v49Ev");}
S2292C3 ::S2292C3(){ note_ctor("S2292C3", this);} // tgen

static void Test_S2292C3()
{
  extern Class_Descriptor cd_S2292C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2292C3, buf);
    S2292C3 *dp, &lv = *(dp=new (buf) S2292C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2292C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2292C3)");
    check_base_class_offset(lv, (S2292C4*), 0, "S2292C3");
    check_field_offset(lv, s2292c3f0, ABISELECT(8,4), "S2292C3.s2292c3f0");
    check_field_offset(lv, s2292c3f1, ABISELECT(32,20), "S2292C3.s2292c3f1");
    check_field_offset(lv, s2292c3f2, ABISELECT(64,52), "S2292C3.s2292c3f2");
    test_class_info(&lv, &cd_S2292C3);
    dp->~S2292C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2292C3(Test_S2292C3, "S2292C3", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2292C3C1Ev();
extern void _ZN7S2292C3D1Ev();
Name_Map name_map_S2292C3[] = {
  NSPAIR(_ZN7S2292C3C1Ev),
  NSPAIR(_ZN7S2292C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2292C4;
extern VTBL_ENTRY _ZTI7S2292C4[];
extern  VTBL_ENTRY _ZTV7S2292C4[];
static Base_Class bases_S2292C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2292C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2292C3[];
extern void _ZN7S2292C3D1Ev();
extern void _ZN7S2292C3D0Ev();
extern void _ZN7S2292C43v44Ev();
extern void _ZN7S2292C43v45Ev();
extern void _ZN7S2292C43v46Ev();
extern void _ZN7S2292C33v47Ev();
extern void _ZN7S2292C33v48Ev();
extern void _ZN7S2292C33v49Ev();
static  VTBL_ENTRY vtc_S2292C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2292C3[0]),
  (VTBL_ENTRY)&_ZN7S2292C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2292C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2292C43v44Ev,
  (VTBL_ENTRY)&_ZN7S2292C43v45Ev,
  (VTBL_ENTRY)&_ZN7S2292C43v46Ev,
  (VTBL_ENTRY)&_ZN7S2292C33v47Ev,
  (VTBL_ENTRY)&_ZN7S2292C33v48Ev,
  (VTBL_ENTRY)&_ZN7S2292C33v49Ev,
};
extern VTBL_ENTRY _ZTI7S2292C3[];
extern  VTBL_ENTRY _ZTV7S2292C3[];
Class_Descriptor cd_S2292C3 = {  "S2292C3", // class name
  bases_S2292C3, 1,
  &(vtc_S2292C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2292C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2292C3),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  S2292C2  : S2292C3 {
  virtual  ~S2292C2(); // _ZN7S2292C2D1Ev
  virtual void  v50(); // _ZN7S2292C23v50Ev
  virtual void  v51(); // _ZN7S2292C23v51Ev
  virtual void  v52(); // _ZN7S2292C23v52Ev
  virtual void  v53(); // _ZN7S2292C23v53Ev
  virtual void  v54(); // _ZN7S2292C23v54Ev
  virtual void  v55(); // _ZN7S2292C23v55Ev
  virtual void  v56(); // _ZN7S2292C23v56Ev
  virtual void  v57(); // _ZN7S2292C23v57Ev
  virtual void  v58(); // _ZN7S2292C23v58Ev
  virtual void  v59(); // _ZN7S2292C23v59Ev
  virtual void  v60(); // _ZN7S2292C23v60Ev
  virtual void  v61(); // _ZN7S2292C23v61Ev
  virtual void  v62(); // _ZN7S2292C23v62Ev
  virtual void  v63(); // _ZN7S2292C23v63Ev
  virtual void  v64(); // _ZN7S2292C23v64Ev
  virtual void  v65(); // _ZN7S2292C23v65Ev
  virtual void  v66(); // _ZN7S2292C23v66Ev
  virtual void  v67(); // _ZN7S2292C23v67Ev
  virtual void  v68(); // _ZN7S2292C23v68Ev
  virtual void  v69(); // _ZN7S2292C23v69Ev
  virtual void  v70(); // _ZN7S2292C23v70Ev
  virtual void  v71(); // _ZN7S2292C23v71Ev
  virtual void  v72(); // _ZN7S2292C23v72Ev
  virtual void  v73(); // _ZN7S2292C23v73Ev
  virtual void  v74(); // _ZN7S2292C23v74Ev
  virtual void  v75(); // _ZN7S2292C23v75Ev
  virtual void  v76(); // _ZN7S2292C23v76Ev
  virtual void  v77(); // _ZN7S2292C23v77Ev
  virtual void  v78(); // _ZN7S2292C23v78Ev
  virtual void  v79(); // _ZN7S2292C23v79Ev
  virtual void  v80(); // _ZN7S2292C23v80Ev
  virtual void  v81(); // _ZN7S2292C23v81Ev
  virtual void  v82(); // _ZN7S2292C23v82Ev
  virtual void  v83(); // _ZN7S2292C23v83Ev
  virtual void  v84(); // _ZN7S2292C23v84Ev
  virtual void  v85(); // _ZN7S2292C23v85Ev
  virtual void  v86(); // _ZN7S2292C23v86Ev
  virtual void  v87(); // _ZN7S2292C23v87Ev
  virtual void  v88(); // _ZN7S2292C23v88Ev
  virtual void  v89(); // _ZN7S2292C23v89Ev
  virtual void  v90(); // _ZN7S2292C23v90Ev
  virtual void  v91(); // _ZN7S2292C23v91Ev
  virtual void  v92(); // _ZN7S2292C23v92Ev
  S2292C2(); // tgen
};
//SIG(-1 S2292C2) C1{ BC2{ BC3{ vd v44 v45 v46} vd v47 v48 v49 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} 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}


 S2292C2 ::~S2292C2(){ note_dtor("S2292C2", this);}
void  S2292C2 ::v50(){vfunc_called(this, "_ZN7S2292C23v50Ev");}
void  S2292C2 ::v51(){vfunc_called(this, "_ZN7S2292C23v51Ev");}
void  S2292C2 ::v52(){vfunc_called(this, "_ZN7S2292C23v52Ev");}
void  S2292C2 ::v53(){vfunc_called(this, "_ZN7S2292C23v53Ev");}
void  S2292C2 ::v54(){vfunc_called(this, "_ZN7S2292C23v54Ev");}
void  S2292C2 ::v55(){vfunc_called(this, "_ZN7S2292C23v55Ev");}
void  S2292C2 ::v56(){vfunc_called(this, "_ZN7S2292C23v56Ev");}
void  S2292C2 ::v57(){vfunc_called(this, "_ZN7S2292C23v57Ev");}
void  S2292C2 ::v58(){vfunc_called(this, "_ZN7S2292C23v58Ev");}
void  S2292C2 ::v59(){vfunc_called(this, "_ZN7S2292C23v59Ev");}
void  S2292C2 ::v60(){vfunc_called(this, "_ZN7S2292C23v60Ev");}
void  S2292C2 ::v61(){vfunc_called(this, "_ZN7S2292C23v61Ev");}
void  S2292C2 ::v62(){vfunc_called(this, "_ZN7S2292C23v62Ev");}
void  S2292C2 ::v63(){vfunc_called(this, "_ZN7S2292C23v63Ev");}
void  S2292C2 ::v64(){vfunc_called(this, "_ZN7S2292C23v64Ev");}
void  S2292C2 ::v65(){vfunc_called(this, "_ZN7S2292C23v65Ev");}
void  S2292C2 ::v66(){vfunc_called(this, "_ZN7S2292C23v66Ev");}
void  S2292C2 ::v67(){vfunc_called(this, "_ZN7S2292C23v67Ev");}
void  S2292C2 ::v68(){vfunc_called(this, "_ZN7S2292C23v68Ev");}
void  S2292C2 ::v69(){vfunc_called(this, "_ZN7S2292C23v69Ev");}
void  S2292C2 ::v70(){vfunc_called(this, "_ZN7S2292C23v70Ev");}
void  S2292C2 ::v71(){vfunc_called(this, "_ZN7S2292C23v71Ev");}
void  S2292C2 ::v72(){vfunc_called(this, "_ZN7S2292C23v72Ev");}
void  S2292C2 ::v73(){vfunc_called(this, "_ZN7S2292C23v73Ev");}
void  S2292C2 ::v74(){vfunc_called(this, "_ZN7S2292C23v74Ev");}
void  S2292C2 ::v75(){vfunc_called(this, "_ZN7S2292C23v75Ev");}
void  S2292C2 ::v76(){vfunc_called(this, "_ZN7S2292C23v76Ev");}
void  S2292C2 ::v77(){vfunc_called(this, "_ZN7S2292C23v77Ev");}
void  S2292C2 ::v78(){vfunc_called(this, "_ZN7S2292C23v78Ev");}
void  S2292C2 ::v79(){vfunc_called(this, "_ZN7S2292C23v79Ev");}
void  S2292C2 ::v80(){vfunc_called(this, "_ZN7S2292C23v80Ev");}
void  S2292C2 ::v81(){vfunc_called(this, "_ZN7S2292C23v81Ev");}
void  S2292C2 ::v82(){vfunc_called(this, "_ZN7S2292C23v82Ev");}
void  S2292C2 ::v83(){vfunc_called(this, "_ZN7S2292C23v83Ev");}
void  S2292C2 ::v84(){vfunc_called(this, "_ZN7S2292C23v84Ev");}
void  S2292C2 ::v85(){vfunc_called(this, "_ZN7S2292C23v85Ev");}
void  S2292C2 ::v86(){vfunc_called(this, "_ZN7S2292C23v86Ev");}
void  S2292C2 ::v87(){vfunc_called(this, "_ZN7S2292C23v87Ev");}
void  S2292C2 ::v88(){vfunc_called(this, "_ZN7S2292C23v88Ev");}
void  S2292C2 ::v89(){vfunc_called(this, "_ZN7S2292C23v89Ev");}
void  S2292C2 ::v90(){vfunc_called(this, "_ZN7S2292C23v90Ev");}
void  S2292C2 ::v91(){vfunc_called(this, "_ZN7S2292C23v91Ev");}
void  S2292C2 ::v92(){vfunc_called(this, "_ZN7S2292C23v92Ev");}
S2292C2 ::S2292C2(){ note_ctor("S2292C2", this);} // tgen

static void Test_S2292C2()
{
  extern Class_Descriptor cd_S2292C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2292C2, buf);
    S2292C2 *dp, &lv = *(dp=new (buf) S2292C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2292C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2292C2)");
    check_base_class_offset(lv, (S2292C4*)(S2292C3*), 0, "S2292C2");
    check_base_class_offset(lv, (S2292C3*), 0, "S2292C2");
    test_class_info(&lv, &cd_S2292C2);
    dp->~S2292C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2292C2(Test_S2292C2, "S2292C2", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2292C2C1Ev();
extern void _ZN7S2292C2D1Ev();
Name_Map name_map_S2292C2[] = {
  NSPAIR(_ZN7S2292C2C1Ev),
  NSPAIR(_ZN7S2292C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2292C4;
extern VTBL_ENTRY _ZTI7S2292C4[];
extern  VTBL_ENTRY _ZTV7S2292C4[];
extern Class_Descriptor cd_S2292C3;
extern VTBL_ENTRY _ZTI7S2292C3[];
extern  VTBL_ENTRY _ZTV7S2292C3[];
static Base_Class bases_S2292C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2292C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2292C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2292C2[];
extern void _ZN7S2292C2D1Ev();
extern void _ZN7S2292C2D0Ev();
extern void _ZN7S2292C43v44Ev();
extern void _ZN7S2292C43v45Ev();
extern void _ZN7S2292C43v46Ev();
extern void _ZN7S2292C33v47Ev();
extern void _ZN7S2292C33v48Ev();
extern void _ZN7S2292C33v49Ev();
extern void _ZN7S2292C23v50Ev();
extern void _ZN7S2292C23v51Ev();
extern void _ZN7S2292C23v52Ev();
extern void _ZN7S2292C23v53Ev();
extern void _ZN7S2292C23v54Ev();
extern void _ZN7S2292C23v55Ev();
extern void _ZN7S2292C23v56Ev();
extern void _ZN7S2292C23v57Ev();
extern void _ZN7S2292C23v58Ev();
extern void _ZN7S2292C23v59Ev();
extern void _ZN7S2292C23v60Ev();
extern void _ZN7S2292C23v61Ev();
extern void _ZN7S2292C23v62Ev();
extern void _ZN7S2292C23v63Ev();
extern void _ZN7S2292C23v64Ev();
extern void _ZN7S2292C23v65Ev();
extern void _ZN7S2292C23v66Ev();
extern void _ZN7S2292C23v67Ev();
extern void _ZN7S2292C23v68Ev();
extern void _ZN7S2292C23v69Ev();
extern void _ZN7S2292C23v70Ev();
extern void _ZN7S2292C23v71Ev();
extern void _ZN7S2292C23v72Ev();
extern void _ZN7S2292C23v73Ev();
extern void _ZN7S2292C23v74Ev();
extern void _ZN7S2292C23v75Ev();
extern void _ZN7S2292C23v76Ev();
extern void _ZN7S2292C23v77Ev();
extern void _ZN7S2292C23v78Ev();
extern void _ZN7S2292C23v79Ev();
extern void _ZN7S2292C23v80Ev();
extern void _ZN7S2292C23v81Ev();
extern void _ZN7S2292C23v82Ev();
extern void _ZN7S2292C23v83Ev();
extern void _ZN7S2292C23v84Ev();
extern void _ZN7S2292C23v85Ev();
extern void _ZN7S2292C23v86Ev();
extern void _ZN7S2292C23v87Ev();
extern void _ZN7S2292C23v88Ev();
extern void _ZN7S2292C23v89Ev();
extern void _ZN7S2292C23v90Ev();
extern void _ZN7S2292C23v91Ev();
extern void _ZN7S2292C23v92Ev();
static  VTBL_ENTRY vtc_S2292C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2292C2[0]),
  (VTBL_ENTRY)&_ZN7S2292C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2292C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2292C43v44Ev,
  (VTBL_ENTRY)&_ZN7S2292C43v45Ev,
  (VTBL_ENTRY)&_ZN7S2292C43v46Ev,
  (VTBL_ENTRY)&_ZN7S2292C33v47Ev,
  (VTBL_ENTRY)&_ZN7S2292C33v48Ev,
  (VTBL_ENTRY)&_ZN7S2292C33v49Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v50Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v51Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v52Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v53Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v54Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v55Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v56Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v57Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v58Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v59Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v60Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v61Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v62Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v63Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v64Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v65Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v66Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v67Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v68Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v69Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v70Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v71Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v72Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v73Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v74Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v75Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v76Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v77Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v78Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v79Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v80Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v81Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v82Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v83Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v84Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v85Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v86Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v87Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v88Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v89Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v90Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v91Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v92Ev,
};
extern VTBL_ENTRY _ZTI7S2292C2[];
extern  VTBL_ENTRY _ZTV7S2292C2[];
Class_Descriptor cd_S2292C2 = {  "S2292C2", // class name
  bases_S2292C2, 2,
  &(vtc_S2292C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2292C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2292C2),53, //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  S2292C1  : S2292C2 {
  void *s2292c1f0;
  ::S5166C19_nt s2292c1f1;
  virtual  ~S2292C1(); // _ZN7S2292C1D1Ev
  virtual void  v1(); // _ZN7S2292C12v1Ev
  virtual void  v2(); // _ZN7S2292C12v2Ev
  virtual void  v3(); // _ZN7S2292C12v3Ev
  virtual void  v4(); // _ZN7S2292C12v4Ev
  virtual void  v5(); // _ZN7S2292C12v5Ev
  virtual void  v6(); // _ZN7S2292C12v6Ev
  virtual void  v7(); // _ZN7S2292C12v7Ev
  virtual void  v8(); // _ZN7S2292C12v8Ev
  virtual void  v9(); // _ZN7S2292C12v9Ev
  virtual void  v10(); // _ZN7S2292C13v10Ev
  virtual void  v11(); // _ZN7S2292C13v11Ev
  virtual void  v12(); // _ZN7S2292C13v12Ev
  virtual void  v13(); // _ZN7S2292C13v13Ev
  virtual void  v14(); // _ZN7S2292C13v14Ev
  virtual void  v15(); // _ZN7S2292C13v15Ev
  virtual void  v16(); // _ZN7S2292C13v16Ev
  virtual void  v17(); // _ZN7S2292C13v17Ev
  virtual void  v18(); // _ZN7S2292C13v18Ev
  virtual void  v19(); // _ZN7S2292C13v19Ev
  virtual void  v20(); // _ZN7S2292C13v20Ev
  virtual void  v21(); // _ZN7S2292C13v21Ev
  virtual void  v22(); // _ZN7S2292C13v22Ev
  virtual void  v23(); // _ZN7S2292C13v23Ev
  virtual void  v24(); // _ZN7S2292C13v24Ev
  virtual void  v25(); // _ZN7S2292C13v25Ev
  virtual void  v26(); // _ZN7S2292C13v26Ev
  virtual void  v27(); // _ZN7S2292C13v27Ev
  virtual void  v28(); // _ZN7S2292C13v28Ev
  virtual void  v29(); // _ZN7S2292C13v29Ev
  virtual void  v30(); // _ZN7S2292C13v30Ev
  virtual void  v31(); // _ZN7S2292C13v31Ev
  virtual void  v32(); // _ZN7S2292C13v32Ev
  virtual void  v33(); // _ZN7S2292C13v33Ev
  virtual void  v34(); // _ZN7S2292C13v34Ev
  virtual void  v35(); // _ZN7S2292C13v35Ev
  virtual void  v36(); // _ZN7S2292C13v36Ev
  virtual void  v37(); // _ZN7S2292C13v37Ev
  virtual void  v38(); // _ZN7S2292C13v38Ev
  virtual void  v39(); // _ZN7S2292C13v39Ev
  virtual void  v40(); // _ZN7S2292C13v40Ev
  virtual void  v41(); // _ZN7S2292C13v41Ev
  virtual void  v42(); // _ZN7S2292C13v42Ev
  virtual void  v43(); // _ZN7S2292C13v43Ev
  S2292C1(); // tgen
};
//SIG(1 S2292C1) C1{ BC2{ BC3{ BC4{ vd v44 v45 v46} vd v47 v48 v49 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FL[4]} Fc} vd 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} 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 Fp FC8{ m Fp Fi FC9{ m}}}


 S2292C1 ::~S2292C1(){ note_dtor("S2292C1", this);}
void  S2292C1 ::v1(){vfunc_called(this, "_ZN7S2292C12v1Ev");}
void  S2292C1 ::v2(){vfunc_called(this, "_ZN7S2292C12v2Ev");}
void  S2292C1 ::v3(){vfunc_called(this, "_ZN7S2292C12v3Ev");}
void  S2292C1 ::v4(){vfunc_called(this, "_ZN7S2292C12v4Ev");}
void  S2292C1 ::v5(){vfunc_called(this, "_ZN7S2292C12v5Ev");}
void  S2292C1 ::v6(){vfunc_called(this, "_ZN7S2292C12v6Ev");}
void  S2292C1 ::v7(){vfunc_called(this, "_ZN7S2292C12v7Ev");}
void  S2292C1 ::v8(){vfunc_called(this, "_ZN7S2292C12v8Ev");}
void  S2292C1 ::v9(){vfunc_called(this, "_ZN7S2292C12v9Ev");}
void  S2292C1 ::v10(){vfunc_called(this, "_ZN7S2292C13v10Ev");}
void  S2292C1 ::v11(){vfunc_called(this, "_ZN7S2292C13v11Ev");}
void  S2292C1 ::v12(){vfunc_called(this, "_ZN7S2292C13v12Ev");}
void  S2292C1 ::v13(){vfunc_called(this, "_ZN7S2292C13v13Ev");}
void  S2292C1 ::v14(){vfunc_called(this, "_ZN7S2292C13v14Ev");}
void  S2292C1 ::v15(){vfunc_called(this, "_ZN7S2292C13v15Ev");}
void  S2292C1 ::v16(){vfunc_called(this, "_ZN7S2292C13v16Ev");}
void  S2292C1 ::v17(){vfunc_called(this, "_ZN7S2292C13v17Ev");}
void  S2292C1 ::v18(){vfunc_called(this, "_ZN7S2292C13v18Ev");}
void  S2292C1 ::v19(){vfunc_called(this, "_ZN7S2292C13v19Ev");}
void  S2292C1 ::v20(){vfunc_called(this, "_ZN7S2292C13v20Ev");}
void  S2292C1 ::v21(){vfunc_called(this, "_ZN7S2292C13v21Ev");}
void  S2292C1 ::v22(){vfunc_called(this, "_ZN7S2292C13v22Ev");}
void  S2292C1 ::v23(){vfunc_called(this, "_ZN7S2292C13v23Ev");}
void  S2292C1 ::v24(){vfunc_called(this, "_ZN7S2292C13v24Ev");}
void  S2292C1 ::v25(){vfunc_called(this, "_ZN7S2292C13v25Ev");}
void  S2292C1 ::v26(){vfunc_called(this, "_ZN7S2292C13v26Ev");}
void  S2292C1 ::v27(){vfunc_called(this, "_ZN7S2292C13v27Ev");}
void  S2292C1 ::v28(){vfunc_called(this, "_ZN7S2292C13v28Ev");}
void  S2292C1 ::v29(){vfunc_called(this, "_ZN7S2292C13v29Ev");}
void  S2292C1 ::v30(){vfunc_called(this, "_ZN7S2292C13v30Ev");}
void  S2292C1 ::v31(){vfunc_called(this, "_ZN7S2292C13v31Ev");}
void  S2292C1 ::v32(){vfunc_called(this, "_ZN7S2292C13v32Ev");}
void  S2292C1 ::v33(){vfunc_called(this, "_ZN7S2292C13v33Ev");}
void  S2292C1 ::v34(){vfunc_called(this, "_ZN7S2292C13v34Ev");}
void  S2292C1 ::v35(){vfunc_called(this, "_ZN7S2292C13v35Ev");}
void  S2292C1 ::v36(){vfunc_called(this, "_ZN7S2292C13v36Ev");}
void  S2292C1 ::v37(){vfunc_called(this, "_ZN7S2292C13v37Ev");}
void  S2292C1 ::v38(){vfunc_called(this, "_ZN7S2292C13v38Ev");}
void  S2292C1 ::v39(){vfunc_called(this, "_ZN7S2292C13v39Ev");}
void  S2292C1 ::v40(){vfunc_called(this, "_ZN7S2292C13v40Ev");}
void  S2292C1 ::v41(){vfunc_called(this, "_ZN7S2292C13v41Ev");}
void  S2292C1 ::v42(){vfunc_called(this, "_ZN7S2292C13v42Ev");}
void  S2292C1 ::v43(){vfunc_called(this, "_ZN7S2292C13v43Ev");}
S2292C1 ::S2292C1(){ note_ctor("S2292C1", this);} // tgen

static void Test_S2292C1()
{
  extern Class_Descriptor cd_S2292C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S2292C1, buf);
    S2292C1 *dp, &lv = *(dp=new (buf) S2292C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S2292C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2292C1)");
    check_base_class_offset(lv, (S2292C4*)(S2292C3*)(S2292C2*), 0, "S2292C1");
    check_base_class_offset(lv, (S2292C3*)(S2292C2*), 0, "S2292C1");
    check_base_class_offset(lv, (S2292C2*), 0, "S2292C1");
    check_field_offset(lv, s2292c1f0, ABISELECT(72,56), "S2292C1.s2292c1f0");
    check_field_offset(lv, s2292c1f1, ABISELECT(80,60), "S2292C1.s2292c1f1");
    test_class_info(&lv, &cd_S2292C1);
    dp->~S2292C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2292C1(Test_S2292C1, "S2292C1", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S2292C1C1Ev();
extern void _ZN7S2292C1D1Ev();
Name_Map name_map_S2292C1[] = {
  NSPAIR(_ZN7S2292C1C1Ev),
  NSPAIR(_ZN7S2292C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2292C4;
extern VTBL_ENTRY _ZTI7S2292C4[];
extern  VTBL_ENTRY _ZTV7S2292C4[];
extern Class_Descriptor cd_S2292C3;
extern VTBL_ENTRY _ZTI7S2292C3[];
extern  VTBL_ENTRY _ZTV7S2292C3[];
extern Class_Descriptor cd_S2292C2;
extern VTBL_ENTRY _ZTI7S2292C2[];
extern  VTBL_ENTRY _ZTV7S2292C2[];
static Base_Class bases_S2292C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2292C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2292C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2292C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2292C1[];
extern void _ZN7S2292C1D1Ev();
extern void _ZN7S2292C1D0Ev();
extern void _ZN7S2292C43v44Ev();
extern void _ZN7S2292C43v45Ev();
extern void _ZN7S2292C43v46Ev();
extern void _ZN7S2292C33v47Ev();
extern void _ZN7S2292C33v48Ev();
extern void _ZN7S2292C33v49Ev();
extern void _ZN7S2292C23v50Ev();
extern void _ZN7S2292C23v51Ev();
extern void _ZN7S2292C23v52Ev();
extern void _ZN7S2292C23v53Ev();
extern void _ZN7S2292C23v54Ev();
extern void _ZN7S2292C23v55Ev();
extern void _ZN7S2292C23v56Ev();
extern void _ZN7S2292C23v57Ev();
extern void _ZN7S2292C23v58Ev();
extern void _ZN7S2292C23v59Ev();
extern void _ZN7S2292C23v60Ev();
extern void _ZN7S2292C23v61Ev();
extern void _ZN7S2292C23v62Ev();
extern void _ZN7S2292C23v63Ev();
extern void _ZN7S2292C23v64Ev();
extern void _ZN7S2292C23v65Ev();
extern void _ZN7S2292C23v66Ev();
extern void _ZN7S2292C23v67Ev();
extern void _ZN7S2292C23v68Ev();
extern void _ZN7S2292C23v69Ev();
extern void _ZN7S2292C23v70Ev();
extern void _ZN7S2292C23v71Ev();
extern void _ZN7S2292C23v72Ev();
extern void _ZN7S2292C23v73Ev();
extern void _ZN7S2292C23v74Ev();
extern void _ZN7S2292C23v75Ev();
extern void _ZN7S2292C23v76Ev();
extern void _ZN7S2292C23v77Ev();
extern void _ZN7S2292C23v78Ev();
extern void _ZN7S2292C23v79Ev();
extern void _ZN7S2292C23v80Ev();
extern void _ZN7S2292C23v81Ev();
extern void _ZN7S2292C23v82Ev();
extern void _ZN7S2292C23v83Ev();
extern void _ZN7S2292C23v84Ev();
extern void _ZN7S2292C23v85Ev();
extern void _ZN7S2292C23v86Ev();
extern void _ZN7S2292C23v87Ev();
extern void _ZN7S2292C23v88Ev();
extern void _ZN7S2292C23v89Ev();
extern void _ZN7S2292C23v90Ev();
extern void _ZN7S2292C23v91Ev();
extern void _ZN7S2292C23v92Ev();
extern void _ZN7S2292C12v1Ev();
extern void _ZN7S2292C12v2Ev();
extern void _ZN7S2292C12v3Ev();
extern void _ZN7S2292C12v4Ev();
extern void _ZN7S2292C12v5Ev();
extern void _ZN7S2292C12v6Ev();
extern void _ZN7S2292C12v7Ev();
extern void _ZN7S2292C12v8Ev();
extern void _ZN7S2292C12v9Ev();
extern void _ZN7S2292C13v10Ev();
extern void _ZN7S2292C13v11Ev();
extern void _ZN7S2292C13v12Ev();
extern void _ZN7S2292C13v13Ev();
extern void _ZN7S2292C13v14Ev();
extern void _ZN7S2292C13v15Ev();
extern void _ZN7S2292C13v16Ev();
extern void _ZN7S2292C13v17Ev();
extern void _ZN7S2292C13v18Ev();
extern void _ZN7S2292C13v19Ev();
extern void _ZN7S2292C13v20Ev();
extern void _ZN7S2292C13v21Ev();
extern void _ZN7S2292C13v22Ev();
extern void _ZN7S2292C13v23Ev();
extern void _ZN7S2292C13v24Ev();
extern void _ZN7S2292C13v25Ev();
extern void _ZN7S2292C13v26Ev();
extern void _ZN7S2292C13v27Ev();
extern void _ZN7S2292C13v28Ev();
extern void _ZN7S2292C13v29Ev();
extern void _ZN7S2292C13v30Ev();
extern void _ZN7S2292C13v31Ev();
extern void _ZN7S2292C13v32Ev();
extern void _ZN7S2292C13v33Ev();
extern void _ZN7S2292C13v34Ev();
extern void _ZN7S2292C13v35Ev();
extern void _ZN7S2292C13v36Ev();
extern void _ZN7S2292C13v37Ev();
extern void _ZN7S2292C13v38Ev();
extern void _ZN7S2292C13v39Ev();
extern void _ZN7S2292C13v40Ev();
extern void _ZN7S2292C13v41Ev();
extern void _ZN7S2292C13v42Ev();
extern void _ZN7S2292C13v43Ev();
static  VTBL_ENTRY vtc_S2292C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2292C1[0]),
  (VTBL_ENTRY)&_ZN7S2292C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2292C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2292C43v44Ev,
  (VTBL_ENTRY)&_ZN7S2292C43v45Ev,
  (VTBL_ENTRY)&_ZN7S2292C43v46Ev,
  (VTBL_ENTRY)&_ZN7S2292C33v47Ev,
  (VTBL_ENTRY)&_ZN7S2292C33v48Ev,
  (VTBL_ENTRY)&_ZN7S2292C33v49Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v50Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v51Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v52Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v53Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v54Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v55Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v56Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v57Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v58Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v59Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v60Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v61Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v62Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v63Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v64Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v65Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v66Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v67Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v68Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v69Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v70Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v71Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v72Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v73Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v74Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v75Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v76Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v77Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v78Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v79Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v80Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v81Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v82Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v83Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v84Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v85Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v86Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v87Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v88Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v89Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v90Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v91Ev,
  (VTBL_ENTRY)&_ZN7S2292C23v92Ev,
  (VTBL_ENTRY)&_ZN7S2292C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2292C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2292C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2292C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2292C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2292C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2292C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2292C12v8Ev,
  (VTBL_ENTRY)&_ZN7S2292C12v9Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v10Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v11Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v12Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v13Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v14Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v15Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v16Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v17Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v18Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v19Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v20Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v21Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v22Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v23Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v24Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v25Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v26Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v27Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v28Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v29Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v30Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v31Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v32Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v33Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v34Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v35Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v36Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v37Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v38Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v39Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v40Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v41Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v42Ev,
  (VTBL_ENTRY)&_ZN7S2292C13v43Ev,
};
extern VTBL_ENTRY _ZTI7S2292C1[];
extern  VTBL_ENTRY _ZTV7S2292C1[];
Class_Descriptor cd_S2292C1 = {  "S2292C1", // class name
  bases_S2292C1, 3,
  &(vtc_S2292C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S2292C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2292C1),96, //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  S2359C4  {
  ::S5166C19_nt s2359c4f0;
  int s2359c4f1[2];
  char s2359c4f2;
  virtual  ~S2359C4(); // _ZN7S2359C4D1Ev
  virtual void  v5(); // _ZN7S2359C42v5Ev
  virtual void  v6(); // _ZN7S2359C42v6Ev
  virtual void  v7(); // _ZN7S2359C42v7Ev
  S2359C4(); // tgen
};
//SIG(-1 S2359C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2359C4 ::~S2359C4(){ note_dtor("S2359C4", this);}
void  S2359C4 ::v5(){vfunc_called(this, "_ZN7S2359C42v5Ev");}
void  S2359C4 ::v6(){vfunc_called(this, "_ZN7S2359C42v6Ev");}
void  S2359C4 ::v7(){vfunc_called(this, "_ZN7S2359C42v7Ev");}
S2359C4 ::S2359C4(){ note_ctor("S2359C4", this);} // tgen

static void Test_S2359C4()
{
  extern Class_Descriptor cd_S2359C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2359C4, buf);
    S2359C4 *dp, &lv = *(dp=new (buf) S2359C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2359C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2359C4)");
    check_field_offset(lv, s2359c4f0, ABISELECT(8,4), "S2359C4.s2359c4f0");
    check_field_offset(lv, s2359c4f1, ABISELECT(24,16), "S2359C4.s2359c4f1");
    check_field_offset(lv, s2359c4f2, ABISELECT(32,24), "S2359C4.s2359c4f2");
    test_class_info(&lv, &cd_S2359C4);
    dp->~S2359C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2359C4(Test_S2359C4, "S2359C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2359C4C1Ev();
extern void _ZN7S2359C4D1Ev();
Name_Map name_map_S2359C4[] = {
  NSPAIR(_ZN7S2359C4C1Ev),
  NSPAIR(_ZN7S2359C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2359C4[];
extern void _ZN7S2359C4D1Ev();
extern void _ZN7S2359C4D0Ev();
extern void _ZN7S2359C42v5Ev();
extern void _ZN7S2359C42v6Ev();
extern void _ZN7S2359C42v7Ev();
static  VTBL_ENTRY vtc_S2359C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2359C4[0]),
  (VTBL_ENTRY)&_ZN7S2359C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2359C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2359C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2359C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2359C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S2359C4[];
extern  VTBL_ENTRY _ZTV7S2359C4[];
Class_Descriptor cd_S2359C4 = {  "S2359C4", // class name
  0,0,//no base classes
  &(vtc_S2359C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2359C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2359C4),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  S2359C7  {
  virtual  ~S2359C7(); // _ZN7S2359C7D1Ev
  virtual void  v8(); // _ZN7S2359C72v8Ev
  virtual void  v9(); // _ZN7S2359C72v9Ev
  virtual void  v10(); // _ZN7S2359C73v10Ev
  S2359C7(); // tgen
};
//SIG(-1 S2359C7) C1{ vd v1 v2 v3}


 S2359C7 ::~S2359C7(){ note_dtor("S2359C7", this);}
void  S2359C7 ::v8(){vfunc_called(this, "_ZN7S2359C72v8Ev");}
void  S2359C7 ::v9(){vfunc_called(this, "_ZN7S2359C72v9Ev");}
void  S2359C7 ::v10(){vfunc_called(this, "_ZN7S2359C73v10Ev");}
S2359C7 ::S2359C7(){ note_ctor("S2359C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2359C7C1Ev();
extern void _ZN7S2359C7D1Ev();
Name_Map name_map_S2359C7[] = {
  NSPAIR(_ZN7S2359C7C1Ev),
  NSPAIR(_ZN7S2359C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2359C7[];
extern void _ZN7S2359C7D1Ev();
extern void _ZN7S2359C7D0Ev();
extern void _ZN7S2359C72v8Ev();
extern void _ZN7S2359C72v9Ev();
extern void _ZN7S2359C73v10Ev();
static  VTBL_ENTRY vtc_S2359C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2359C7[0]),
  (VTBL_ENTRY)&_ZN7S2359C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2359C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2359C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2359C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2359C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2359C7[];
extern  VTBL_ENTRY _ZTV7S2359C7[];
Class_Descriptor cd_S2359C7 = {  "S2359C7", // class name
  0,0,//no base classes
  &(vtc_S2359C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2359C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2359C7),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  S2359C3  : S2359C4 , S2359C7 {
  void *s2359c3f0;
  char s2359c3f1;
  int s2359c3f2;
  virtual  ~S2359C3(); // _ZN7S2359C3D1Ev
  virtual void  v11(); // _ZN7S2359C33v11Ev
  virtual void  v12(); // _ZN7S2359C33v12Ev
  virtual void  v13(); // _ZN7S2359C33v13Ev
  virtual void  v14(); // _ZN7S2359C33v14Ev
  virtual void  v15(); // _ZN7S2359C33v15Ev
  virtual void  v16(); // _ZN7S2359C33v16Ev
  virtual void  v17(); // _ZN7S2359C33v17Ev
  virtual void  v18(); // _ZN7S2359C33v18Ev
  virtual void  v19(); // _ZN7S2359C33v19Ev
  virtual void  v20(); // _ZN7S2359C33v20Ev
  S2359C3(); // tgen
};
//SIG(-1 S2359C3) C1{ BC2{ vd v11 v12 v13 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fc Fi}


 S2359C3 ::~S2359C3(){ note_dtor("S2359C3", this);}
void  S2359C3 ::v11(){vfunc_called(this, "_ZN7S2359C33v11Ev");}
void  S2359C3 ::v12(){vfunc_called(this, "_ZN7S2359C33v12Ev");}
void  S2359C3 ::v13(){vfunc_called(this, "_ZN7S2359C33v13Ev");}
void  S2359C3 ::v14(){vfunc_called(this, "_ZN7S2359C33v14Ev");}
void  S2359C3 ::v15(){vfunc_called(this, "_ZN7S2359C33v15Ev");}
void  S2359C3 ::v16(){vfunc_called(this, "_ZN7S2359C33v16Ev");}
void  S2359C3 ::v17(){vfunc_called(this, "_ZN7S2359C33v17Ev");}
void  S2359C3 ::v18(){vfunc_called(this, "_ZN7S2359C33v18Ev");}
void  S2359C3 ::v19(){vfunc_called(this, "_ZN7S2359C33v19Ev");}
void  S2359C3 ::v20(){vfunc_called(this, "_ZN7S2359C33v20Ev");}
S2359C3 ::S2359C3(){ note_ctor("S2359C3", this);} // tgen

static void Test_S2359C3()
{
  extern Class_Descriptor cd_S2359C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S2359C3, buf);
    S2359C3 *dp, &lv = *(dp=new (buf) S2359C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S2359C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2359C3)");
    check_base_class_offset(lv, (S2359C4*), 0, "S2359C3");
    check_base_class_offset(lv, (S2359C7*), ABISELECT(40,28), "S2359C3");
    check_field_offset(lv, s2359c3f0, ABISELECT(48,32), "S2359C3.s2359c3f0");
    check_field_offset(lv, s2359c3f1, ABISELECT(56,36), "S2359C3.s2359c3f1");
    check_field_offset(lv, s2359c3f2, ABISELECT(60,40), "S2359C3.s2359c3f2");
    test_class_info(&lv, &cd_S2359C3);
    dp->~S2359C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2359C3(Test_S2359C3, "S2359C3", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S2359C3C1Ev();
extern void _ZN7S2359C3D1Ev();
Name_Map name_map_S2359C3[] = {
  NSPAIR(_ZN7S2359C3C1Ev),
  NSPAIR(_ZN7S2359C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2359C4;
extern VTBL_ENTRY _ZTI7S2359C4[];
extern  VTBL_ENTRY _ZTV7S2359C4[];
extern Class_Descriptor cd_S2359C7;
extern VTBL_ENTRY _ZTI7S2359C7[];
extern  VTBL_ENTRY _ZTV7S2359C7[];
static Base_Class bases_S2359C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2359C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2359C7,    ABISELECT(40,28), //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2359C3[];
extern void _ZN7S2359C3D1Ev();
extern void _ZN7S2359C3D0Ev();
extern void _ZN7S2359C42v5Ev();
extern void _ZN7S2359C42v6Ev();
extern void _ZN7S2359C42v7Ev();
extern void _ZN7S2359C33v11Ev();
extern void _ZN7S2359C33v12Ev();
extern void _ZN7S2359C33v13Ev();
extern void _ZN7S2359C33v14Ev();
extern void _ZN7S2359C33v15Ev();
extern void _ZN7S2359C33v16Ev();
extern void _ZN7S2359C33v17Ev();
extern void _ZN7S2359C33v18Ev();
extern void _ZN7S2359C33v19Ev();
extern void _ZN7S2359C33v20Ev();
extern void ABISELECT(_ZThn40_N7S2359C3D1Ev,_ZThn28_N7S2359C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2359C3D0Ev,_ZThn28_N7S2359C3D0Ev)();
extern void _ZN7S2359C72v8Ev();
extern void _ZN7S2359C72v9Ev();
extern void _ZN7S2359C73v10Ev();
static  VTBL_ENTRY vtc_S2359C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2359C3[0]),
  (VTBL_ENTRY)&_ZN7S2359C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2359C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2359C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2359C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2359C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v20Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2359C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2359C3D1Ev,_ZThn28_N7S2359C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2359C3D0Ev,_ZThn28_N7S2359C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2359C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2359C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2359C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2359C3[];
extern  VTBL_ENTRY _ZTV7S2359C3[];
Class_Descriptor cd_S2359C3 = {  "S2359C3", // class name
  bases_S2359C3, 2,
  &(vtc_S2359C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S2359C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2359C3),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  S2359C10  {
  virtual  ~S2359C10(); // _ZN8S2359C10D1Ev
  virtual void  v21(); // _ZN8S2359C103v21Ev
  virtual void  v22(); // _ZN8S2359C103v22Ev
  virtual void  v23(); // _ZN8S2359C103v23Ev
  S2359C10(); // tgen
};
//SIG(-1 S2359C10) C1{ vd v1 v2 v3}


 S2359C10 ::~S2359C10(){ note_dtor("S2359C10", this);}
void  S2359C10 ::v21(){vfunc_called(this, "_ZN8S2359C103v21Ev");}
void  S2359C10 ::v22(){vfunc_called(this, "_ZN8S2359C103v22Ev");}
void  S2359C10 ::v23(){vfunc_called(this, "_ZN8S2359C103v23Ev");}
S2359C10 ::S2359C10(){ note_ctor("S2359C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2359C10C1Ev();
extern void _ZN8S2359C10D1Ev();
Name_Map name_map_S2359C10[] = {
  NSPAIR(_ZN8S2359C10C1Ev),
  NSPAIR(_ZN8S2359C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2359C10[];
extern void _ZN8S2359C10D1Ev();
extern void _ZN8S2359C10D0Ev();
extern void _ZN8S2359C103v21Ev();
extern void _ZN8S2359C103v22Ev();
extern void _ZN8S2359C103v23Ev();
static  VTBL_ENTRY vtc_S2359C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2359C10[0]),
  (VTBL_ENTRY)&_ZN8S2359C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2359C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2359C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2359C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2359C103v23Ev,
};
extern VTBL_ENTRY _ZTI8S2359C10[];
extern  VTBL_ENTRY _ZTV8S2359C10[];
Class_Descriptor cd_S2359C10 = {  "S2359C10", // class name
  0,0,//no base classes
  &(vtc_S2359C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2359C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2359C10),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  S2359C9  : S2359C10 {
  ::S5166C36 s2359c9f0;
  ::S2355C13_nt s2359c9f1;
  char s2359c9f2;
  virtual  ~S2359C9(); // _ZN7S2359C9D1Ev
  virtual void  v24(); // _ZN7S2359C93v24Ev
  virtual void  v25(); // _ZN7S2359C93v25Ev
  virtual void  v26(); // _ZN7S2359C93v26Ev
  S2359C9(); // tgen
};
//SIG(-1 S2359C9) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2359C9 ::~S2359C9(){ note_dtor("S2359C9", this);}
void  S2359C9 ::v24(){vfunc_called(this, "_ZN7S2359C93v24Ev");}
void  S2359C9 ::v25(){vfunc_called(this, "_ZN7S2359C93v25Ev");}
void  S2359C9 ::v26(){vfunc_called(this, "_ZN7S2359C93v26Ev");}
S2359C9 ::S2359C9(){ note_ctor("S2359C9", this);} // tgen

static void Test_S2359C9()
{
  extern Class_Descriptor cd_S2359C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2359C9, buf);
    S2359C9 *dp, &lv = *(dp=new (buf) S2359C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2359C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2359C9)");
    check_base_class_offset(lv, (S2359C10*), 0, "S2359C9");
    check_field_offset(lv, s2359c9f0, ABISELECT(8,4), "S2359C9.s2359c9f0");
    check_field_offset(lv, s2359c9f1, ABISELECT(32,20), "S2359C9.s2359c9f1");
    check_field_offset(lv, s2359c9f2, ABISELECT(64,52), "S2359C9.s2359c9f2");
    test_class_info(&lv, &cd_S2359C9);
    dp->~S2359C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2359C9(Test_S2359C9, "S2359C9", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2359C9C1Ev();
extern void _ZN7S2359C9D1Ev();
Name_Map name_map_S2359C9[] = {
  NSPAIR(_ZN7S2359C9C1Ev),
  NSPAIR(_ZN7S2359C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2359C10;
extern VTBL_ENTRY _ZTI8S2359C10[];
extern  VTBL_ENTRY _ZTV8S2359C10[];
static Base_Class bases_S2359C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2359C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2359C9[];
extern void _ZN7S2359C9D1Ev();
extern void _ZN7S2359C9D0Ev();
extern void _ZN8S2359C103v21Ev();
extern void _ZN8S2359C103v22Ev();
extern void _ZN8S2359C103v23Ev();
extern void _ZN7S2359C93v24Ev();
extern void _ZN7S2359C93v25Ev();
extern void _ZN7S2359C93v26Ev();
static  VTBL_ENTRY vtc_S2359C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2359C9[0]),
  (VTBL_ENTRY)&_ZN7S2359C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2359C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2359C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2359C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2359C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2359C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2359C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2359C93v26Ev,
};
extern VTBL_ENTRY _ZTI7S2359C9[];
extern  VTBL_ENTRY _ZTV7S2359C9[];
Class_Descriptor cd_S2359C9 = {  "S2359C9", // class name
  bases_S2359C9, 1,
  &(vtc_S2359C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2359C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2359C9),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  S2359C8  : S2359C9 {
  virtual  ~S2359C8(); // _ZN7S2359C8D1Ev
  virtual void  v27(); // _ZN7S2359C83v27Ev
  virtual void  v28(); // _ZN7S2359C83v28Ev
  virtual void  v29(); // _ZN7S2359C83v29Ev
  virtual void  v30(); // _ZN7S2359C83v30Ev
  S2359C8(); // tgen
};
//SIG(-1 S2359C8) C1{ BC2{ BC3{ vd v5 v6 v7} vd v8 v9 v10 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4}


 S2359C8 ::~S2359C8(){ note_dtor("S2359C8", this);}
void  S2359C8 ::v27(){vfunc_called(this, "_ZN7S2359C83v27Ev");}
void  S2359C8 ::v28(){vfunc_called(this, "_ZN7S2359C83v28Ev");}
void  S2359C8 ::v29(){vfunc_called(this, "_ZN7S2359C83v29Ev");}
void  S2359C8 ::v30(){vfunc_called(this, "_ZN7S2359C83v30Ev");}
S2359C8 ::S2359C8(){ note_ctor("S2359C8", this);} // tgen

static void Test_S2359C8()
{
  extern Class_Descriptor cd_S2359C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2359C8, buf);
    S2359C8 *dp, &lv = *(dp=new (buf) S2359C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2359C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2359C8)");
    check_base_class_offset(lv, (S2359C10*)(S2359C9*), 0, "S2359C8");
    check_base_class_offset(lv, (S2359C9*), 0, "S2359C8");
    test_class_info(&lv, &cd_S2359C8);
    dp->~S2359C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2359C8(Test_S2359C8, "S2359C8", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2359C8C1Ev();
extern void _ZN7S2359C8D1Ev();
Name_Map name_map_S2359C8[] = {
  NSPAIR(_ZN7S2359C8C1Ev),
  NSPAIR(_ZN7S2359C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2359C10;
extern VTBL_ENTRY _ZTI8S2359C10[];
extern  VTBL_ENTRY _ZTV8S2359C10[];
extern Class_Descriptor cd_S2359C9;
extern VTBL_ENTRY _ZTI7S2359C9[];
extern  VTBL_ENTRY _ZTV7S2359C9[];
static Base_Class bases_S2359C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2359C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2359C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2359C8[];
extern void _ZN7S2359C8D1Ev();
extern void _ZN7S2359C8D0Ev();
extern void _ZN8S2359C103v21Ev();
extern void _ZN8S2359C103v22Ev();
extern void _ZN8S2359C103v23Ev();
extern void _ZN7S2359C93v24Ev();
extern void _ZN7S2359C93v25Ev();
extern void _ZN7S2359C93v26Ev();
extern void _ZN7S2359C83v27Ev();
extern void _ZN7S2359C83v28Ev();
extern void _ZN7S2359C83v29Ev();
extern void _ZN7S2359C83v30Ev();
static  VTBL_ENTRY vtc_S2359C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2359C8[0]),
  (VTBL_ENTRY)&_ZN7S2359C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2359C8D0Ev,
  (VTBL_ENTRY)&_ZN8S2359C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2359C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2359C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2359C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2359C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2359C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2359C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2359C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2359C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2359C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2359C8[];
extern  VTBL_ENTRY _ZTV7S2359C8[];
Class_Descriptor cd_S2359C8 = {  "S2359C8", // class name
  bases_S2359C8, 2,
  &(vtc_S2359C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2359C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2359C8),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2359C2  : S2359C3 , S2359C8 {
  int s2359c2f0[3];
  char s2359c2f1;
  ::S5166C24 s2359c2f2;
  virtual  ~S2359C2(); // _ZN7S2359C2D1Ev
  virtual void  v31(); // _ZN7S2359C23v31Ev
  virtual void  v32(); // _ZN7S2359C23v32Ev
  virtual void  v33(); // _ZN7S2359C23v33Ev
  virtual void  v34(); // _ZN7S2359C23v34Ev
  virtual void  v35(); // _ZN7S2359C23v35Ev
  virtual void  v36(); // _ZN7S2359C23v36Ev
  S2359C2(); // tgen
};
//SIG(-1 S2359C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd v10 v11 v12} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp Fc Fi} BC7{ BC8{ BC9{ vd v23 v24 v25} vd v26 v27 v28 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m FL[4]} Fc} vd v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 Fi[3] Fc FC13{ BC14{ m Fp Fi FC15{ m} FC16{ m}}}}


 S2359C2 ::~S2359C2(){ note_dtor("S2359C2", this);}
void  S2359C2 ::v31(){vfunc_called(this, "_ZN7S2359C23v31Ev");}
void  S2359C2 ::v32(){vfunc_called(this, "_ZN7S2359C23v32Ev");}
void  S2359C2 ::v33(){vfunc_called(this, "_ZN7S2359C23v33Ev");}
void  S2359C2 ::v34(){vfunc_called(this, "_ZN7S2359C23v34Ev");}
void  S2359C2 ::v35(){vfunc_called(this, "_ZN7S2359C23v35Ev");}
void  S2359C2 ::v36(){vfunc_called(this, "_ZN7S2359C23v36Ev");}
S2359C2 ::S2359C2(){ note_ctor("S2359C2", this);} // tgen

static void Test_S2359C2()
{
  extern Class_Descriptor cd_S2359C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,33)];
    init_test(&cd_S2359C2, buf);
    S2359C2 *dp, &lv = *(dp=new (buf) S2359C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,128), "sizeof(S2359C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2359C2)");
    check_base_class_offset(lv, (S2359C4*)(S2359C3*), 0, "S2359C2");
    check_base_class_offset(lv, (S2359C7*)(S2359C3*), ABISELECT(40,28), "S2359C2");
    check_base_class_offset(lv, (S2359C3*), 0, "S2359C2");
    check_base_class_offset(lv, (S2359C10*)(S2359C9*)(S2359C8*), ABISELECT(64,44), "S2359C2");
    check_base_class_offset(lv, (S2359C9*)(S2359C8*), ABISELECT(64,44), "S2359C2");
    check_base_class_offset(lv, (S2359C8*), ABISELECT(64,44), "S2359C2");
    check_field_offset(lv, s2359c2f0, ABISELECT(132,100), "S2359C2.s2359c2f0");
    check_field_offset(lv, s2359c2f1, ABISELECT(144,112), "S2359C2.s2359c2f1");
    check_field_offset(lv, s2359c2f2, ABISELECT(152,116), "S2359C2.s2359c2f2");
    test_class_info(&lv, &cd_S2359C2);
    dp->~S2359C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2359C2(Test_S2359C2, "S2359C2", ABISELECT(168,128));

#else // __cplusplus

extern void _ZN7S2359C2C1Ev();
extern void _ZN7S2359C2D1Ev();
Name_Map name_map_S2359C2[] = {
  NSPAIR(_ZN7S2359C2C1Ev),
  NSPAIR(_ZN7S2359C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2359C4;
extern VTBL_ENTRY _ZTI7S2359C4[];
extern  VTBL_ENTRY _ZTV7S2359C4[];
extern Class_Descriptor cd_S2359C7;
extern VTBL_ENTRY _ZTI7S2359C7[];
extern  VTBL_ENTRY _ZTV7S2359C7[];
extern Class_Descriptor cd_S2359C3;
extern VTBL_ENTRY _ZTI7S2359C3[];
extern  VTBL_ENTRY _ZTV7S2359C3[];
extern Class_Descriptor cd_S2359C10;
extern VTBL_ENTRY _ZTI8S2359C10[];
extern  VTBL_ENTRY _ZTV8S2359C10[];
extern Class_Descriptor cd_S2359C9;
extern VTBL_ENTRY _ZTI7S2359C9[];
extern  VTBL_ENTRY _ZTV7S2359C9[];
extern Class_Descriptor cd_S2359C8;
extern VTBL_ENTRY _ZTI7S2359C8[];
extern  VTBL_ENTRY _ZTV7S2359C8[];
static Base_Class bases_S2359C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2359C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2359C7,    ABISELECT(40,28), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2359C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2359C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2359C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2359C8,    ABISELECT(64,44), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2359C2[];
extern void _ZN7S2359C2D1Ev();
extern void _ZN7S2359C2D0Ev();
extern void _ZN7S2359C42v5Ev();
extern void _ZN7S2359C42v6Ev();
extern void _ZN7S2359C42v7Ev();
extern void _ZN7S2359C33v11Ev();
extern void _ZN7S2359C33v12Ev();
extern void _ZN7S2359C33v13Ev();
extern void _ZN7S2359C33v14Ev();
extern void _ZN7S2359C33v15Ev();
extern void _ZN7S2359C33v16Ev();
extern void _ZN7S2359C33v17Ev();
extern void _ZN7S2359C33v18Ev();
extern void _ZN7S2359C33v19Ev();
extern void _ZN7S2359C33v20Ev();
extern void _ZN7S2359C23v31Ev();
extern void _ZN7S2359C23v32Ev();
extern void _ZN7S2359C23v33Ev();
extern void _ZN7S2359C23v34Ev();
extern void _ZN7S2359C23v35Ev();
extern void _ZN7S2359C23v36Ev();
extern void ABISELECT(_ZThn40_N7S2359C2D1Ev,_ZThn28_N7S2359C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2359C2D0Ev,_ZThn28_N7S2359C2D0Ev)();
extern void _ZN7S2359C72v8Ev();
extern void _ZN7S2359C72v9Ev();
extern void _ZN7S2359C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2359C2D1Ev,_ZThn44_N7S2359C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S2359C2D0Ev,_ZThn44_N7S2359C2D0Ev)();
extern void _ZN8S2359C103v21Ev();
extern void _ZN8S2359C103v22Ev();
extern void _ZN8S2359C103v23Ev();
extern void _ZN7S2359C93v24Ev();
extern void _ZN7S2359C93v25Ev();
extern void _ZN7S2359C93v26Ev();
extern void _ZN7S2359C83v27Ev();
extern void _ZN7S2359C83v28Ev();
extern void _ZN7S2359C83v29Ev();
extern void _ZN7S2359C83v30Ev();
static  VTBL_ENTRY vtc_S2359C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2359C2[0]),
  (VTBL_ENTRY)&_ZN7S2359C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2359C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2359C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2359C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2359C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2359C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2359C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2359C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2359C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2359C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2359C23v36Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2359C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2359C2D1Ev,_ZThn28_N7S2359C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2359C2D0Ev,_ZThn28_N7S2359C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2359C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2359C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2359C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2359C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2359C2D1Ev,_ZThn44_N7S2359C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2359C2D0Ev,_ZThn44_N7S2359C2D0Ev),
  (VTBL_ENTRY)&_ZN8S2359C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2359C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2359C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2359C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2359C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2359C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2359C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2359C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2359C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2359C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2359C2[];
extern  VTBL_ENTRY _ZTV7S2359C2[];
Class_Descriptor cd_S2359C2 = {  "S2359C2", // class name
  bases_S2359C2, 6,
  &(vtc_S2359C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,128), // object size
  NSPAIRA(_ZTI7S2359C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2359C2),44, //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  S2359C1  : S2359C2 {
  ::S2358C18_nt s2359c1f0;
  ::S2355C19_nt s2359c1f1;
  int s2359c1f2;
  ::S5166C28_nt s2359c1f3;
  void *s2359c1f4;
  virtual  ~S2359C1(); // _ZN7S2359C1D1Ev
  virtual void  v1(); // _ZN7S2359C12v1Ev
  virtual void  v2(); // _ZN7S2359C12v2Ev
  virtual void  v3(); // _ZN7S2359C12v3Ev
  virtual void  v4(); // _ZN7S2359C12v4Ev
  S2359C1(); // tgen
};
//SIG(1 S2359C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd v8 v9 v10} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp Fc Fi} BC8{ BC9{ BC10{ vd v21 v22 v23} vd v24 v25 v26 FC11{ m Fp Fi[2] FC12{ m}} FC13{ m FL[4]} Fc} vd v27 v28 v29 v30} vd v31 v32 v33 v34 v35 v36 Fi[3] Fc FC14{ BC15{ m Fp Fi FC16{ m} FC17{ m}}}} vd v1 v2 v3 v4 FC18{ vd v37 v38 v39 v40 v41 Fp} FC19{ BC20{ vd v43 FC21{ m FC15} Fp[3] Fc} v42 Fp} Fi FC22{ m Fp Fi[2] FC17} Fp}


 S2359C1 ::~S2359C1(){ note_dtor("S2359C1", this);}
void  S2359C1 ::v1(){vfunc_called(this, "_ZN7S2359C12v1Ev");}
void  S2359C1 ::v2(){vfunc_called(this, "_ZN7S2359C12v2Ev");}
void  S2359C1 ::v3(){vfunc_called(this, "_ZN7S2359C12v3Ev");}
void  S2359C1 ::v4(){vfunc_called(this, "_ZN7S2359C12v4Ev");}
S2359C1 ::S2359C1(){ note_ctor("S2359C1", this);} // tgen

static void Test_S2359C1()
{
  extern Class_Descriptor cd_S2359C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,50)];
    init_test(&cd_S2359C1, buf);
    S2359C1 *dp, &lv = *(dp=new (buf) S2359C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,196), "sizeof(S2359C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2359C1)");
    check_base_class_offset(lv, (S2359C4*)(S2359C3*)(S2359C2*), 0, "S2359C1");
    check_base_class_offset(lv, (S2359C7*)(S2359C3*)(S2359C2*), ABISELECT(40,28), "S2359C1");
    check_base_class_offset(lv, (S2359C3*)(S2359C2*), 0, "S2359C1");
    check_base_class_offset(lv, (S2359C10*)(S2359C9*)(S2359C8*)(S2359C2*), ABISELECT(64,44), "S2359C1");
    check_base_class_offset(lv, (S2359C9*)(S2359C8*)(S2359C2*), ABISELECT(64,44), "S2359C1");
    check_base_class_offset(lv, (S2359C8*)(S2359C2*), ABISELECT(64,44), "S2359C1");
    check_base_class_offset(lv, (S2359C2*), 0, "S2359C1");
    check_field_offset(lv, s2359c1f0, ABISELECT(168,128), "S2359C1.s2359c1f0");
    check_field_offset(lv, s2359c1f1, ABISELECT(184,136), "S2359C1.s2359c1f1");
    check_field_offset(lv, s2359c1f2, ABISELECT(248,172), "S2359C1.s2359c1f2");
    check_field_offset(lv, s2359c1f3, ABISELECT(256,176), "S2359C1.s2359c1f3");
    check_field_offset(lv, s2359c1f4, ABISELECT(280,192), "S2359C1.s2359c1f4");
    test_class_info(&lv, &cd_S2359C1);
    dp->~S2359C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2359C1(Test_S2359C1, "S2359C1", ABISELECT(288,196));

#else // __cplusplus

extern void _ZN7S2359C1C1Ev();
extern void _ZN7S2359C1D1Ev();
Name_Map name_map_S2359C1[] = {
  NSPAIR(_ZN7S2359C1C1Ev),
  NSPAIR(_ZN7S2359C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2359C4;
extern VTBL_ENTRY _ZTI7S2359C4[];
extern  VTBL_ENTRY _ZTV7S2359C4[];
extern Class_Descriptor cd_S2359C7;
extern VTBL_ENTRY _ZTI7S2359C7[];
extern  VTBL_ENTRY _ZTV7S2359C7[];
extern Class_Descriptor cd_S2359C3;
extern VTBL_ENTRY _ZTI7S2359C3[];
extern  VTBL_ENTRY _ZTV7S2359C3[];
extern Class_Descriptor cd_S2359C10;
extern VTBL_ENTRY _ZTI8S2359C10[];
extern  VTBL_ENTRY _ZTV8S2359C10[];
extern Class_Descriptor cd_S2359C9;
extern VTBL_ENTRY _ZTI7S2359C9[];
extern  VTBL_ENTRY _ZTV7S2359C9[];
extern Class_Descriptor cd_S2359C8;
extern VTBL_ENTRY _ZTI7S2359C8[];
extern  VTBL_ENTRY _ZTV7S2359C8[];
extern Class_Descriptor cd_S2359C2;
extern VTBL_ENTRY _ZTI7S2359C2[];
extern  VTBL_ENTRY _ZTV7S2359C2[];
static Base_Class bases_S2359C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2359C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2359C7,    ABISELECT(40,28), //bcp->offset
    27, //bcp->virtual_function_table_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_S2359C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2359C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2359C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2359C8,    ABISELECT(64,44), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2359C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2359C1[];
extern void _ZN7S2359C1D1Ev();
extern void _ZN7S2359C1D0Ev();
extern void _ZN7S2359C42v5Ev();
extern void _ZN7S2359C42v6Ev();
extern void _ZN7S2359C42v7Ev();
extern void _ZN7S2359C33v11Ev();
extern void _ZN7S2359C33v12Ev();
extern void _ZN7S2359C33v13Ev();
extern void _ZN7S2359C33v14Ev();
extern void _ZN7S2359C33v15Ev();
extern void _ZN7S2359C33v16Ev();
extern void _ZN7S2359C33v17Ev();
extern void _ZN7S2359C33v18Ev();
extern void _ZN7S2359C33v19Ev();
extern void _ZN7S2359C33v20Ev();
extern void _ZN7S2359C23v31Ev();
extern void _ZN7S2359C23v32Ev();
extern void _ZN7S2359C23v33Ev();
extern void _ZN7S2359C23v34Ev();
extern void _ZN7S2359C23v35Ev();
extern void _ZN7S2359C23v36Ev();
extern void _ZN7S2359C12v1Ev();
extern void _ZN7S2359C12v2Ev();
extern void _ZN7S2359C12v3Ev();
extern void _ZN7S2359C12v4Ev();
extern void ABISELECT(_ZThn40_N7S2359C1D1Ev,_ZThn28_N7S2359C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2359C1D0Ev,_ZThn28_N7S2359C1D0Ev)();
extern void _ZN7S2359C72v8Ev();
extern void _ZN7S2359C72v9Ev();
extern void _ZN7S2359C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2359C1D1Ev,_ZThn44_N7S2359C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S2359C1D0Ev,_ZThn44_N7S2359C1D0Ev)();
extern void _ZN8S2359C103v21Ev();
extern void _ZN8S2359C103v22Ev();
extern void _ZN8S2359C103v23Ev();
extern void _ZN7S2359C93v24Ev();
extern void _ZN7S2359C93v25Ev();
extern void _ZN7S2359C93v26Ev();
extern void _ZN7S2359C83v27Ev();
extern void _ZN7S2359C83v28Ev();
extern void _ZN7S2359C83v29Ev();
extern void _ZN7S2359C83v30Ev();
static  VTBL_ENTRY vtc_S2359C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2359C1[0]),
  (VTBL_ENTRY)&_ZN7S2359C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2359C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2359C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2359C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2359C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2359C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2359C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2359C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2359C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2359C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2359C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2359C23v36Ev,
  (VTBL_ENTRY)&_ZN7S2359C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2359C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2359C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2359C12v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2359C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2359C1D1Ev,_ZThn28_N7S2359C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2359C1D0Ev,_ZThn28_N7S2359C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2359C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2359C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2359C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2359C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2359C1D1Ev,_ZThn44_N7S2359C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2359C1D0Ev,_ZThn44_N7S2359C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2359C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2359C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2359C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2359C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2359C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2359C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2359C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2359C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2359C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2359C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2359C1[];
extern  VTBL_ENTRY _ZTV7S2359C1[];
Class_Descriptor cd_S2359C1 = {  "S2359C1", // class name
  bases_S2359C1, 7,
  &(vtc_S2359C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,196), // object size
  NSPAIRA(_ZTI7S2359C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2359C1),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2361C4  {
  ::S5166C19_nt s2361c4f0;
  int s2361c4f1[2];
  char s2361c4f2;
  virtual  ~S2361C4(); // _ZN7S2361C4D1Ev
  virtual void  v5(); // _ZN7S2361C42v5Ev
  virtual void  v6(); // _ZN7S2361C42v6Ev
  virtual void  v7(); // _ZN7S2361C42v7Ev
  S2361C4(); // tgen
};
//SIG(-1 S2361C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2361C4 ::~S2361C4(){ note_dtor("S2361C4", this);}
void  S2361C4 ::v5(){vfunc_called(this, "_ZN7S2361C42v5Ev");}
void  S2361C4 ::v6(){vfunc_called(this, "_ZN7S2361C42v6Ev");}
void  S2361C4 ::v7(){vfunc_called(this, "_ZN7S2361C42v7Ev");}
S2361C4 ::S2361C4(){ note_ctor("S2361C4", this);} // tgen

static void Test_S2361C4()
{
  extern Class_Descriptor cd_S2361C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2361C4, buf);
    S2361C4 *dp, &lv = *(dp=new (buf) S2361C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2361C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2361C4)");
    check_field_offset(lv, s2361c4f0, ABISELECT(8,4), "S2361C4.s2361c4f0");
    check_field_offset(lv, s2361c4f1, ABISELECT(24,16), "S2361C4.s2361c4f1");
    check_field_offset(lv, s2361c4f2, ABISELECT(32,24), "S2361C4.s2361c4f2");
    test_class_info(&lv, &cd_S2361C4);
    dp->~S2361C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2361C4(Test_S2361C4, "S2361C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2361C4C1Ev();
extern void _ZN7S2361C4D1Ev();
Name_Map name_map_S2361C4[] = {
  NSPAIR(_ZN7S2361C4C1Ev),
  NSPAIR(_ZN7S2361C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2361C4[];
extern void _ZN7S2361C4D1Ev();
extern void _ZN7S2361C4D0Ev();
extern void _ZN7S2361C42v5Ev();
extern void _ZN7S2361C42v6Ev();
extern void _ZN7S2361C42v7Ev();
static  VTBL_ENTRY vtc_S2361C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2361C4[0]),
  (VTBL_ENTRY)&_ZN7S2361C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2361C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2361C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2361C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2361C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S2361C4[];
extern  VTBL_ENTRY _ZTV7S2361C4[];
Class_Descriptor cd_S2361C4 = {  "S2361C4", // class name
  0,0,//no base classes
  &(vtc_S2361C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2361C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2361C4),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  S2361C7  {
  virtual  ~S2361C7(); // _ZN7S2361C7D1Ev
  virtual void  v8(); // _ZN7S2361C72v8Ev
  virtual void  v9(); // _ZN7S2361C72v9Ev
  virtual void  v10(); // _ZN7S2361C73v10Ev
  S2361C7(); // tgen
};
//SIG(-1 S2361C7) C1{ vd v1 v2 v3}


 S2361C7 ::~S2361C7(){ note_dtor("S2361C7", this);}
void  S2361C7 ::v8(){vfunc_called(this, "_ZN7S2361C72v8Ev");}
void  S2361C7 ::v9(){vfunc_called(this, "_ZN7S2361C72v9Ev");}
void  S2361C7 ::v10(){vfunc_called(this, "_ZN7S2361C73v10Ev");}
S2361C7 ::S2361C7(){ note_ctor("S2361C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2361C7C1Ev();
extern void _ZN7S2361C7D1Ev();
Name_Map name_map_S2361C7[] = {
  NSPAIR(_ZN7S2361C7C1Ev),
  NSPAIR(_ZN7S2361C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2361C7[];
extern void _ZN7S2361C7D1Ev();
extern void _ZN7S2361C7D0Ev();
extern void _ZN7S2361C72v8Ev();
extern void _ZN7S2361C72v9Ev();
extern void _ZN7S2361C73v10Ev();
static  VTBL_ENTRY vtc_S2361C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2361C7[0]),
  (VTBL_ENTRY)&_ZN7S2361C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2361C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2361C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2361C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2361C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2361C7[];
extern  VTBL_ENTRY _ZTV7S2361C7[];
Class_Descriptor cd_S2361C7 = {  "S2361C7", // class name
  0,0,//no base classes
  &(vtc_S2361C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2361C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2361C7),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  S2361C3  : S2361C4 , S2361C7 {
  void *s2361c3f0;
  char s2361c3f1;
  int s2361c3f2;
  virtual  ~S2361C3(); // _ZN7S2361C3D1Ev
  virtual void  v11(); // _ZN7S2361C33v11Ev
  virtual void  v12(); // _ZN7S2361C33v12Ev
  virtual void  v13(); // _ZN7S2361C33v13Ev
  virtual void  v14(); // _ZN7S2361C33v14Ev
  virtual void  v15(); // _ZN7S2361C33v15Ev
  virtual void  v16(); // _ZN7S2361C33v16Ev
  virtual void  v17(); // _ZN7S2361C33v17Ev
  virtual void  v18(); // _ZN7S2361C33v18Ev
  virtual void  v19(); // _ZN7S2361C33v19Ev
  virtual void  v20(); // _ZN7S2361C33v20Ev
  S2361C3(); // tgen
};
//SIG(-1 S2361C3) C1{ BC2{ vd v11 v12 v13 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fc Fi}


 S2361C3 ::~S2361C3(){ note_dtor("S2361C3", this);}
void  S2361C3 ::v11(){vfunc_called(this, "_ZN7S2361C33v11Ev");}
void  S2361C3 ::v12(){vfunc_called(this, "_ZN7S2361C33v12Ev");}
void  S2361C3 ::v13(){vfunc_called(this, "_ZN7S2361C33v13Ev");}
void  S2361C3 ::v14(){vfunc_called(this, "_ZN7S2361C33v14Ev");}
void  S2361C3 ::v15(){vfunc_called(this, "_ZN7S2361C33v15Ev");}
void  S2361C3 ::v16(){vfunc_called(this, "_ZN7S2361C33v16Ev");}
void  S2361C3 ::v17(){vfunc_called(this, "_ZN7S2361C33v17Ev");}
void  S2361C3 ::v18(){vfunc_called(this, "_ZN7S2361C33v18Ev");}
void  S2361C3 ::v19(){vfunc_called(this, "_ZN7S2361C33v19Ev");}
void  S2361C3 ::v20(){vfunc_called(this, "_ZN7S2361C33v20Ev");}
S2361C3 ::S2361C3(){ note_ctor("S2361C3", this);} // tgen

static void Test_S2361C3()
{
  extern Class_Descriptor cd_S2361C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S2361C3, buf);
    S2361C3 *dp, &lv = *(dp=new (buf) S2361C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S2361C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2361C3)");
    check_base_class_offset(lv, (S2361C4*), 0, "S2361C3");
    check_base_class_offset(lv, (S2361C7*), ABISELECT(40,28), "S2361C3");
    check_field_offset(lv, s2361c3f0, ABISELECT(48,32), "S2361C3.s2361c3f0");
    check_field_offset(lv, s2361c3f1, ABISELECT(56,36), "S2361C3.s2361c3f1");
    check_field_offset(lv, s2361c3f2, ABISELECT(60,40), "S2361C3.s2361c3f2");
    test_class_info(&lv, &cd_S2361C3);
    dp->~S2361C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2361C3(Test_S2361C3, "S2361C3", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S2361C3C1Ev();
extern void _ZN7S2361C3D1Ev();
Name_Map name_map_S2361C3[] = {
  NSPAIR(_ZN7S2361C3C1Ev),
  NSPAIR(_ZN7S2361C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2361C4;
extern VTBL_ENTRY _ZTI7S2361C4[];
extern  VTBL_ENTRY _ZTV7S2361C4[];
extern Class_Descriptor cd_S2361C7;
extern VTBL_ENTRY _ZTI7S2361C7[];
extern  VTBL_ENTRY _ZTV7S2361C7[];
static Base_Class bases_S2361C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2361C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2361C7,    ABISELECT(40,28), //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2361C3[];
extern void _ZN7S2361C3D1Ev();
extern void _ZN7S2361C3D0Ev();
extern void _ZN7S2361C42v5Ev();
extern void _ZN7S2361C42v6Ev();
extern void _ZN7S2361C42v7Ev();
extern void _ZN7S2361C33v11Ev();
extern void _ZN7S2361C33v12Ev();
extern void _ZN7S2361C33v13Ev();
extern void _ZN7S2361C33v14Ev();
extern void _ZN7S2361C33v15Ev();
extern void _ZN7S2361C33v16Ev();
extern void _ZN7S2361C33v17Ev();
extern void _ZN7S2361C33v18Ev();
extern void _ZN7S2361C33v19Ev();
extern void _ZN7S2361C33v20Ev();
extern void ABISELECT(_ZThn40_N7S2361C3D1Ev,_ZThn28_N7S2361C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2361C3D0Ev,_ZThn28_N7S2361C3D0Ev)();
extern void _ZN7S2361C72v8Ev();
extern void _ZN7S2361C72v9Ev();
extern void _ZN7S2361C73v10Ev();
static  VTBL_ENTRY vtc_S2361C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2361C3[0]),
  (VTBL_ENTRY)&_ZN7S2361C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2361C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2361C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2361C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2361C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v20Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2361C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2361C3D1Ev,_ZThn28_N7S2361C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2361C3D0Ev,_ZThn28_N7S2361C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2361C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2361C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2361C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2361C3[];
extern  VTBL_ENTRY _ZTV7S2361C3[];
Class_Descriptor cd_S2361C3 = {  "S2361C3", // class name
  bases_S2361C3, 2,
  &(vtc_S2361C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S2361C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2361C3),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  S2361C10  {
  virtual  ~S2361C10(); // _ZN8S2361C10D1Ev
  virtual void  v21(); // _ZN8S2361C103v21Ev
  virtual void  v22(); // _ZN8S2361C103v22Ev
  virtual void  v23(); // _ZN8S2361C103v23Ev
  S2361C10(); // tgen
};
//SIG(-1 S2361C10) C1{ vd v1 v2 v3}


 S2361C10 ::~S2361C10(){ note_dtor("S2361C10", this);}
void  S2361C10 ::v21(){vfunc_called(this, "_ZN8S2361C103v21Ev");}
void  S2361C10 ::v22(){vfunc_called(this, "_ZN8S2361C103v22Ev");}
void  S2361C10 ::v23(){vfunc_called(this, "_ZN8S2361C103v23Ev");}
S2361C10 ::S2361C10(){ note_ctor("S2361C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2361C10C1Ev();
extern void _ZN8S2361C10D1Ev();
Name_Map name_map_S2361C10[] = {
  NSPAIR(_ZN8S2361C10C1Ev),
  NSPAIR(_ZN8S2361C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2361C10[];
extern void _ZN8S2361C10D1Ev();
extern void _ZN8S2361C10D0Ev();
extern void _ZN8S2361C103v21Ev();
extern void _ZN8S2361C103v22Ev();
extern void _ZN8S2361C103v23Ev();
static  VTBL_ENTRY vtc_S2361C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2361C10[0]),
  (VTBL_ENTRY)&_ZN8S2361C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2361C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2361C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2361C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2361C103v23Ev,
};
extern VTBL_ENTRY _ZTI8S2361C10[];
extern  VTBL_ENTRY _ZTV8S2361C10[];
Class_Descriptor cd_S2361C10 = {  "S2361C10", // class name
  0,0,//no base classes
  &(vtc_S2361C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2361C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2361C10),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  S2361C9  : S2361C10 {
  ::S5166C36 s2361c9f0;
  ::S2355C13_nt s2361c9f1;
  char s2361c9f2;
  virtual  ~S2361C9(); // _ZN7S2361C9D1Ev
  virtual void  v24(); // _ZN7S2361C93v24Ev
  virtual void  v25(); // _ZN7S2361C93v25Ev
  virtual void  v26(); // _ZN7S2361C93v26Ev
  S2361C9(); // tgen
};
//SIG(-1 S2361C9) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2361C9 ::~S2361C9(){ note_dtor("S2361C9", this);}
void  S2361C9 ::v24(){vfunc_called(this, "_ZN7S2361C93v24Ev");}
void  S2361C9 ::v25(){vfunc_called(this, "_ZN7S2361C93v25Ev");}
void  S2361C9 ::v26(){vfunc_called(this, "_ZN7S2361C93v26Ev");}
S2361C9 ::S2361C9(){ note_ctor("S2361C9", this);} // tgen

static void Test_S2361C9()
{
  extern Class_Descriptor cd_S2361C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2361C9, buf);
    S2361C9 *dp, &lv = *(dp=new (buf) S2361C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2361C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2361C9)");
    check_base_class_offset(lv, (S2361C10*), 0, "S2361C9");
    check_field_offset(lv, s2361c9f0, ABISELECT(8,4), "S2361C9.s2361c9f0");
    check_field_offset(lv, s2361c9f1, ABISELECT(32,20), "S2361C9.s2361c9f1");
    check_field_offset(lv, s2361c9f2, ABISELECT(64,52), "S2361C9.s2361c9f2");
    test_class_info(&lv, &cd_S2361C9);
    dp->~S2361C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2361C9(Test_S2361C9, "S2361C9", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2361C9C1Ev();
extern void _ZN7S2361C9D1Ev();
Name_Map name_map_S2361C9[] = {
  NSPAIR(_ZN7S2361C9C1Ev),
  NSPAIR(_ZN7S2361C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2361C10;
extern VTBL_ENTRY _ZTI8S2361C10[];
extern  VTBL_ENTRY _ZTV8S2361C10[];
static Base_Class bases_S2361C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2361C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2361C9[];
extern void _ZN7S2361C9D1Ev();
extern void _ZN7S2361C9D0Ev();
extern void _ZN8S2361C103v21Ev();
extern void _ZN8S2361C103v22Ev();
extern void _ZN8S2361C103v23Ev();
extern void _ZN7S2361C93v24Ev();
extern void _ZN7S2361C93v25Ev();
extern void _ZN7S2361C93v26Ev();
static  VTBL_ENTRY vtc_S2361C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2361C9[0]),
  (VTBL_ENTRY)&_ZN7S2361C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2361C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2361C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2361C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2361C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2361C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2361C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2361C93v26Ev,
};
extern VTBL_ENTRY _ZTI7S2361C9[];
extern  VTBL_ENTRY _ZTV7S2361C9[];
Class_Descriptor cd_S2361C9 = {  "S2361C9", // class name
  bases_S2361C9, 1,
  &(vtc_S2361C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2361C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2361C9),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  S2361C8  : S2361C9 {
  virtual  ~S2361C8(); // _ZN7S2361C8D1Ev
  virtual void  v27(); // _ZN7S2361C83v27Ev
  virtual void  v28(); // _ZN7S2361C83v28Ev
  virtual void  v29(); // _ZN7S2361C83v29Ev
  virtual void  v30(); // _ZN7S2361C83v30Ev
  S2361C8(); // tgen
};
//SIG(-1 S2361C8) C1{ BC2{ BC3{ vd v5 v6 v7} vd v8 v9 v10 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4}


 S2361C8 ::~S2361C8(){ note_dtor("S2361C8", this);}
void  S2361C8 ::v27(){vfunc_called(this, "_ZN7S2361C83v27Ev");}
void  S2361C8 ::v28(){vfunc_called(this, "_ZN7S2361C83v28Ev");}
void  S2361C8 ::v29(){vfunc_called(this, "_ZN7S2361C83v29Ev");}
void  S2361C8 ::v30(){vfunc_called(this, "_ZN7S2361C83v30Ev");}
S2361C8 ::S2361C8(){ note_ctor("S2361C8", this);} // tgen

static void Test_S2361C8()
{
  extern Class_Descriptor cd_S2361C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2361C8, buf);
    S2361C8 *dp, &lv = *(dp=new (buf) S2361C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2361C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2361C8)");
    check_base_class_offset(lv, (S2361C10*)(S2361C9*), 0, "S2361C8");
    check_base_class_offset(lv, (S2361C9*), 0, "S2361C8");
    test_class_info(&lv, &cd_S2361C8);
    dp->~S2361C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2361C8(Test_S2361C8, "S2361C8", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2361C8C1Ev();
extern void _ZN7S2361C8D1Ev();
Name_Map name_map_S2361C8[] = {
  NSPAIR(_ZN7S2361C8C1Ev),
  NSPAIR(_ZN7S2361C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2361C10;
extern VTBL_ENTRY _ZTI8S2361C10[];
extern  VTBL_ENTRY _ZTV8S2361C10[];
extern Class_Descriptor cd_S2361C9;
extern VTBL_ENTRY _ZTI7S2361C9[];
extern  VTBL_ENTRY _ZTV7S2361C9[];
static Base_Class bases_S2361C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2361C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2361C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2361C8[];
extern void _ZN7S2361C8D1Ev();
extern void _ZN7S2361C8D0Ev();
extern void _ZN8S2361C103v21Ev();
extern void _ZN8S2361C103v22Ev();
extern void _ZN8S2361C103v23Ev();
extern void _ZN7S2361C93v24Ev();
extern void _ZN7S2361C93v25Ev();
extern void _ZN7S2361C93v26Ev();
extern void _ZN7S2361C83v27Ev();
extern void _ZN7S2361C83v28Ev();
extern void _ZN7S2361C83v29Ev();
extern void _ZN7S2361C83v30Ev();
static  VTBL_ENTRY vtc_S2361C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2361C8[0]),
  (VTBL_ENTRY)&_ZN7S2361C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2361C8D0Ev,
  (VTBL_ENTRY)&_ZN8S2361C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2361C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2361C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2361C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2361C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2361C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2361C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2361C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2361C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2361C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2361C8[];
extern  VTBL_ENTRY _ZTV7S2361C8[];
Class_Descriptor cd_S2361C8 = {  "S2361C8", // class name
  bases_S2361C8, 2,
  &(vtc_S2361C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2361C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2361C8),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2361C2  : S2361C3 , S2361C8 {
  int s2361c2f0[3];
  char s2361c2f1;
  ::S5166C24 s2361c2f2;
  virtual  ~S2361C2(); // _ZN7S2361C2D1Ev
  virtual void  v31(); // _ZN7S2361C23v31Ev
  virtual void  v32(); // _ZN7S2361C23v32Ev
  virtual void  v33(); // _ZN7S2361C23v33Ev
  virtual void  v34(); // _ZN7S2361C23v34Ev
  virtual void  v35(); // _ZN7S2361C23v35Ev
  virtual void  v36(); // _ZN7S2361C23v36Ev
  S2361C2(); // tgen
};
//SIG(-1 S2361C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd v10 v11 v12} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp Fc Fi} BC7{ BC8{ BC9{ vd v23 v24 v25} vd v26 v27 v28 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m FL[4]} Fc} vd v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 Fi[3] Fc FC13{ BC14{ m Fp Fi FC15{ m} FC16{ m}}}}


 S2361C2 ::~S2361C2(){ note_dtor("S2361C2", this);}
void  S2361C2 ::v31(){vfunc_called(this, "_ZN7S2361C23v31Ev");}
void  S2361C2 ::v32(){vfunc_called(this, "_ZN7S2361C23v32Ev");}
void  S2361C2 ::v33(){vfunc_called(this, "_ZN7S2361C23v33Ev");}
void  S2361C2 ::v34(){vfunc_called(this, "_ZN7S2361C23v34Ev");}
void  S2361C2 ::v35(){vfunc_called(this, "_ZN7S2361C23v35Ev");}
void  S2361C2 ::v36(){vfunc_called(this, "_ZN7S2361C23v36Ev");}
S2361C2 ::S2361C2(){ note_ctor("S2361C2", this);} // tgen

static void Test_S2361C2()
{
  extern Class_Descriptor cd_S2361C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,33)];
    init_test(&cd_S2361C2, buf);
    S2361C2 *dp, &lv = *(dp=new (buf) S2361C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,128), "sizeof(S2361C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2361C2)");
    check_base_class_offset(lv, (S2361C4*)(S2361C3*), 0, "S2361C2");
    check_base_class_offset(lv, (S2361C7*)(S2361C3*), ABISELECT(40,28), "S2361C2");
    check_base_class_offset(lv, (S2361C3*), 0, "S2361C2");
    check_base_class_offset(lv, (S2361C10*)(S2361C9*)(S2361C8*), ABISELECT(64,44), "S2361C2");
    check_base_class_offset(lv, (S2361C9*)(S2361C8*), ABISELECT(64,44), "S2361C2");
    check_base_class_offset(lv, (S2361C8*), ABISELECT(64,44), "S2361C2");
    check_field_offset(lv, s2361c2f0, ABISELECT(132,100), "S2361C2.s2361c2f0");
    check_field_offset(lv, s2361c2f1, ABISELECT(144,112), "S2361C2.s2361c2f1");
    check_field_offset(lv, s2361c2f2, ABISELECT(152,116), "S2361C2.s2361c2f2");
    test_class_info(&lv, &cd_S2361C2);
    dp->~S2361C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2361C2(Test_S2361C2, "S2361C2", ABISELECT(168,128));

#else // __cplusplus

extern void _ZN7S2361C2C1Ev();
extern void _ZN7S2361C2D1Ev();
Name_Map name_map_S2361C2[] = {
  NSPAIR(_ZN7S2361C2C1Ev),
  NSPAIR(_ZN7S2361C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2361C4;
extern VTBL_ENTRY _ZTI7S2361C4[];
extern  VTBL_ENTRY _ZTV7S2361C4[];
extern Class_Descriptor cd_S2361C7;
extern VTBL_ENTRY _ZTI7S2361C7[];
extern  VTBL_ENTRY _ZTV7S2361C7[];
extern Class_Descriptor cd_S2361C3;
extern VTBL_ENTRY _ZTI7S2361C3[];
extern  VTBL_ENTRY _ZTV7S2361C3[];
extern Class_Descriptor cd_S2361C10;
extern VTBL_ENTRY _ZTI8S2361C10[];
extern  VTBL_ENTRY _ZTV8S2361C10[];
extern Class_Descriptor cd_S2361C9;
extern VTBL_ENTRY _ZTI7S2361C9[];
extern  VTBL_ENTRY _ZTV7S2361C9[];
extern Class_Descriptor cd_S2361C8;
extern VTBL_ENTRY _ZTI7S2361C8[];
extern  VTBL_ENTRY _ZTV7S2361C8[];
static Base_Class bases_S2361C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2361C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2361C7,    ABISELECT(40,28), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2361C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2361C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2361C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2361C8,    ABISELECT(64,44), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2361C2[];
extern void _ZN7S2361C2D1Ev();
extern void _ZN7S2361C2D0Ev();
extern void _ZN7S2361C42v5Ev();
extern void _ZN7S2361C42v6Ev();
extern void _ZN7S2361C42v7Ev();
extern void _ZN7S2361C33v11Ev();
extern void _ZN7S2361C33v12Ev();
extern void _ZN7S2361C33v13Ev();
extern void _ZN7S2361C33v14Ev();
extern void _ZN7S2361C33v15Ev();
extern void _ZN7S2361C33v16Ev();
extern void _ZN7S2361C33v17Ev();
extern void _ZN7S2361C33v18Ev();
extern void _ZN7S2361C33v19Ev();
extern void _ZN7S2361C33v20Ev();
extern void _ZN7S2361C23v31Ev();
extern void _ZN7S2361C23v32Ev();
extern void _ZN7S2361C23v33Ev();
extern void _ZN7S2361C23v34Ev();
extern void _ZN7S2361C23v35Ev();
extern void _ZN7S2361C23v36Ev();
extern void ABISELECT(_ZThn40_N7S2361C2D1Ev,_ZThn28_N7S2361C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2361C2D0Ev,_ZThn28_N7S2361C2D0Ev)();
extern void _ZN7S2361C72v8Ev();
extern void _ZN7S2361C72v9Ev();
extern void _ZN7S2361C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2361C2D1Ev,_ZThn44_N7S2361C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S2361C2D0Ev,_ZThn44_N7S2361C2D0Ev)();
extern void _ZN8S2361C103v21Ev();
extern void _ZN8S2361C103v22Ev();
extern void _ZN8S2361C103v23Ev();
extern void _ZN7S2361C93v24Ev();
extern void _ZN7S2361C93v25Ev();
extern void _ZN7S2361C93v26Ev();
extern void _ZN7S2361C83v27Ev();
extern void _ZN7S2361C83v28Ev();
extern void _ZN7S2361C83v29Ev();
extern void _ZN7S2361C83v30Ev();
static  VTBL_ENTRY vtc_S2361C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2361C2[0]),
  (VTBL_ENTRY)&_ZN7S2361C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2361C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2361C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2361C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2361C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2361C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2361C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2361C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2361C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2361C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2361C23v36Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2361C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2361C2D1Ev,_ZThn28_N7S2361C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2361C2D0Ev,_ZThn28_N7S2361C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2361C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2361C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2361C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2361C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2361C2D1Ev,_ZThn44_N7S2361C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2361C2D0Ev,_ZThn44_N7S2361C2D0Ev),
  (VTBL_ENTRY)&_ZN8S2361C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2361C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2361C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2361C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2361C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2361C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2361C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2361C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2361C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2361C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2361C2[];
extern  VTBL_ENTRY _ZTV7S2361C2[];
Class_Descriptor cd_S2361C2 = {  "S2361C2", // class name
  bases_S2361C2, 6,
  &(vtc_S2361C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,128), // object size
  NSPAIRA(_ZTI7S2361C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2361C2),44, //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  S2361C18_nt  {
  void *s2361c18f0;
  virtual  ~S2361C18_nt(); // _ZN11S2361C18_ntD1Ev
  virtual void  v37(); // _ZN11S2361C18_nt3v37Ev
  virtual void  v38(); // _ZN11S2361C18_nt3v38Ev
  virtual void  v39(); // _ZN11S2361C18_nt3v39Ev
  virtual void  v40(); // _ZN11S2361C18_nt3v40Ev
  virtual void  v41(); // _ZN11S2361C18_nt3v41Ev
  virtual void  v42(); // _ZN11S2361C18_nt3v42Ev
  S2361C18_nt(); // tgen
};
//SIG(-1 S2361C18_nt) C1{ vd v1 v2 v3 v4 v5 v6 Fp}


 S2361C18_nt ::~S2361C18_nt(){ note_dtor("S2361C18_nt", this);}
void  S2361C18_nt ::v37(){vfunc_called(this, "_ZN11S2361C18_nt3v37Ev");}
void  S2361C18_nt ::v38(){vfunc_called(this, "_ZN11S2361C18_nt3v38Ev");}
void  S2361C18_nt ::v39(){vfunc_called(this, "_ZN11S2361C18_nt3v39Ev");}
void  S2361C18_nt ::v40(){vfunc_called(this, "_ZN11S2361C18_nt3v40Ev");}
void  S2361C18_nt ::v41(){vfunc_called(this, "_ZN11S2361C18_nt3v41Ev");}
void  S2361C18_nt ::v42(){vfunc_called(this, "_ZN11S2361C18_nt3v42Ev");}
S2361C18_nt ::S2361C18_nt(){ note_ctor("S2361C18_nt", this);} // tgen

//skip512 S2361C18_nt

#else // __cplusplus

extern void _ZN11S2361C18_ntC1Ev();
extern void _ZN11S2361C18_ntD1Ev();
Name_Map name_map_S2361C18_nt[] = {
  NSPAIR(_ZN11S2361C18_ntC1Ev),
  NSPAIR(_ZN11S2361C18_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S2361C18_nt[];
extern void _ZN11S2361C18_ntD1Ev();
extern void _ZN11S2361C18_ntD0Ev();
extern void _ZN11S2361C18_nt3v37Ev();
extern void _ZN11S2361C18_nt3v38Ev();
extern void _ZN11S2361C18_nt3v39Ev();
extern void _ZN11S2361C18_nt3v40Ev();
extern void _ZN11S2361C18_nt3v41Ev();
extern void _ZN11S2361C18_nt3v42Ev();
static  VTBL_ENTRY vtc_S2361C18_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2361C18_nt[0]),
  (VTBL_ENTRY)&_ZN11S2361C18_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2361C18_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2361C18_nt3v37Ev,
  (VTBL_ENTRY)&_ZN11S2361C18_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S2361C18_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S2361C18_nt3v40Ev,
  (VTBL_ENTRY)&_ZN11S2361C18_nt3v41Ev,
  (VTBL_ENTRY)&_ZN11S2361C18_nt3v42Ev,
};
extern VTBL_ENTRY _ZTI11S2361C18_nt[];
VTBL_ENTRY *P__ZTI11S2361C18_nt = _ZTI11S2361C18_nt; 
extern  VTBL_ENTRY _ZTV11S2361C18_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2361C1  : S2361C2 {
  ::S2361C18_nt s2361c1f0;
  ::S2355C19_nt s2361c1f1;
  int s2361c1f2;
  ::S5166C19_nt s2361c1f3;
  int s2361c1f4[2];
  char s2361c1f5;
  void *s2361c1f6[5];
  int s2361c1f7;
  virtual  ~S2361C1(); // _ZN7S2361C1D1Ev
  virtual void  v1(); // _ZN7S2361C12v1Ev
  virtual void  v2(); // _ZN7S2361C12v2Ev
  virtual void  v3(); // _ZN7S2361C12v3Ev
  virtual void  v4(); // _ZN7S2361C12v4Ev
  S2361C1(); // tgen
};
//SIG(1 S2361C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd v8 v9 v10} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp Fc Fi} BC8{ BC9{ BC10{ vd v21 v22 v23} vd v24 v25 v26 FC11{ m Fp Fi[2] FC12{ m}} FC13{ m FL[4]} Fc} vd v27 v28 v29 v30} vd v31 v32 v33 v34 v35 v36 Fi[3] Fc FC14{ BC15{ m Fp Fi FC16{ m} FC17{ m}}}} vd v1 v2 v3 v4 FC18{ vd v37 v38 v39 v40 v41 v42 Fp} FC19{ BC20{ vd v44 FC21{ m FC15} Fp[3] Fc} v43 Fp} Fi FC5 Fi[2] Fc Fp[5] Fi}


 S2361C1 ::~S2361C1(){ note_dtor("S2361C1", this);}
void  S2361C1 ::v1(){vfunc_called(this, "_ZN7S2361C12v1Ev");}
void  S2361C1 ::v2(){vfunc_called(this, "_ZN7S2361C12v2Ev");}
void  S2361C1 ::v3(){vfunc_called(this, "_ZN7S2361C12v3Ev");}
void  S2361C1 ::v4(){vfunc_called(this, "_ZN7S2361C12v4Ev");}
S2361C1 ::S2361C1(){ note_ctor("S2361C1", this);} // tgen

static void Test_S2361C1()
{
  extern Class_Descriptor cd_S2361C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,57)];
    init_test(&cd_S2361C1, buf);
    S2361C1 *dp, &lv = *(dp=new (buf) S2361C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,224), "sizeof(S2361C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2361C1)");
    check_base_class_offset(lv, (S2361C4*)(S2361C3*)(S2361C2*), 0, "S2361C1");
    check_base_class_offset(lv, (S2361C7*)(S2361C3*)(S2361C2*), ABISELECT(40,28), "S2361C1");
    check_base_class_offset(lv, (S2361C3*)(S2361C2*), 0, "S2361C1");
    check_base_class_offset(lv, (S2361C10*)(S2361C9*)(S2361C8*)(S2361C2*), ABISELECT(64,44), "S2361C1");
    check_base_class_offset(lv, (S2361C9*)(S2361C8*)(S2361C2*), ABISELECT(64,44), "S2361C1");
    check_base_class_offset(lv, (S2361C8*)(S2361C2*), ABISELECT(64,44), "S2361C1");
    check_base_class_offset(lv, (S2361C2*), 0, "S2361C1");
    check_field_offset(lv, s2361c1f0, ABISELECT(168,128), "S2361C1.s2361c1f0");
    check_field_offset(lv, s2361c1f1, ABISELECT(184,136), "S2361C1.s2361c1f1");
    check_field_offset(lv, s2361c1f2, ABISELECT(248,172), "S2361C1.s2361c1f2");
    check_field_offset(lv, s2361c1f3, ABISELECT(256,176), "S2361C1.s2361c1f3");
    check_field_offset(lv, s2361c1f4, ABISELECT(272,188), "S2361C1.s2361c1f4");
    check_field_offset(lv, s2361c1f5, ABISELECT(280,196), "S2361C1.s2361c1f5");
    check_field_offset(lv, s2361c1f6, ABISELECT(288,200), "S2361C1.s2361c1f6");
    check_field_offset(lv, s2361c1f7, ABISELECT(328,220), "S2361C1.s2361c1f7");
    test_class_info(&lv, &cd_S2361C1);
    dp->~S2361C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2361C1(Test_S2361C1, "S2361C1", ABISELECT(336,224));

#else // __cplusplus

extern void _ZN7S2361C1C1Ev();
extern void _ZN7S2361C1D1Ev();
Name_Map name_map_S2361C1[] = {
  NSPAIR(_ZN7S2361C1C1Ev),
  NSPAIR(_ZN7S2361C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2361C4;
extern VTBL_ENTRY _ZTI7S2361C4[];
extern  VTBL_ENTRY _ZTV7S2361C4[];
extern Class_Descriptor cd_S2361C7;
extern VTBL_ENTRY _ZTI7S2361C7[];
extern  VTBL_ENTRY _ZTV7S2361C7[];
extern Class_Descriptor cd_S2361C3;
extern VTBL_ENTRY _ZTI7S2361C3[];
extern  VTBL_ENTRY _ZTV7S2361C3[];
extern Class_Descriptor cd_S2361C10;
extern VTBL_ENTRY _ZTI8S2361C10[];
extern  VTBL_ENTRY _ZTV8S2361C10[];
extern Class_Descriptor cd_S2361C9;
extern VTBL_ENTRY _ZTI7S2361C9[];
extern  VTBL_ENTRY _ZTV7S2361C9[];
extern Class_Descriptor cd_S2361C8;
extern VTBL_ENTRY _ZTI7S2361C8[];
extern  VTBL_ENTRY _ZTV7S2361C8[];
extern Class_Descriptor cd_S2361C2;
extern VTBL_ENTRY _ZTI7S2361C2[];
extern  VTBL_ENTRY _ZTV7S2361C2[];
static Base_Class bases_S2361C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2361C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2361C7,    ABISELECT(40,28), //bcp->offset
    27, //bcp->virtual_function_table_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_S2361C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2361C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2361C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2361C8,    ABISELECT(64,44), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2361C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2361C1[];
extern void _ZN7S2361C1D1Ev();
extern void _ZN7S2361C1D0Ev();
extern void _ZN7S2361C42v5Ev();
extern void _ZN7S2361C42v6Ev();
extern void _ZN7S2361C42v7Ev();
extern void _ZN7S2361C33v11Ev();
extern void _ZN7S2361C33v12Ev();
extern void _ZN7S2361C33v13Ev();
extern void _ZN7S2361C33v14Ev();
extern void _ZN7S2361C33v15Ev();
extern void _ZN7S2361C33v16Ev();
extern void _ZN7S2361C33v17Ev();
extern void _ZN7S2361C33v18Ev();
extern void _ZN7S2361C33v19Ev();
extern void _ZN7S2361C33v20Ev();
extern void _ZN7S2361C23v31Ev();
extern void _ZN7S2361C23v32Ev();
extern void _ZN7S2361C23v33Ev();
extern void _ZN7S2361C23v34Ev();
extern void _ZN7S2361C23v35Ev();
extern void _ZN7S2361C23v36Ev();
extern void _ZN7S2361C12v1Ev();
extern void _ZN7S2361C12v2Ev();
extern void _ZN7S2361C12v3Ev();
extern void _ZN7S2361C12v4Ev();
extern void ABISELECT(_ZThn40_N7S2361C1D1Ev,_ZThn28_N7S2361C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2361C1D0Ev,_ZThn28_N7S2361C1D0Ev)();
extern void _ZN7S2361C72v8Ev();
extern void _ZN7S2361C72v9Ev();
extern void _ZN7S2361C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2361C1D1Ev,_ZThn44_N7S2361C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S2361C1D0Ev,_ZThn44_N7S2361C1D0Ev)();
extern void _ZN8S2361C103v21Ev();
extern void _ZN8S2361C103v22Ev();
extern void _ZN8S2361C103v23Ev();
extern void _ZN7S2361C93v24Ev();
extern void _ZN7S2361C93v25Ev();
extern void _ZN7S2361C93v26Ev();
extern void _ZN7S2361C83v27Ev();
extern void _ZN7S2361C83v28Ev();
extern void _ZN7S2361C83v29Ev();
extern void _ZN7S2361C83v30Ev();
static  VTBL_ENTRY vtc_S2361C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2361C1[0]),
  (VTBL_ENTRY)&_ZN7S2361C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2361C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2361C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2361C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2361C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2361C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2361C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2361C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2361C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2361C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2361C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2361C23v36Ev,
  (VTBL_ENTRY)&_ZN7S2361C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2361C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2361C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2361C12v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2361C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2361C1D1Ev,_ZThn28_N7S2361C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2361C1D0Ev,_ZThn28_N7S2361C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2361C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2361C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2361C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2361C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2361C1D1Ev,_ZThn44_N7S2361C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2361C1D0Ev,_ZThn44_N7S2361C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2361C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2361C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2361C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2361C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2361C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2361C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2361C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2361C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2361C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2361C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2361C1[];
extern  VTBL_ENTRY _ZTV7S2361C1[];
Class_Descriptor cd_S2361C1 = {  "S2361C1", // class name
  bases_S2361C1, 7,
  &(vtc_S2361C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,224), // object size
  NSPAIRA(_ZTI7S2361C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2361C1),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19459C6  : S19917C5 {
  int s19459c6f0;
  void *s19459c6f1[4];
  long double s19459c6f2[5];
  void *s19459c6f3[2];
  ::S19917C5 s19459c6f4;
  long s19459c6f5[3];
  virtual  ~S19459C6(); // _ZN8S19459C6D1Ev
  virtual void  v6(); // _ZN8S19459C62v6Ev
  virtual void  v7(); // _ZN8S19459C62v7Ev
  S19459C6(); // tgen
};
//SIG(-1 S19459C6) C1{ BC2{ vd m Fp FD Fi Fp} vd v1 v2 Fi Fp[4] FD[5] Fp[2] FC2 Fl[3]}


 S19459C6 ::~S19459C6(){ note_dtor("S19459C6", this);}
void  S19459C6 ::v6(){vfunc_called(this, "_ZN8S19459C62v6Ev");}
void  S19459C6 ::v7(){vfunc_called(this, "_ZN8S19459C62v7Ev");}
S19459C6 ::S19459C6(){ note_ctor("S19459C6", this);} // tgen

static void Test_S19459C6()
{
  extern Class_Descriptor cd_S19459C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,40)];
    init_test(&cd_S19459C6, buf);
    S19459C6 *dp, &lv = *(dp=new (buf) S19459C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,156), "sizeof(S19459C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19459C6)");
    check_base_class_offset(lv, (S19917C5*), 0, "S19459C6");
    check_field_offset(lv, s19459c6f0, ABISELECT(48,28), "S19459C6.s19459c6f0");
    check_field_offset(lv, s19459c6f1, ABISELECT(56,32), "S19459C6.s19459c6f1");
    check_field_offset(lv, s19459c6f2, ABISELECT(96,48), "S19459C6.s19459c6f2");
    check_field_offset(lv, s19459c6f3, ABISELECT(176,108), "S19459C6.s19459c6f3");
    check_field_offset(lv, s19459c6f4, ABISELECT(192,116), "S19459C6.s19459c6f4");
    check_field_offset(lv, s19459c6f5, ABISELECT(240,144), "S19459C6.s19459c6f5");
    test_class_info(&lv, &cd_S19459C6);
    dp->~S19459C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19459C6(Test_S19459C6, "S19459C6", ABISELECT(272,156));

#else // __cplusplus

extern void _ZN8S19459C6C1Ev();
extern void _ZN8S19459C6D1Ev();
Name_Map name_map_S19459C6[] = {
  NSPAIR(_ZN8S19459C6C1Ev),
  NSPAIR(_ZN8S19459C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
static Base_Class bases_S19459C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S19459C6[];
extern void _ZN8S19459C6D1Ev();
extern void _ZN8S19459C6D0Ev();
extern void _ZN8S19459C62v6Ev();
extern void _ZN8S19459C62v7Ev();
static  VTBL_ENTRY vtc_S19459C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C6[0]),
  (VTBL_ENTRY)&_ZN8S19459C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19459C62v7Ev,
};
extern VTBL_ENTRY _ZTI8S19459C6[];
extern  VTBL_ENTRY _ZTV8S19459C6[];
Class_Descriptor cd_S19459C6 = {  "S19459C6", // class name
  bases_S19459C6, 1,
  &(vtc_S19459C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,156), // object size
  NSPAIRA(_ZTI8S19459C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19459C6),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  S19459C4  : S19917C5 {
  __tsi64 s19459c4f0[2];
  ::S19917C5 s19459c4f1;
  int s19459c4f2[3];
  void *s19459c4f3[4];
  ::S19459C6 s19459c4f4;
  char s19459c4f5:5;
  virtual void  v2(); // _ZN8S19459C42v2Ev
  virtual void  v3(); // _ZN8S19459C42v3Ev
  ~S19459C4(); // tgen
  S19459C4(); // tgen
};
//SIG(-1 S19459C4) C1{ BC2{ vd m Fp FD Fi Fp} v1 v2 FL[2] FC2 Fi[3] Fp[4] FC3{ BC2 vd v3 v4 Fi Fp[4] FD[5] Fp[2] FC2 Fl[3]} Fc:5}


void  S19459C4 ::v2(){vfunc_called(this, "_ZN8S19459C42v2Ev");}
void  S19459C4 ::v3(){vfunc_called(this, "_ZN8S19459C42v3Ev");}
S19459C4 ::~S19459C4(){ note_dtor("S19459C4", this);} // tgen
S19459C4 ::S19459C4(){ note_ctor("S19459C4", this);} // tgen

static void Test_S19459C4()
{
  extern Class_Descriptor cd_S19459C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(29,66)];
    init_test(&cd_S19459C4, buf);
    S19459C4 *dp, &lv = *(dp=new (buf) S19459C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,260), "sizeof(S19459C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19459C4)");
    check_base_class_offset(lv, (S19917C5*), 0, "S19459C4");
    check_field_offset(lv, s19459c4f0, ABISELECT(48,28), "S19459C4.s19459c4f0");
    check_field_offset(lv, s19459c4f1, ABISELECT(64,44), "S19459C4.s19459c4f1");
    check_field_offset(lv, s19459c4f2, ABISELECT(112,72), "S19459C4.s19459c4f2");
    check_field_offset(lv, s19459c4f3, ABISELECT(128,84), "S19459C4.s19459c4f3");
    check_field_offset(lv, s19459c4f4, ABISELECT(160,100), "S19459C4.s19459c4f4");
    set_bf_and_test(lv, s19459c4f5, ABISELECT(432,256), 0, 5, 1, "S19459C4");
    set_bf_and_test(lv, s19459c4f5, ABISELECT(432,256), 0, 5, hide_sll(1LL<<4), "S19459C4");
    test_class_info(&lv, &cd_S19459C4);
    dp->~S19459C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19459C4(Test_S19459C4, "S19459C4", ABISELECT(448,260));

#else // __cplusplus

extern void _ZN8S19459C4C1Ev();
extern void _ZN8S19459C4D1Ev();
Name_Map name_map_S19459C4[] = {
  NSPAIR(_ZN8S19459C4C1Ev),
  NSPAIR(_ZN8S19459C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
static Base_Class bases_S19459C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S19459C4[];
extern void _ZN8S19459C4D1Ev();
extern void _ZN8S19459C4D0Ev();
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY vtc_S19459C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C4[0]),
  (VTBL_ENTRY)&_ZN8S19459C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
extern VTBL_ENTRY _ZTI8S19459C4[];
extern  VTBL_ENTRY _ZTV8S19459C4[];
Class_Descriptor cd_S19459C4 = {  "S19459C4", // class name
  bases_S19459C4, 1,
  &(vtc_S19459C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,260), // object size
  NSPAIRA(_ZTI8S19459C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19459C4),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  S19459C9  : virtual S19459C4 , S19917C5 {
  int s19459c9f0;
  virtual  ~S19459C9(); // _ZN8S19459C9D2Ev
  virtual void  v4(); // _ZN8S19459C92v4Ev
  S19459C9(); // tgen
};
//SIG(-1 S19459C9) C1{ VBC2{ BC3{ vd m Fp FD Fi Fp} v2 v3 FL[2] FC3 Fi[3] Fp[4] FC4{ BC3 vd v4 v5 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} Fc:5} BC3 vd v1 Fi}


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

static void Test_S19459C9()
{
  extern Class_Descriptor cd_S19459C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,74)];
    init_test(&cd_S19459C9, buf);
    S19459C9 *dp, &lv = *(dp=new (buf) S19459C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,292), "sizeof(S19459C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19459C9)");
    check_base_class_offset(lv, (S19917C5*)(S19459C4*), ABISELECT(64,32), "S19459C9");
    check_base_class_offset(lv, (S19459C4*), ABISELECT(64,32), "S19459C9");
    /*is_ambiguous_... S19459C9::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*), 0, "S19459C9");
    check_field_offset(lv, s19459c9f0, ABISELECT(48,28), "S19459C9.s19459c9f0");
    test_class_info(&lv, &cd_S19459C9);
    dp->~S19459C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19459C9(Test_S19459C9, "S19459C9", ABISELECT(512,292));

#else // __cplusplus

extern void _ZN8S19459C9C1Ev();
extern void _ZN8S19459C9D2Ev();
Name_Map name_map_S19459C9[] = {
  NSPAIR(_ZN8S19459C9C1Ev),
  NSPAIR(_ZN8S19459C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C4;
extern VTBL_ENTRY _ZTI8S19459C4[];
extern  VTBL_ENTRY _ZTV8S19459C4[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
static Base_Class bases_S19459C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    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
    1, //immediately_derived
  0, 0},
  {&cd_S19459C4,    ABISELECT(64,32), //bcp->offset
    6, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19459C9[];
extern void _ZN8S19459C9D1Ev();
extern void _ZN8S19459C9D0Ev();
extern void _ZN8S19459C92v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev)();
extern void ABISELECT(_ZThn64_N8S19459C9D1Ev,_ZThn32_N8S19459C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev)();
extern void ABISELECT(_ZThn64_N8S19459C9D0Ev,_ZThn32_N8S19459C9D0Ev)() __attribute__((weak));
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY vtc_S19459C9[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&_ZN8S19459C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S19459C9[];
static  VTT_ENTRY vtt_S19459C9[] = {
  {&(_ZTV8S19459C9[3]),  3,15},
  {&(_ZTV8S19459C9[11]),  11,15},
};
extern VTBL_ENTRY _ZTI8S19459C9[];
extern  VTBL_ENTRY _ZTV8S19459C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C9[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19459C9D0Ev,_ZThn32_N8S19459C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19459C9D1Ev,_ZThn32_N8S19459C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19459C9 = {  "S19459C9", // class name
  bases_S19459C9, 3,
  &(vtc_S19459C9[0]), // expected_vtbl_contents
  &(vtt_S19459C9[0]), // expected_vtt_contents
  ABISELECT(512,292), // object size
  NSPAIRA(_ZTI8S19459C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19459C9),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19459C9),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19459C11  {
  __tsi64 s19459c11f0;
  int s19459c11f1;
  ::S19459C6 s19459c11f2;
  int s19459c11f3;
  ::S19917C5 s19459c11f4;
  void *s19459c11f5;
  int s19459c11f6;
  ::S19459C6 s19459c11f7;
  long double s19459c11f8;
  virtual  ~S19459C11(); // _ZN9S19459C11D1Ev
  virtual void  v5(); // _ZN9S19459C112v5Ev
  S19459C11(); // tgen
};
//SIG(-1 S19459C11) C1{ vd v1 FL Fi FC2{ BC3{ vd m Fp FD Fi Fp} vd v2 v3 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} Fi FC3 Fp Fi FC2 FD}


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

static void Test_S19459C11()
{
  extern Class_Descriptor cd_S19459C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(43,96)];
    init_test(&cd_S19459C11, buf);
    S19459C11 *dp, &lv = *(dp=new (buf) S19459C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(672,380), "sizeof(S19459C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19459C11)");
    check_field_offset(lv, s19459c11f0, ABISELECT(8,4), "S19459C11.s19459c11f0");
    check_field_offset(lv, s19459c11f1, ABISELECT(16,12), "S19459C11.s19459c11f1");
    check_field_offset(lv, s19459c11f2, ABISELECT(32,16), "S19459C11.s19459c11f2");
    check_field_offset(lv, s19459c11f3, ABISELECT(304,172), "S19459C11.s19459c11f3");
    check_field_offset(lv, s19459c11f4, ABISELECT(320,176), "S19459C11.s19459c11f4");
    check_field_offset(lv, s19459c11f5, ABISELECT(368,204), "S19459C11.s19459c11f5");
    check_field_offset(lv, s19459c11f6, ABISELECT(376,208), "S19459C11.s19459c11f6");
    check_field_offset(lv, s19459c11f7, ABISELECT(384,212), "S19459C11.s19459c11f7");
    check_field_offset(lv, s19459c11f8, ABISELECT(656,368), "S19459C11.s19459c11f8");
    test_class_info(&lv, &cd_S19459C11);
    dp->~S19459C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19459C11(Test_S19459C11, "S19459C11", ABISELECT(672,380));

#else // __cplusplus

extern void _ZN9S19459C11C1Ev();
extern void _ZN9S19459C11D1Ev();
Name_Map name_map_S19459C11[] = {
  NSPAIR(_ZN9S19459C11C1Ev),
  NSPAIR(_ZN9S19459C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19459C11[];
extern void _ZN9S19459C11D1Ev();
extern void _ZN9S19459C11D0Ev();
extern void _ZN9S19459C112v5Ev();
static  VTBL_ENTRY vtc_S19459C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19459C11[0]),
  (VTBL_ENTRY)&_ZN9S19459C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19459C11D0Ev,
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
};
extern VTBL_ENTRY _ZTI9S19459C11[];
extern  VTBL_ENTRY _ZTV9S19459C11[];
Class_Descriptor cd_S19459C11 = {  "S19459C11", // class name
  0,0,//no base classes
  &(vtc_S19459C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(672,380), // object size
  NSPAIRA(_ZTI9S19459C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19459C11),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19459C10  : virtual S19459C4 , S19459C9 , S19459C11 , virtual S19917C3 {
  ::S19917C12_nt s19459c10f0;
  long double s19459c10f1[10];
  ::S19459C9 s19459c10f2;
  ::S19459C11 s19459c10f3;
  int s19459c10f4;
  virtual  ~S19459C10(); // _ZN9S19459C10D2Ev
  S19459C10(); // tgen
};
//SIG(-1 S19459C10) C1{ VBC2{ BC3{ vd m Fp FD Fi Fp} v1 v2 FL[2] FC3 Fi[3] Fp[4] FC4{ BC3 vd v5 v6 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} Fc:5} BC5{ VBC2 BC3 vd v3 Fi} BC6{ vd v4 FL Fi FC4 Fi FC3 Fp Fi FC4 FD} VBC7{ vd m FC8{ BC3 vd v7 v8 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} FD[3] Fp} vd FC9{} FD[10] FC5 FC6 Fi}


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

static void Test_S19459C10()
{
  extern Class_Descriptor cd_S19459C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(183,419)];
    init_test(&cd_S19459C10, buf);
    S19459C10 *dp, &lv = *(dp=new (buf) S19459C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2912,1672), "sizeof(S19459C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19459C10)");
    check_base_class_offset(lv, (S19917C5*)(S19459C4*), ABISELECT(2112,1212), "S19459C10");
    check_base_class_offset(lv, (S19459C4*), ABISELECT(2112,1212), "S19459C10");
    check_base_class_offset(lv, (S19459C4*)(S19459C9*), ABISELECT(2112,1212), "S19459C10");
    /*is_ambiguous_... S19459C9::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19459C9*), 0, "S19459C10");
    check_base_class_offset(lv, (S19459C9*), 0, "S19459C10");
    check_base_class_offset(lv, (S19459C11*), ABISELECT(64,32), "S19459C10");
    check_base_class_offset(lv, (S19917C3*), ABISELECT(2560,1472), "S19459C10");
    check_field_offset(lv, s19459c10f0, ABISELECT(736,412), "S19459C10.s19459c10f0");
    check_field_offset(lv, s19459c10f1, ABISELECT(752,416), "S19459C10.s19459c10f1");
    check_field_offset(lv, s19459c10f2, ABISELECT(912,536), "S19459C10.s19459c10f2");
    check_field_offset(lv, s19459c10f3, ABISELECT(1424,828), "S19459C10.s19459c10f3");
    check_field_offset(lv, s19459c10f4, ABISELECT(2096,1208), "S19459C10.s19459c10f4");
    test_class_info(&lv, &cd_S19459C10);
    dp->~S19459C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19459C10(Test_S19459C10, "S19459C10", ABISELECT(2912,1672));

#else // __cplusplus

extern void _ZN9S19459C10C1Ev();
extern void _ZN9S19459C10D2Ev();
Name_Map name_map_S19459C10[] = {
  NSPAIR(_ZN9S19459C10C1Ev),
  NSPAIR(_ZN9S19459C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C4;
extern VTBL_ENTRY _ZTI8S19459C4[];
extern  VTBL_ENTRY _ZTV8S19459C4[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C9;
extern VTBL_ENTRY _ZTI8S19459C9[];
extern  VTBL_ENTRY _ZTV8S19459C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C9[];
extern Class_Descriptor cd_S19459C11;
extern VTBL_ENTRY _ZTI9S19459C11[];
extern  VTBL_ENTRY _ZTV9S19459C11[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
static Base_Class bases_S19459C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    ABISELECT(2112,1212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19459C4,    ABISELECT(2112,1212), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //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_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19459C9,    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},
  {&cd_S19459C11,    ABISELECT(64,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19917C3,    ABISELECT(2560,1472), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19459C10[];
extern void _ZN9S19459C10D1Ev();
extern void _ZN9S19459C10D0Ev();
extern void _ZN8S19459C92v4Ev();
extern void ABISELECT(_ZThn64_N9S19459C10D1Ev,_ZThn32_N9S19459C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S19459C10D0Ev,_ZThn32_N9S19459C10D0Ev)();
extern void _ZN9S19459C112v5Ev();
extern void ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev)();
extern void ABISELECT(_ZThn2112_N9S19459C10D1Ev,_ZThn1212_N9S19459C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev)();
extern void ABISELECT(_ZThn2112_N9S19459C10D0Ev,_ZThn1212_N9S19459C10D0Ev)() __attribute__((weak));
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev)();
extern void ABISELECT(_ZThn2560_N9S19459C10D1Ev,_ZThn1472_N9S19459C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev)();
extern void ABISELECT(_ZThn2560_N9S19459C10D0Ev,_ZThn1472_N9S19459C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19459C10[] = {
  ABISELECT(2560,1472),
  ABISELECT(2112,1212),
  0,
  (VTBL_ENTRY)&(_ZTI9S19459C10[0]),
  (VTBL_ENTRY)&_ZN9S19459C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19459C10D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19459C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S19459C10D1Ev,_ZThn32_N9S19459C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S19459C10D0Ev,_ZThn32_N9S19459C10D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
  0,
  0,
  ABISELECT(-2112,-1212),
  ABISELECT(-2112,-1212),
  (VTBL_ENTRY)&(_ZTI9S19459C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
  ABISELECT(-2560,-1472),
  ABISELECT(-2560,-1472),
  (VTBL_ENTRY)&(_ZTI9S19459C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S19459C10[];
extern void _ZN8S19459C9D1Ev();
extern void _ZN8S19459C9D0Ev();
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C9__9S19459C10[] = {
  ABISELECT(2112,1212),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&_ZN8S19459C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev)();
extern void ABISELECT(_ZThn2112_N8S19459C9D1Ev,_ZThn1212_N8S19459C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev)();
extern void ABISELECT(_ZThn2112_N8S19459C9D0Ev,_ZThn1212_N8S19459C9D0Ev)() __attribute__((weak));
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__8S19459C9__9S19459C10[] = {
  0,
  0,
  ABISELECT(-2112,-1212),
  ABISELECT(-2112,-1212),
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
static  VTT_ENTRY vtt_S19459C10[] = {
  {&(_ZTV9S19459C10[4]),  4,26},
  {&(_tg__ZTV8S19459C9__9S19459C10[3]),  3,6},
  {&(_tg__ZTV8S19459C4__8S19459C9__9S19459C10[5]),  5,9},
  {&(_ZTV9S19459C10[17]),  17,26},
  {&(_ZTV9S19459C10[24]),  24,26},
};
extern VTBL_ENTRY _ZTI9S19459C10[];
extern  VTBL_ENTRY _ZTV9S19459C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19459C10[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S19459C9D0Ev,_ZThn1212_N8S19459C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S19459C9D1Ev,_ZThn1212_N8S19459C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N9S19459C10D0Ev,_ZThn1472_N9S19459C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N9S19459C10D0Ev,_ZThn1212_N9S19459C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N9S19459C10D1Ev,_ZThn1472_N9S19459C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N9S19459C10D1Ev,_ZThn1212_N9S19459C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19459C10 = {  "S19459C10", // class name
  bases_S19459C10, 6,
  &(vtc_S19459C10[0]), // expected_vtbl_contents
  &(vtt_S19459C10[0]), // expected_vtt_contents
  ABISELECT(2912,1672), // object size
  NSPAIRA(_ZTI9S19459C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19459C10),26, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19459C10),5, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19459C7  : virtual S19917C3 , virtual S19459C9 , S19459C10 , virtual S19459C11 , virtual S19459C6 {
  int s19459c7f0;
  char s19459c7f1;
  char s19459c7f2:8;
  long double s19459c7f3[8];
  int s19459c7f4;
  char s19459c7f5;
  void *s19459c7f6;
  virtual  ~S19459C7(); // _ZN8S19459C7D2Ev
  S19459C7(); // tgen
};
//SIG(-1 S19459C7) C1{ VBC2{ vd m FC3{ BC4{ vd m Fp FD Fi Fp} vd v7 v8 Fi Fp[4] FD[5] Fp[2] FC4 Fl[3]} FD[3] Fp} VBC5{ VBC6{ BC4 v1 v2 FL[2] FC4 Fi[3] Fp[4] FC7{ BC4 vd v5 v6 Fi Fp[4] FD[5] Fp[2] FC4 Fl[3]} Fc:5} BC4 vd v3 Fi} BC8{ VBC6 BC5 BC9{ vd v4 FL Fi FC7 Fi FC4 Fp Fi FC7 FD} VBC2 vd FC10{} FD[10] FC5 FC9 Fi} VBC9 VBC7 vd Fi Fc Fc:8 FD[8] Fi Fc Fp}


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

static void Test_S19459C7()
{
  extern Class_Descriptor cd_S19459C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(255,590)];
    init_test(&cd_S19459C7, buf);
    S19459C7 *dp, &lv = *(dp=new (buf) S19459C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4064,2356), "sizeof(S19459C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19459C7)");
    check_base_class_offset(lv, (S19917C3*), ABISELECT(2256,1328), "S19459C7");
    check_base_class_offset(lv, (S19917C3*)(S19459C10*), ABISELECT(2256,1328), "S19459C7");
    check_base_class_offset(lv, (S19917C5*)(S19459C4*), ABISELECT(2672,1560), "S19459C7");
    /*is_ambiguous_... S19459C7::S19459C9 */ AMB_check_base_class_offset(lv, (S19459C4*)(S19459C9*), ABISELECT(2672,1560), "S19459C7");
    check_base_class_offset(lv, (S19459C4*)(S19459C10*), ABISELECT(2672,1560), "S19459C7");
    check_base_class_offset(lv, (S19459C4*)(S19459C9*)(S19459C10*), ABISELECT(2672,1560), "S19459C7");
    /*is_ambiguous_... S19459C7::S19459C9 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19459C9*), ABISELECT(2608,1528), "S19459C7");
    /*is_ambiguous_... S19459C7::S19459C9 */ AMB_check_base_class_offset(lv, (S19459C9*), ABISELECT(2608,1528), "S19459C7");
    /*is_ambiguous_... S19459C9::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19459C9*)(S19459C10*), 0, "S19459C7");
    check_base_class_offset(lv, (S19459C9*)(S19459C10*), 0, "S19459C7");
    check_base_class_offset(lv, (S19459C11*)(S19459C10*), ABISELECT(64,32), "S19459C7");
    check_base_class_offset(lv, (S19459C10*), 0, "S19459C7");
    /*is_ambiguous_... S19459C7::S19459C11 */ AMB_check_base_class_offset(lv, (S19459C11*), ABISELECT(3120,1820), "S19459C7");
    check_base_class_offset(lv, (S19917C5*)(S19459C6*), ABISELECT(3792,2200), "S19459C7");
    check_base_class_offset(lv, (S19459C6*), ABISELECT(3792,2200), "S19459C7");
    check_field_offset(lv, s19459c7f0, ABISELECT(2100,1212), "S19459C7.s19459c7f0");
    check_field_offset(lv, s19459c7f1, ABISELECT(2104,1216), "S19459C7.s19459c7f1");
    set_bf_and_test(lv, s19459c7f2, ABISELECT(2105,1217), 0, 8, 1, "S19459C7");
    set_bf_and_test(lv, s19459c7f2, ABISELECT(2105,1217), 0, 8, hide_sll(1LL<<7), "S19459C7");
    check_field_offset(lv, s19459c7f3, ABISELECT(2112,1220), "S19459C7.s19459c7f3");
    check_field_offset(lv, s19459c7f4, ABISELECT(2240,1316), "S19459C7.s19459c7f4");
    check_field_offset(lv, s19459c7f5, ABISELECT(2244,1320), "S19459C7.s19459c7f5");
    check_field_offset(lv, s19459c7f6, ABISELECT(2248,1324), "S19459C7.s19459c7f6");
    test_class_info(&lv, &cd_S19459C7);
    dp->~S19459C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19459C7(Test_S19459C7, "S19459C7", ABISELECT(4064,2356));

#else // __cplusplus

extern void _ZN8S19459C7C1Ev();
extern void _ZN8S19459C7D2Ev();
Name_Map name_map_S19459C7[] = {
  NSPAIR(_ZN8S19459C7C1Ev),
  NSPAIR(_ZN8S19459C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C4;
extern VTBL_ENTRY _ZTI8S19459C4[];
extern  VTBL_ENTRY _ZTV8S19459C4[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C9;
extern VTBL_ENTRY _ZTI8S19459C9[];
extern  VTBL_ENTRY _ZTV8S19459C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C9[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C9;
extern VTBL_ENTRY _ZTI8S19459C9[];
extern  VTBL_ENTRY _ZTV8S19459C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C9[];
extern Class_Descriptor cd_S19459C11;
extern VTBL_ENTRY _ZTI9S19459C11[];
extern  VTBL_ENTRY _ZTV9S19459C11[];
extern Class_Descriptor cd_S19459C10;
extern VTBL_ENTRY _ZTI9S19459C10[];
extern  VTBL_ENTRY _ZTV9S19459C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19459C10[];
extern Class_Descriptor cd_S19459C11;
extern VTBL_ENTRY _ZTI9S19459C11[];
extern  VTBL_ENTRY _ZTV9S19459C11[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C6;
extern VTBL_ENTRY _ZTI8S19459C6[];
extern  VTBL_ENTRY _ZTV8S19459C6[];
static Base_Class bases_S19459C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C3,    ABISELECT(2256,1328), //bcp->offset
    15, //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
  1, 1},
  {&cd_S19917C5,    ABISELECT(2672,1560), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19459C4,    ABISELECT(2672,1560), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(2608,1528), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19459C9,    ABISELECT(2608,1528), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19459C9,    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
    10, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19459C11,    ABISELECT(64,32), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19459C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19459C11,    ABISELECT(3120,1820), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C5,    ABISELECT(3792,2200), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19459C6,    ABISELECT(3792,2200), //bcp->offset
    44, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19459C7[];
extern void _ZN8S19459C7D1Ev();
extern void _ZN8S19459C7D0Ev();
extern void _ZN8S19459C92v4Ev();
extern void ABISELECT(_ZThn64_N8S19459C7D1Ev,_ZThn32_N8S19459C7D1Ev)();
extern void ABISELECT(_ZThn64_N8S19459C7D0Ev,_ZThn32_N8S19459C7D0Ev)();
extern void _ZN9S19459C112v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev)();
extern void ABISELECT(_ZThn2256_N8S19459C7D1Ev,_ZThn1328_N8S19459C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev)();
extern void ABISELECT(_ZThn2256_N8S19459C7D0Ev,_ZThn1328_N8S19459C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19459C7D1Ev,_ZTv0_n16_N8S19459C7D1Ev)();
extern void ABISELECT(_ZThn2608_N8S19459C7D1Ev,_ZThn1528_N8S19459C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19459C7D0Ev,_ZTv0_n16_N8S19459C7D0Ev)();
extern void ABISELECT(_ZThn2608_N8S19459C7D0Ev,_ZThn1528_N8S19459C7D0Ev)() __attribute__((weak));
extern void _ZN8S19459C92v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev)();
extern void ABISELECT(_ZThn2672_N8S19459C7D1Ev,_ZThn1560_N8S19459C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev)();
extern void ABISELECT(_ZThn2672_N8S19459C7D0Ev,_ZThn1560_N8S19459C7D0Ev)() __attribute__((weak));
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev)();
extern void ABISELECT(_ZThn3120_N8S19459C7D1Ev,_ZThn1820_N8S19459C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev)();
extern void ABISELECT(_ZThn3120_N8S19459C7D0Ev,_ZThn1820_N8S19459C7D0Ev)() __attribute__((weak));
extern void _ZN9S19459C112v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev)();
extern void ABISELECT(_ZThn3792_N8S19459C7D1Ev,_ZThn2200_N8S19459C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev)();
extern void ABISELECT(_ZThn3792_N8S19459C7D0Ev,_ZThn2200_N8S19459C7D0Ev)() __attribute__((weak));
extern void _ZN8S19459C62v6Ev();
extern void _ZN8S19459C62v7Ev();
static  VTBL_ENTRY vtc_S19459C7[] = {
  ABISELECT(3792,2200),
  ABISELECT(3120,1820),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&_ZN8S19459C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19459C7D1Ev,_ZThn32_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S19459C7D0Ev,_ZThn32_N8S19459C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev),
  0,
  ABISELECT(-2608,-1528),
  ABISELECT(64,32),
  ABISELECT(-2608,-1528),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C7D1Ev,_ZTv0_n16_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C7D0Ev,_ZTv0_n16_N8S19459C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
  0,
  ABISELECT(-3120,-1820),
  ABISELECT(-3120,-1820),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
  0,
  0,
  ABISELECT(-3792,-2200),
  ABISELECT(-3792,-2200),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19459C62v7Ev,
};
extern VTBL_ENTRY _ZTV8S19459C7[];
extern void _ZN9S19459C10D1Ev();
extern void _ZN9S19459C10D0Ev();
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19459C10__8S19459C7[] = {
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI9S19459C10[0]),
  (VTBL_ENTRY)&_ZN9S19459C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19459C10D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void _ZN8S19459C9D1Ev();
extern void _ZN8S19459C9D0Ev();
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C99S19459C10__A1__8S19459C7[] = {
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&_ZN8S19459C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev)();
extern void ABISELECT(_ZThn2672_N8S19459C9D1Ev,_ZThn1560_N8S19459C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev)();
extern void ABISELECT(_ZThn2672_N8S19459C9D0Ev,_ZThn1560_N8S19459C9D0Ev)() __attribute__((weak));
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__8S19459C99S19459C10__A1__8S19459C7[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19459C10D1Ev,_ZThn1560_N9S19459C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev)();
extern void ABISELECT(_ZThn2672_N9S19459C10D0Ev,_ZThn1560_N9S19459C10D0Ev)() __attribute__((weak));
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__9S19459C10__8S19459C7[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI9S19459C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev)();
extern void ABISELECT(_ZThn2256_N9S19459C10D1Ev,_ZThn1328_N9S19459C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev)();
extern void ABISELECT(_ZThn2256_N9S19459C10D0Ev,_ZThn1328_N9S19459C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__9S19459C10__8S19459C7[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI9S19459C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev),
};
extern void _ZN8S19459C9D1Ev();
extern void _ZN8S19459C9D0Ev();
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C9__8S19459C7[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&_ZN8S19459C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev)();
extern void ABISELECT(_ZThn64_N8S19459C9D1Ev,_ZThn32_N8S19459C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev)();
extern void ABISELECT(_ZThn64_N8S19459C9D0Ev,_ZThn32_N8S19459C9D0Ev)() __attribute__((weak));
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__8S19459C9__8S19459C7[] = {
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
static  VTT_ENTRY vtt_S19459C7[] = {
  {&(_ZTV8S19459C7[7]),  7,53},
  {&(_tg__ZTV9S19459C10__8S19459C7[4]),  4,7},
  {&(_tg__ZTV8S19459C99S19459C10__A1__8S19459C7[3]),  3,6},
  {&(_tg__ZTV8S19459C4__8S19459C99S19459C10__A1__8S19459C7[5]),  5,9},
  {&(_tg__ZTV8S19459C4__9S19459C10__8S19459C7[5]),  5,9},
  {&(_tg__ZTV8S19917C3__9S19459C10__8S19459C7[3]),  3,5},
  {&(_ZTV8S19459C7[18]),  18,53},
  {&(_ZTV8S19459C7[25]),  25,53},
  {&(_ZTV8S19459C7[33]),  33,53},
  {&(_ZTV8S19459C7[41]),  41,53},
  {&(_ZTV8S19459C7[49]),  49,53},
  {&(_tg__ZTV8S19459C9__8S19459C7[3]),  3,6},
  {&(_tg__ZTV8S19459C4__8S19459C9__8S19459C7[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S19459C7[];
extern  VTBL_ENTRY _ZTV8S19459C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C7[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S19459C10D0Ev,_ZThn1328_N9S19459C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19459C10D0Ev,_ZThn1560_N9S19459C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S19459C10D1Ev,_ZThn1328_N9S19459C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19459C10D1Ev,_ZThn1560_N9S19459C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19459C9D0Ev,_ZThn32_N8S19459C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19459C9D0Ev,_ZThn1560_N8S19459C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19459C9D1Ev,_ZThn32_N8S19459C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19459C9D1Ev,_ZThn1560_N8S19459C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C7D0Ev,_ZTv0_n16_N8S19459C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S19459C7D0Ev,_ZThn1528_N8S19459C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C7D1Ev,_ZTv0_n16_N8S19459C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S19459C7D1Ev,_ZThn1528_N8S19459C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3792_N8S19459C7D0Ev,_ZThn2200_N8S19459C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N8S19459C7D0Ev,_ZThn1820_N8S19459C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19459C7D0Ev,_ZThn1560_N8S19459C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S19459C7D0Ev,_ZThn1328_N8S19459C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3792_N8S19459C7D1Ev,_ZThn2200_N8S19459C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N8S19459C7D1Ev,_ZThn1820_N8S19459C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19459C7D1Ev,_ZThn1560_N8S19459C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S19459C7D1Ev,_ZThn1328_N8S19459C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19459C7 = {  "S19459C7", // class name
  bases_S19459C7, 12,
  &(vtc_S19459C7[0]), // expected_vtbl_contents
  &(vtt_S19459C7[0]), // expected_vtt_contents
  ABISELECT(4064,2356), // object size
  NSPAIRA(_ZTI8S19459C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19459C7),53, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19459C7),13, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19459C3  : virtual S19459C4 , virtual S19459C7 {
  __tsi64 s19459c3f0[3];
  int s19459c3f1;
  virtual  ~S19459C3(); // _ZN8S19459C3D2Ev
  S19459C3(); // tgen
};
//SIG(-1 S19459C3) C1{ VBC2{ BC3{ vd m Fp FD Fi Fp} v1 v2 FL[2] FC3 Fi[3] Fp[4] FC4{ BC3 vd v5 v6 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} Fc:5} VBC5{ VBC6{ vd m FC7{ BC3 vd v7 v8 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} FD[3] Fp} VBC8{ VBC2 BC3 vd v3 Fi} BC9{ VBC2 BC8 BC10{ vd v4 FL Fi FC4 Fi FC3 Fp Fi FC4 FD} VBC6 vd FC11{} FD[10] FC8 FC10 Fi} VBC10 VBC4 vd Fi Fc Fc:8 FD[8] Fi Fc Fp} vd FL[3] Fi}


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

static void Test_S19459C3()
{
  extern Class_Descriptor cd_S19459C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(258,598)];
    init_test(&cd_S19459C3, buf);
    S19459C3 *dp, &lv = *(dp=new (buf) S19459C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4112,2388), "sizeof(S19459C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19459C3)");
    check_base_class_offset(lv, (S19917C5*)(S19459C4*), ABISELECT(48,32), "S19459C3");
    check_base_class_offset(lv, (S19459C4*), ABISELECT(48,32), "S19459C3");
    /*is_ambiguous_... S19459C3::S19459C9 */ AMB_check_base_class_offset(lv, (S19459C4*)(S19459C9*), ABISELECT(48,32), "S19459C3");
    check_base_class_offset(lv, (S19459C4*)(S19459C10*)(S19459C7*), ABISELECT(48,32), "S19459C3");
    check_base_class_offset(lv, (S19459C4*)(S19459C9*)(S19459C10*)(S19459C7*), ABISELECT(48,32), "S19459C3");
    check_base_class_offset(lv, (S19917C3*)(S19459C7*), ABISELECT(2752,1620), "S19459C3");
    check_base_class_offset(lv, (S19917C3*)(S19459C10*)(S19459C7*), ABISELECT(2752,1620), "S19459C3");
    /*is_ambiguous_... S19459C3::S19459C9 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19459C9*), ABISELECT(3104,1820), "S19459C3");
    /*is_ambiguous_... S19459C7::S19459C9 */ AMB_check_base_class_offset(lv, (S19459C9*)(S19459C7*), ABISELECT(3104,1820), "S19459C3");
    /*is_ambiguous_... S19459C9::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19459C9*)(S19459C10*)(S19459C7*), ABISELECT(496,292), "S19459C3");
    check_base_class_offset(lv, (S19459C9*)(S19459C10*)(S19459C7*), ABISELECT(496,292), "S19459C3");
    check_base_class_offset(lv, (S19459C11*)(S19459C10*)(S19459C7*), ABISELECT(560,324), "S19459C3");
    check_base_class_offset(lv, (S19459C10*)(S19459C7*), ABISELECT(496,292), "S19459C3");
    /*is_ambiguous_... S19459C7::S19459C11 */ AMB_check_base_class_offset(lv, (S19459C11*)(S19459C7*), ABISELECT(3168,1852), "S19459C3");
    check_base_class_offset(lv, (S19917C5*)(S19459C6*), ABISELECT(3840,2232), "S19459C3");
    check_base_class_offset(lv, (S19459C6*)(S19459C7*), ABISELECT(3840,2232), "S19459C3");
    check_base_class_offset(lv, (S19459C7*), ABISELECT(496,292), "S19459C3");
    check_field_offset(lv, s19459c3f0, ABISELECT(8,4), "S19459C3.s19459c3f0");
    check_field_offset(lv, s19459c3f1, ABISELECT(32,28), "S19459C3.s19459c3f1");
    test_class_info(&lv, &cd_S19459C3);
    dp->~S19459C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19459C3(Test_S19459C3, "S19459C3", ABISELECT(4112,2388));

#else // __cplusplus

extern void _ZN8S19459C3C1Ev();
extern void _ZN8S19459C3D2Ev();
Name_Map name_map_S19459C3[] = {
  NSPAIR(_ZN8S19459C3C1Ev),
  NSPAIR(_ZN8S19459C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C4;
extern VTBL_ENTRY _ZTI8S19459C4[];
extern  VTBL_ENTRY _ZTV8S19459C4[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C9;
extern VTBL_ENTRY _ZTI8S19459C9[];
extern  VTBL_ENTRY _ZTV8S19459C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C9[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C9;
extern VTBL_ENTRY _ZTI8S19459C9[];
extern  VTBL_ENTRY _ZTV8S19459C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C9[];
extern Class_Descriptor cd_S19459C11;
extern VTBL_ENTRY _ZTI9S19459C11[];
extern  VTBL_ENTRY _ZTV9S19459C11[];
extern Class_Descriptor cd_S19459C10;
extern VTBL_ENTRY _ZTI9S19459C10[];
extern  VTBL_ENTRY _ZTV9S19459C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19459C10[];
extern Class_Descriptor cd_S19459C11;
extern VTBL_ENTRY _ZTI9S19459C11[];
extern  VTBL_ENTRY _ZTV9S19459C11[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C6;
extern VTBL_ENTRY _ZTI8S19459C6[];
extern  VTBL_ENTRY _ZTV8S19459C6[];
extern Class_Descriptor cd_S19459C7;
extern VTBL_ENTRY _ZTI8S19459C7[];
extern  VTBL_ENTRY _ZTV8S19459C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C7[];
static Base_Class bases_S19459C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    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
    1, //immediately_derived
  0, 0},
  {&cd_S19459C4,    ABISELECT(48,32), //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C3,    ABISELECT(2752,1620), //bcp->offset
    37, //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
    8, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(3104,1820), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19459C9,    ABISELECT(3104,1820), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(496,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
    9, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19459C9,    ABISELECT(496,292), //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
    10, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19459C11,    ABISELECT(560,324), //bcp->offset
    32, //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
    11, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19459C10,    ABISELECT(496,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19459C11,    ABISELECT(3168,1852), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(3840,2232), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19459C6,    ABISELECT(3840,2232), //bcp->offset
    57, //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
    8, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19459C7,    ABISELECT(496,292), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19459C3[];
extern void _ZN8S19459C3D1Ev();
extern void _ZN8S19459C3D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S19459C3D1Ev,_ZThn32_N8S19459C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev)();
extern void ABISELECT(_ZThn48_N8S19459C3D0Ev,_ZThn32_N8S19459C3D0Ev)() __attribute__((weak));
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19459C3D1Ev,_ZTv0_n32_N8S19459C3D1Ev)();
extern void ABISELECT(_ZThn496_N8S19459C3D1Ev,_ZThn292_N8S19459C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19459C3D0Ev,_ZTv0_n32_N8S19459C3D0Ev)();
extern void ABISELECT(_ZThn496_N8S19459C3D0Ev,_ZThn292_N8S19459C3D0Ev)() __attribute__((weak));
extern void _ZN8S19459C92v4Ev();
extern void ABISELECT(_ZTvn64_n64_N8S19459C3D1Ev,_ZTvn32_n32_N8S19459C3D1Ev)();
extern void ABISELECT(_ZTvn64_n64_N8S19459C3D0Ev,_ZTvn32_n32_N8S19459C3D0Ev)();
extern void _ZN9S19459C112v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev)();
extern void ABISELECT(_ZThn2752_N8S19459C3D1Ev,_ZThn1620_N8S19459C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev)();
extern void ABISELECT(_ZThn2752_N8S19459C3D0Ev,_ZThn1620_N8S19459C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19459C3D1Ev,_ZTv0_n16_N8S19459C3D1Ev)();
extern void ABISELECT(_ZThn3104_N8S19459C3D1Ev,_ZThn1820_N8S19459C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19459C3D0Ev,_ZTv0_n16_N8S19459C3D0Ev)();
extern void ABISELECT(_ZThn3104_N8S19459C3D0Ev,_ZThn1820_N8S19459C3D0Ev)() __attribute__((weak));
extern void _ZN8S19459C92v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev)();
extern void ABISELECT(_ZThn3168_N8S19459C3D1Ev,_ZThn1852_N8S19459C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev)();
extern void ABISELECT(_ZThn3168_N8S19459C3D0Ev,_ZThn1852_N8S19459C3D0Ev)() __attribute__((weak));
extern void _ZN9S19459C112v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev)();
extern void ABISELECT(_ZThn3840_N8S19459C3D1Ev,_ZThn2232_N8S19459C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev)();
extern void ABISELECT(_ZThn3840_N8S19459C3D0Ev,_ZThn2232_N8S19459C3D0Ev)() __attribute__((weak));
extern void _ZN8S19459C62v6Ev();
extern void _ZN8S19459C62v7Ev();
static  VTBL_ENTRY vtc_S19459C3[] = {
  ABISELECT(3840,2232),
  ABISELECT(3168,1852),
  ABISELECT(3104,1820),
  ABISELECT(2752,1620),
  ABISELECT(496,292),
  ABISELECT(48,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&_ZN8S19459C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C3D0Ev,
  0,
  0,
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
  ABISELECT(64,32),
  0,
  ABISELECT(-496,-292),
  ABISELECT(3344,1940),
  ABISELECT(2672,1560),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(-448,-260),
  ABISELECT(-496,-292),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19459C3D1Ev,_ZTv0_n32_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19459C3D0Ev,_ZTv0_n32_N8S19459C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
  ABISELECT(-560,-324),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S19459C3D1Ev,_ZTvn32_n32_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S19459C3D0Ev,_ZTvn32_n32_N8S19459C3D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
  ABISELECT(-2752,-1620),
  ABISELECT(-2752,-1620),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev),
  0,
  ABISELECT(-3104,-1820),
  ABISELECT(-3056,-1788),
  ABISELECT(-3104,-1820),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C3D1Ev,_ZTv0_n16_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C3D0Ev,_ZTv0_n16_N8S19459C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
  0,
  ABISELECT(-3168,-1852),
  ABISELECT(-3168,-1852),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
  0,
  0,
  ABISELECT(-3840,-2232),
  ABISELECT(-3840,-2232),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19459C62v7Ev,
};
extern VTBL_ENTRY _ZTV8S19459C3[];
extern void _ZN8S19459C7D1Ev();
extern void _ZN8S19459C7D0Ev();
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C7__8S19459C3[] = {
  ABISELECT(3344,1940),
  ABISELECT(2672,1560),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(-448,-260),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&_ZN8S19459C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void _ZN9S19459C10D1Ev();
extern void _ZN9S19459C10D0Ev();
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19459C108S19459C7__8S19459C3[] = {
  ABISELECT(2256,1328),
  ABISELECT(-448,-260),
  0,
  (VTBL_ENTRY)&(_ZTI9S19459C10[0]),
  (VTBL_ENTRY)&_ZN9S19459C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19459C10D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void _ZN8S19459C9D1Ev();
extern void _ZN8S19459C9D0Ev();
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C99S19459C108S19459C7__A1__8S19459C3[] = {
  ABISELECT(-448,-260),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&_ZN8S19459C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev)();
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__8S19459C99S19459C108S19459C7__A1__8S19459C3[] = {
  0,
  0,
  ABISELECT(448,260),
  ABISELECT(448,260),
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev)();
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__9S19459C108S19459C7__8S19459C3[] = {
  0,
  0,
  ABISELECT(448,260),
  ABISELECT(448,260),
  (VTBL_ENTRY)&(_ZTI9S19459C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev)();
extern void ABISELECT(_ZThn2256_N9S19459C10D1Ev,_ZThn1328_N9S19459C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev)();
extern void ABISELECT(_ZThn2256_N9S19459C10D0Ev,_ZThn1328_N9S19459C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__9S19459C108S19459C7__8S19459C3[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI9S19459C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev)();
extern void ABISELECT(_ZThn2256_N8S19459C7D1Ev,_ZThn1328_N8S19459C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev)();
extern void ABISELECT(_ZThn2256_N8S19459C7D0Ev,_ZThn1328_N8S19459C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__8S19459C7__8S19459C3[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19459C7D1Ev,_ZTv0_n16_N8S19459C7D1Ev)();
extern void ABISELECT(_ZThn2608_N8S19459C7D1Ev,_ZThn1528_N8S19459C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19459C7D0Ev,_ZTv0_n16_N8S19459C7D0Ev)();
extern void ABISELECT(_ZThn2608_N8S19459C7D0Ev,_ZThn1528_N8S19459C7D0Ev)() __attribute__((weak));
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C9__8S19459C7__8S19459C3[] = {
  0,
  ABISELECT(-2608,-1528),
  ABISELECT(-3056,-1788),
  ABISELECT(-2608,-1528),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C7D1Ev,_ZTv0_n16_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C7D0Ev,_ZTv0_n16_N8S19459C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev)();
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__8S19459C7__8S19459C3[] = {
  0,
  0,
  ABISELECT(448,260),
  ABISELECT(448,260),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev)();
extern void ABISELECT(_ZThn2672_N8S19459C7D1Ev,_ZThn1560_N8S19459C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev)();
extern void ABISELECT(_ZThn2672_N8S19459C7D0Ev,_ZThn1560_N8S19459C7D0Ev)() __attribute__((weak));
extern void _ZN9S19459C112v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19459C11__A1__8S19459C7__8S19459C3[] = {
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev)();
extern void ABISELECT(_ZThn3344_N8S19459C7D1Ev,_ZThn1940_N8S19459C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev)();
extern void ABISELECT(_ZThn3344_N8S19459C7D0Ev,_ZThn1940_N8S19459C7D0Ev)() __attribute__((weak));
extern void _ZN8S19459C62v6Ev();
extern void _ZN8S19459C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C6__8S19459C7__8S19459C3[] = {
  0,
  0,
  ABISELECT(-3344,-1940),
  ABISELECT(-3344,-1940),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19459C62v7Ev,
};
extern void _ZN8S19459C9D1Ev();
extern void _ZN8S19459C9D0Ev();
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C9__8S19459C3[] = {
  ABISELECT(-3056,-1788),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&_ZN8S19459C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev)();
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__8S19459C9__8S19459C3[] = {
  0,
  0,
  ABISELECT(3056,1788),
  ABISELECT(3056,1788),
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
static  VTT_ENTRY vtt_S19459C3[] = {
  {&(_ZTV8S19459C3[8]),  8,66},
  {&(_ZTV8S19459C3[15]),  15,66},
  {&(_ZTV8S19459C3[29]),  29,66},
  {&(_ZTV8S19459C3[40]),  40,66},
  {&(_ZTV8S19459C3[47]),  47,66},
  {&(_ZTV8S19459C3[34]),  34,66},
  {&(_ZTV8S19459C3[54]),  54,66},
  {&(_ZTV8S19459C3[62]),  62,66},
  {&(_tg__ZTV8S19459C7__8S19459C3[7]),  7,10},
  {&(_tg__ZTV9S19459C108S19459C7__8S19459C3[4]),  4,7},
  {&(_tg__ZTV8S19459C99S19459C108S19459C7__A1__8S19459C3[3]),  3,6},
  {&(_tg__ZTV8S19459C4__8S19459C99S19459C108S19459C7__A1__8S19459C3[5]),  5,9},
  {&(_tg__ZTV8S19459C4__9S19459C108S19459C7__8S19459C3[5]),  5,9},
  {&(_tg__ZTV8S19917C3__9S19459C108S19459C7__8S19459C3[3]),  3,5},
  {&(_tg__ZTV8S19917C3__8S19459C7__8S19459C3[3]),  3,5},
  {&(_tg__ZTV8S19459C9__8S19459C7__8S19459C3[5]),  5,8},
  {&(_tg__ZTV8S19459C4__8S19459C7__8S19459C3[5]),  5,9},
  {&(_tg__ZTV9S19459C11__A1__8S19459C7__8S19459C3[4]),  4,7},
  {&(_tg__ZTV8S19459C6__8S19459C7__8S19459C3[5]),  5,9},
  {&(_tg__ZTV8S19459C9__8S19459C3[3]),  3,6},
  {&(_tg__ZTV8S19459C4__8S19459C9__8S19459C3[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S19459C3[];
extern  VTBL_ENTRY _ZTV8S19459C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C3[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C7D0Ev,_ZTv0_n16_N8S19459C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S19459C7D0Ev,_ZThn1528_N8S19459C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C7D1Ev,_ZTv0_n16_N8S19459C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S19459C7D1Ev,_ZThn1528_N8S19459C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3344_N8S19459C7D0Ev,_ZThn1940_N8S19459C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19459C7D0Ev,_ZThn1560_N8S19459C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S19459C7D0Ev,_ZThn1328_N8S19459C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3344_N8S19459C7D1Ev,_ZThn1940_N8S19459C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19459C7D1Ev,_ZThn1560_N8S19459C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S19459C7D1Ev,_ZThn1328_N8S19459C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S19459C10D0Ev,_ZThn1328_N9S19459C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S19459C10D1Ev,_ZThn1328_N9S19459C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C3D0Ev,_ZTv0_n16_N8S19459C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3104_N8S19459C3D0Ev,_ZThn1820_N8S19459C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C3D1Ev,_ZTv0_n16_N8S19459C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3104_N8S19459C3D1Ev,_ZThn1820_N8S19459C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19459C3D0Ev,_ZTv0_n32_N8S19459C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S19459C3D0Ev,_ZThn292_N8S19459C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19459C3D1Ev,_ZTv0_n32_N8S19459C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S19459C3D1Ev,_ZThn292_N8S19459C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3840_N8S19459C3D0Ev,_ZThn2232_N8S19459C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N8S19459C3D0Ev,_ZThn1852_N8S19459C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N8S19459C3D0Ev,_ZThn1620_N8S19459C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19459C3D0Ev,_ZThn32_N8S19459C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3840_N8S19459C3D1Ev,_ZThn2232_N8S19459C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N8S19459C3D1Ev,_ZThn1852_N8S19459C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N8S19459C3D1Ev,_ZThn1620_N8S19459C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19459C3D1Ev,_ZThn32_N8S19459C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19459C3 = {  "S19459C3", // class name
  bases_S19459C3, 13,
  &(vtc_S19459C3[0]), // expected_vtbl_contents
  &(vtt_S19459C3[0]), // expected_vtt_contents
  ABISELECT(4112,2388), // object size
  NSPAIRA(_ZTI8S19459C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19459C3),66, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19459C3),21, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19459C13  {
  __tsi64 s19459c13f0;
  int s19459c13f1;
  __tsi64 s19459c13f2;
  void *s19459c13f3;
  int s19459c13f4;
  void *s19459c13f5;
  long double s19459c13f6;
  __tsi64 s19459c13f7[6];
  void *s19459c13f8;
  virtual void  v8(); // _ZN9S19459C132v8Ev
  ~S19459C13(); // tgen
  S19459C13(); // tgen
};
//SIG(-1 S19459C13) C1{ v1 FL Fi FL Fp Fi Fp FD FL[6] Fp}


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

static void Test_S19459C13()
{
  extern Class_Descriptor cd_S19459C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,26)];
    init_test(&cd_S19459C13, buf);
    S19459C13 *dp, &lv = *(dp=new (buf) S19459C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,100), "sizeof(S19459C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19459C13)");
    check_field_offset(lv, s19459c13f0, ABISELECT(8,4), "S19459C13.s19459c13f0");
    check_field_offset(lv, s19459c13f1, ABISELECT(16,12), "S19459C13.s19459c13f1");
    check_field_offset(lv, s19459c13f2, ABISELECT(24,16), "S19459C13.s19459c13f2");
    check_field_offset(lv, s19459c13f3, ABISELECT(32,24), "S19459C13.s19459c13f3");
    check_field_offset(lv, s19459c13f4, ABISELECT(40,28), "S19459C13.s19459c13f4");
    check_field_offset(lv, s19459c13f5, ABISELECT(48,32), "S19459C13.s19459c13f5");
    check_field_offset(lv, s19459c13f6, ABISELECT(64,36), "S19459C13.s19459c13f6");
    check_field_offset(lv, s19459c13f7, ABISELECT(80,48), "S19459C13.s19459c13f7");
    check_field_offset(lv, s19459c13f8, ABISELECT(128,96), "S19459C13.s19459c13f8");
    test_class_info(&lv, &cd_S19459C13);
    dp->~S19459C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19459C13(Test_S19459C13, "S19459C13", ABISELECT(144,100));

#else // __cplusplus

extern void _ZN9S19459C13C1Ev();
extern void _ZN9S19459C13D1Ev();
Name_Map name_map_S19459C13[] = {
  NSPAIR(_ZN9S19459C13C1Ev),
  NSPAIR(_ZN9S19459C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19459C13[];
extern void _ZN9S19459C132v8Ev();
static  VTBL_ENTRY vtc_S19459C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19459C13[0]),
  (VTBL_ENTRY)&_ZN9S19459C132v8Ev,
};
extern VTBL_ENTRY _ZTI9S19459C13[];
extern  VTBL_ENTRY _ZTV9S19459C13[];
Class_Descriptor cd_S19459C13 = {  "S19459C13", // class name
  0,0,//no base classes
  &(vtc_S19459C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,100), // object size
  NSPAIRA(_ZTI9S19459C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19459C13),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  S19459C2  : S19459C3 , S19459C11 , S19459C13 , S19459C4 {
  short s19459c2f0;
  __tsi64 s19459c2f1[3];
  long double s19459c2f2;
  __tsi64 s19459c2f3[2];
  long double s19459c2f4[10];
  ::S19459C4 s19459c2f5;
  virtual  ~S19459C2(); // _ZN8S19459C2D2Ev
  virtual void  v9(); // _ZN8S19459C22v9Ev
  S19459C2(); // tgen
};
//SIG(-1 S19459C2) C1{ BC2{ VBC3{ BC4{ vd m Fp FD Fi Fp} v2 v3 FL[2] FC4 Fi[3] Fp[4] FC5{ BC4 vd v6 v7 Fi Fp[4] FD[5] Fp[2] FC4 Fl[3]} Fc:5} VBC6{ VBC7{ vd m FC8{ BC4 vd v9 v10 Fi Fp[4] FD[5] Fp[2] FC4 Fl[3]} FD[3] Fp} VBC9{ VBC3 BC4 vd v4 Fi} BC10{ VBC3 BC9 BC11{ vd v5 FL Fi FC5 Fi FC4 Fp Fi FC5 FD} VBC7 vd FC12{} FD[10] FC9 FC11 Fi} VBC11 VBC5 vd Fi Fc Fc:8 FD[8] Fi Fc Fp} vd FL[3] Fi} BC11 BC13{ v8 FL Fi FL Fp Fi Fp FD FL[6] Fp} BC3 vd v1 Fs FL[3] FD FL[2] FD[10] FC3}


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

static void Test_S19459C2()
{
  extern Class_Descriptor cd_S19459C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(378,891)];
    init_test(&cd_S19459C2, buf);
    S19459C2 *dp, &lv = *(dp=new (buf) S19459C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6032,3560), "sizeof(S19459C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19459C2)");
    /*is_ambiguous_... S19459C2::S19459C4 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19459C4*), ABISELECT(1968,1204), "S19459C2");
    check_base_class_offset(lv, (S19459C4*)(S19459C3*), ABISELECT(1968,1204), "S19459C2");
    /*is_ambiguous_... S19459C2::S19459C9 */ AMB_check_base_class_offset(lv, (S19459C4*)(S19459C9*), ABISELECT(1968,1204), "S19459C2");
    check_base_class_offset(lv, (S19459C4*)(S19459C10*)(S19459C7*), ABISELECT(1968,1204), "S19459C2");
    check_base_class_offset(lv, (S19459C4*)(S19459C9*)(S19459C10*)(S19459C7*), ABISELECT(1968,1204), "S19459C2");
    check_base_class_offset(lv, (S19917C3*)(S19459C7*), ABISELECT(4672,2792), "S19459C2");
    check_base_class_offset(lv, (S19917C3*)(S19459C10*)(S19459C7*), ABISELECT(4672,2792), "S19459C2");
    /*is_ambiguous_... S19459C2::S19459C9 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19459C9*), ABISELECT(5024,2992), "S19459C2");
    /*is_ambiguous_... S19459C7::S19459C9 */ AMB_check_base_class_offset(lv, (S19459C9*)(S19459C7*), ABISELECT(5024,2992), "S19459C2");
    /*is_ambiguous_... S19459C9::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19459C9*)(S19459C10*)(S19459C7*), ABISELECT(2416,1464), "S19459C2");
    check_base_class_offset(lv, (S19459C9*)(S19459C10*)(S19459C7*), ABISELECT(2416,1464), "S19459C2");
    check_base_class_offset(lv, (S19459C11*)(S19459C10*)(S19459C7*), ABISELECT(2480,1496), "S19459C2");
    check_base_class_offset(lv, (S19459C10*)(S19459C7*), ABISELECT(2416,1464), "S19459C2");
    /*is_ambiguous_... S19459C7::S19459C11 */ AMB_check_base_class_offset(lv, (S19459C11*)(S19459C7*), ABISELECT(5088,3024), "S19459C2");
    check_base_class_offset(lv, (S19917C5*)(S19459C6*), ABISELECT(5760,3404), "S19459C2");
    check_base_class_offset(lv, (S19459C6*)(S19459C7*), ABISELECT(5760,3404), "S19459C2");
    check_base_class_offset(lv, (S19459C7*)(S19459C3*), ABISELECT(2416,1464), "S19459C2");
    check_base_class_offset(lv, (S19459C3*), 0, "S19459C2");
    /*is_ambiguous_... S19459C2::S19459C11 */ AMB_check_base_class_offset(lv, (S19459C11*), ABISELECT(48,32), "S19459C2");
    check_base_class_offset(lv, (S19459C13*), ABISELECT(720,412), "S19459C2");
    /*is_ambiguous_... S19459C2::S19459C4 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19459C4*), ABISELECT(864,512), "S19459C2");
    /*is_ambiguous_... S19459C2::S19459C4 */ AMB_check_base_class_offset(lv, (S19459C4*), ABISELECT(864,512), "S19459C2");
    check_field_offset(lv, s19459c2f0, ABISELECT(1298,770), "S19459C2.s19459c2f0");
    check_field_offset(lv, s19459c2f1, ABISELECT(1304,772), "S19459C2.s19459c2f1");
    check_field_offset(lv, s19459c2f2, ABISELECT(1328,796), "S19459C2.s19459c2f2");
    check_field_offset(lv, s19459c2f3, ABISELECT(1344,808), "S19459C2.s19459c2f3");
    check_field_offset(lv, s19459c2f4, ABISELECT(1360,824), "S19459C2.s19459c2f4");
    check_field_offset(lv, s19459c2f5, ABISELECT(1520,944), "S19459C2.s19459c2f5");
    test_class_info(&lv, &cd_S19459C2);
    dp->~S19459C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19459C2(Test_S19459C2, "S19459C2", ABISELECT(6032,3560));

#else // __cplusplus

extern void _ZN8S19459C2C1Ev();
extern void _ZN8S19459C2D2Ev();
Name_Map name_map_S19459C2[] = {
  NSPAIR(_ZN8S19459C2C1Ev),
  NSPAIR(_ZN8S19459C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C4;
extern VTBL_ENTRY _ZTI8S19459C4[];
extern  VTBL_ENTRY _ZTV8S19459C4[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C9;
extern VTBL_ENTRY _ZTI8S19459C9[];
extern  VTBL_ENTRY _ZTV8S19459C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C9[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C9;
extern VTBL_ENTRY _ZTI8S19459C9[];
extern  VTBL_ENTRY _ZTV8S19459C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C9[];
extern Class_Descriptor cd_S19459C11;
extern VTBL_ENTRY _ZTI9S19459C11[];
extern  VTBL_ENTRY _ZTV9S19459C11[];
extern Class_Descriptor cd_S19459C10;
extern VTBL_ENTRY _ZTI9S19459C10[];
extern  VTBL_ENTRY _ZTV9S19459C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19459C10[];
extern Class_Descriptor cd_S19459C11;
extern VTBL_ENTRY _ZTI9S19459C11[];
extern  VTBL_ENTRY _ZTV9S19459C11[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C6;
extern VTBL_ENTRY _ZTI8S19459C6[];
extern  VTBL_ENTRY _ZTV8S19459C6[];
extern Class_Descriptor cd_S19459C7;
extern VTBL_ENTRY _ZTI8S19459C7[];
extern  VTBL_ENTRY _ZTV8S19459C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C7[];
extern Class_Descriptor cd_S19459C3;
extern VTBL_ENTRY _ZTI8S19459C3[];
extern  VTBL_ENTRY _ZTV8S19459C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C3[];
extern Class_Descriptor cd_S19459C11;
extern VTBL_ENTRY _ZTI9S19459C11[];
extern  VTBL_ENTRY _ZTV9S19459C11[];
extern Class_Descriptor cd_S19459C13;
extern VTBL_ENTRY _ZTI9S19459C13[];
extern  VTBL_ENTRY _ZTV9S19459C13[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C4;
extern VTBL_ENTRY _ZTI8S19459C4[];
extern  VTBL_ENTRY _ZTV8S19459C4[];
static Base_Class bases_S19459C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    ABISELECT(1968,1204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19459C4,    ABISELECT(1968,1204), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19917C3,    ABISELECT(4672,2792), //bcp->offset
    52, //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
    8, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(5024,2992), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19459C9,    ABISELECT(5024,2992), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(2416,1464), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19459C9,    ABISELECT(2416,1464), //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
    10, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19459C11,    ABISELECT(2480,1496), //bcp->offset
    47, //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
    11, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19459C10,    ABISELECT(2416,1464), //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
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19459C11,    ABISELECT(5088,3024), //bcp->offset
    65, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(5760,3404), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19459C6,    ABISELECT(5760,3404), //bcp->offset
    72, //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
    8, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19459C7,    ABISELECT(2416,1464), //bcp->offset
    34, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19459C3,    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
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19459C11,    ABISELECT(48,32), //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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19459C13,    ABISELECT(720,412), //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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19917C5,    ABISELECT(864,512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19459C4,    ABISELECT(864,512), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19459C2[];
extern void _ZN8S19459C2D1Ev();
extern void _ZN8S19459C2D0Ev();
extern void _ZN8S19459C22v9Ev();
extern void ABISELECT(_ZThn48_N8S19459C2D1Ev,_ZThn32_N8S19459C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S19459C2D0Ev,_ZThn32_N8S19459C2D0Ev)();
extern void _ZN9S19459C112v5Ev();
extern void _ZN9S19459C132v8Ev();
extern void ABISELECT(_ZThn864_N8S19459C2D1Ev,_ZThn512_N8S19459C2D1Ev)();
extern void ABISELECT(_ZThn864_N8S19459C2D0Ev,_ZThn512_N8S19459C2D0Ev)();
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S19459C2D1Ev,_ZTv0_n12_N8S19459C2D1Ev)();
extern void ABISELECT(_ZThn1968_N8S19459C2D1Ev,_ZThn1204_N8S19459C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C2D0Ev,_ZTv0_n12_N8S19459C2D0Ev)();
extern void ABISELECT(_ZThn1968_N8S19459C2D0Ev,_ZThn1204_N8S19459C2D0Ev)() __attribute__((weak));
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19459C2D1Ev,_ZTv0_n32_N8S19459C2D1Ev)();
extern void ABISELECT(_ZThn2416_N8S19459C2D1Ev,_ZThn1464_N8S19459C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19459C2D0Ev,_ZTv0_n32_N8S19459C2D0Ev)();
extern void ABISELECT(_ZThn2416_N8S19459C2D0Ev,_ZThn1464_N8S19459C2D0Ev)() __attribute__((weak));
extern void _ZN8S19459C92v4Ev();
extern void ABISELECT(_ZTvn64_n64_N8S19459C2D1Ev,_ZTvn32_n32_N8S19459C2D1Ev)();
extern void ABISELECT(_ZTvn64_n64_N8S19459C2D0Ev,_ZTvn32_n32_N8S19459C2D0Ev)();
extern void _ZN9S19459C112v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S19459C2D1Ev,_ZTv0_n12_N8S19459C2D1Ev)();
extern void ABISELECT(_ZThn4672_N8S19459C2D1Ev,_ZThn2792_N8S19459C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C2D0Ev,_ZTv0_n12_N8S19459C2D0Ev)();
extern void ABISELECT(_ZThn4672_N8S19459C2D0Ev,_ZThn2792_N8S19459C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19459C2D1Ev,_ZTv0_n16_N8S19459C2D1Ev)();
extern void ABISELECT(_ZThn5024_N8S19459C2D1Ev,_ZThn2992_N8S19459C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19459C2D0Ev,_ZTv0_n16_N8S19459C2D0Ev)();
extern void ABISELECT(_ZThn5024_N8S19459C2D0Ev,_ZThn2992_N8S19459C2D0Ev)() __attribute__((weak));
extern void _ZN8S19459C92v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S19459C2D1Ev,_ZTv0_n12_N8S19459C2D1Ev)();
extern void ABISELECT(_ZThn5088_N8S19459C2D1Ev,_ZThn3024_N8S19459C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C2D0Ev,_ZTv0_n12_N8S19459C2D0Ev)();
extern void ABISELECT(_ZThn5088_N8S19459C2D0Ev,_ZThn3024_N8S19459C2D0Ev)() __attribute__((weak));
extern void _ZN9S19459C112v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S19459C2D1Ev,_ZTv0_n12_N8S19459C2D1Ev)();
extern void ABISELECT(_ZThn5760_N8S19459C2D1Ev,_ZThn3404_N8S19459C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C2D0Ev,_ZTv0_n12_N8S19459C2D0Ev)();
extern void ABISELECT(_ZThn5760_N8S19459C2D0Ev,_ZThn3404_N8S19459C2D0Ev)() __attribute__((weak));
extern void _ZN8S19459C62v6Ev();
extern void _ZN8S19459C62v7Ev();
static  VTBL_ENTRY vtc_S19459C2[] = {
  ABISELECT(5760,3404),
  ABISELECT(5088,3024),
  ABISELECT(5024,2992),
  ABISELECT(4672,2792),
  ABISELECT(2416,1464),
  ABISELECT(1968,1204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&_ZN8S19459C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C22v9Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S19459C2D1Ev,_ZThn32_N8S19459C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S19459C2D0Ev,_ZThn32_N8S19459C2D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
  ABISELECT(-720,-412),
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&_ZN9S19459C132v8Ev,
  ABISELECT(-864,-512),
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn864_N8S19459C2D1Ev,_ZThn512_N8S19459C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn864_N8S19459C2D0Ev,_ZThn512_N8S19459C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
  0,
  0,
  ABISELECT(-1968,-1204),
  ABISELECT(-1968,-1204),
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C2D1Ev,_ZTv0_n12_N8S19459C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C2D0Ev,_ZTv0_n12_N8S19459C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
  ABISELECT(64,32),
  0,
  ABISELECT(-2416,-1464),
  ABISELECT(3344,1940),
  ABISELECT(2672,1560),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(-448,-260),
  ABISELECT(-2416,-1464),
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19459C2D1Ev,_ZTv0_n32_N8S19459C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19459C2D0Ev,_ZTv0_n32_N8S19459C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
  ABISELECT(-2480,-1496),
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S19459C2D1Ev,_ZTvn32_n32_N8S19459C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S19459C2D0Ev,_ZTvn32_n32_N8S19459C2D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
  ABISELECT(-4672,-2792),
  ABISELECT(-4672,-2792),
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C2D1Ev,_ZTv0_n12_N8S19459C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C2D0Ev,_ZTv0_n12_N8S19459C2D0Ev),
  0,
  ABISELECT(-5024,-2992),
  ABISELECT(-3056,-1788),
  ABISELECT(-5024,-2992),
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C2D1Ev,_ZTv0_n16_N8S19459C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C2D0Ev,_ZTv0_n16_N8S19459C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
  0,
  ABISELECT(-5088,-3024),
  ABISELECT(-5088,-3024),
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C2D1Ev,_ZTv0_n12_N8S19459C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C2D0Ev,_ZTv0_n12_N8S19459C2D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
  0,
  0,
  ABISELECT(-5760,-3404),
  ABISELECT(-5760,-3404),
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C2D1Ev,_ZTv0_n12_N8S19459C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C2D0Ev,_ZTv0_n12_N8S19459C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19459C62v7Ev,
};
extern VTBL_ENTRY _ZTV8S19459C2[];
extern void _ZN8S19459C3D1Ev();
extern void _ZN8S19459C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C3__8S19459C2[] = {
  ABISELECT(5760,3404),
  ABISELECT(5088,3024),
  ABISELECT(5024,2992),
  ABISELECT(4672,2792),
  ABISELECT(2416,1464),
  ABISELECT(1968,1204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&_ZN8S19459C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev)();
extern void ABISELECT(_ZThn1968_N8S19459C3D1Ev,_ZThn1204_N8S19459C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev)();
extern void ABISELECT(_ZThn1968_N8S19459C3D0Ev,_ZThn1204_N8S19459C3D0Ev)() __attribute__((weak));
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__8S19459C3__8S19459C2[] = {
  0,
  0,
  ABISELECT(-1968,-1204),
  ABISELECT(-1968,-1204),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S19459C3D1Ev,_ZTv0_n32_N8S19459C3D1Ev)();
extern void ABISELECT(_ZThn2416_N8S19459C3D1Ev,_ZThn1464_N8S19459C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19459C3D0Ev,_ZTv0_n32_N8S19459C3D0Ev)();
extern void ABISELECT(_ZThn2416_N8S19459C3D0Ev,_ZThn1464_N8S19459C3D0Ev)() __attribute__((weak));
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C7__8S19459C3__8S19459C2[] = {
  ABISELECT(64,32),
  0,
  ABISELECT(-2416,-1464),
  ABISELECT(3344,1940),
  ABISELECT(2672,1560),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(-448,-260),
  ABISELECT(-2416,-1464),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19459C3D1Ev,_ZTv0_n32_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19459C3D0Ev,_ZTv0_n32_N8S19459C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev)();
extern void ABISELECT(_ZThn4672_N8S19459C3D1Ev,_ZThn2792_N8S19459C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev)();
extern void ABISELECT(_ZThn4672_N8S19459C3D0Ev,_ZThn2792_N8S19459C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__8S19459C3__8S19459C2[] = {
  ABISELECT(-4672,-2792),
  ABISELECT(-4672,-2792),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19459C3D1Ev,_ZTv0_n16_N8S19459C3D1Ev)();
extern void ABISELECT(_ZThn5024_N8S19459C3D1Ev,_ZThn2992_N8S19459C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19459C3D0Ev,_ZTv0_n16_N8S19459C3D0Ev)();
extern void ABISELECT(_ZThn5024_N8S19459C3D0Ev,_ZThn2992_N8S19459C3D0Ev)() __attribute__((weak));
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C9__8S19459C3__8S19459C2[] = {
  0,
  ABISELECT(-5024,-2992),
  ABISELECT(-3056,-1788),
  ABISELECT(-5024,-2992),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C3D1Ev,_ZTv0_n16_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C3D0Ev,_ZTv0_n16_N8S19459C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void ABISELECT(_ZTvn64_n64_N8S19459C3D1Ev,_ZTvn32_n32_N8S19459C3D1Ev)();
extern void ABISELECT(_ZTvn64_n64_N8S19459C3D0Ev,_ZTvn32_n32_N8S19459C3D0Ev)();
extern void _ZN9S19459C112v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19459C119S19459C108S19459C7__8S19459C3__8S19459C2[] = {
  ABISELECT(-2480,-1496),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S19459C3D1Ev,_ZTvn32_n32_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S19459C3D0Ev,_ZTvn32_n32_N8S19459C3D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev)();
extern void ABISELECT(_ZThn5088_N8S19459C3D1Ev,_ZThn3024_N8S19459C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev)();
extern void ABISELECT(_ZThn5088_N8S19459C3D0Ev,_ZThn3024_N8S19459C3D0Ev)() __attribute__((weak));
extern void _ZN9S19459C112v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19459C11__A1__8S19459C3__8S19459C2[] = {
  0,
  ABISELECT(-5088,-3024),
  ABISELECT(-5088,-3024),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev)();
extern void ABISELECT(_ZThn5760_N8S19459C3D1Ev,_ZThn3404_N8S19459C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev)();
extern void ABISELECT(_ZThn5760_N8S19459C3D0Ev,_ZThn3404_N8S19459C3D0Ev)() __attribute__((weak));
extern void _ZN8S19459C62v6Ev();
extern void _ZN8S19459C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C6__8S19459C3__8S19459C2[] = {
  0,
  0,
  ABISELECT(-5760,-3404),
  ABISELECT(-5760,-3404),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19459C62v7Ev,
};
extern void _ZN8S19459C7D1Ev();
extern void _ZN8S19459C7D0Ev();
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C7__8S19459C2[] = {
  ABISELECT(3344,1940),
  ABISELECT(2672,1560),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(-448,-260),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&_ZN8S19459C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void _ZN9S19459C10D1Ev();
extern void _ZN9S19459C10D0Ev();
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19459C108S19459C7__8S19459C2[] = {
  ABISELECT(2256,1328),
  ABISELECT(-448,-260),
  0,
  (VTBL_ENTRY)&(_ZTI9S19459C10[0]),
  (VTBL_ENTRY)&_ZN9S19459C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19459C10D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void _ZN8S19459C9D1Ev();
extern void _ZN8S19459C9D0Ev();
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C99S19459C108S19459C7__A1__8S19459C2[] = {
  ABISELECT(-448,-260),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&_ZN8S19459C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev)();
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__8S19459C99S19459C108S19459C7__A1__8S19459C2[] = {
  0,
  0,
  ABISELECT(448,260),
  ABISELECT(448,260),
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev)();
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__9S19459C108S19459C7__8S19459C2[] = {
  0,
  0,
  ABISELECT(448,260),
  ABISELECT(448,260),
  (VTBL_ENTRY)&(_ZTI9S19459C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev)();
extern void ABISELECT(_ZThn2256_N9S19459C10D1Ev,_ZThn1328_N9S19459C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev)();
extern void ABISELECT(_ZThn2256_N9S19459C10D0Ev,_ZThn1328_N9S19459C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__9S19459C108S19459C7__8S19459C2[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI9S19459C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev)();
extern void ABISELECT(_ZThn2256_N8S19459C7D1Ev,_ZThn1328_N8S19459C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev)();
extern void ABISELECT(_ZThn2256_N8S19459C7D0Ev,_ZThn1328_N8S19459C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__8S19459C7__8S19459C2[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19459C7D1Ev,_ZTv0_n16_N8S19459C7D1Ev)();
extern void ABISELECT(_ZThn2608_N8S19459C7D1Ev,_ZThn1528_N8S19459C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19459C7D0Ev,_ZTv0_n16_N8S19459C7D0Ev)();
extern void ABISELECT(_ZThn2608_N8S19459C7D0Ev,_ZThn1528_N8S19459C7D0Ev)() __attribute__((weak));
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C9__8S19459C7__8S19459C2[] = {
  0,
  ABISELECT(-2608,-1528),
  ABISELECT(-3056,-1788),
  ABISELECT(-2608,-1528),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C7D1Ev,_ZTv0_n16_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C7D0Ev,_ZTv0_n16_N8S19459C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev)();
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__8S19459C7__8S19459C2[] = {
  0,
  0,
  ABISELECT(448,260),
  ABISELECT(448,260),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev)();
extern void ABISELECT(_ZThn2672_N8S19459C7D1Ev,_ZThn1560_N8S19459C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev)();
extern void ABISELECT(_ZThn2672_N8S19459C7D0Ev,_ZThn1560_N8S19459C7D0Ev)() __attribute__((weak));
extern void _ZN9S19459C112v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19459C11__A1__8S19459C7__8S19459C2[] = {
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev)();
extern void ABISELECT(_ZThn3344_N8S19459C7D1Ev,_ZThn1940_N8S19459C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev)();
extern void ABISELECT(_ZThn3344_N8S19459C7D0Ev,_ZThn1940_N8S19459C7D0Ev)() __attribute__((weak));
extern void _ZN8S19459C62v6Ev();
extern void _ZN8S19459C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C6__8S19459C7__8S19459C2[] = {
  0,
  0,
  ABISELECT(-3344,-1940),
  ABISELECT(-3344,-1940),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19459C62v7Ev,
};
extern void _ZN8S19459C9D1Ev();
extern void _ZN8S19459C9D0Ev();
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C9__8S19459C2[] = {
  ABISELECT(-3056,-1788),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&_ZN8S19459C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev)();
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__8S19459C9__8S19459C2[] = {
  0,
  0,
  ABISELECT(3056,1788),
  ABISELECT(3056,1788),
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
static  VTT_ENTRY vtt_S19459C2[] = {
  {&(_ZTV8S19459C2[8]),  8,81},
  {&(_tg__ZTV8S19459C3__8S19459C2[8]),  8,10},
  {&(_tg__ZTV8S19459C4__8S19459C3__8S19459C2[5]),  5,9},
  {&(_tg__ZTV8S19459C7__8S19459C3__8S19459C2[10]),  10,13},
  {&(_tg__ZTV8S19917C3__8S19459C3__8S19459C2[3]),  3,5},
  {&(_tg__ZTV8S19459C9__8S19459C3__8S19459C2[5]),  5,8},
  {&(_tg__ZTV9S19459C119S19459C108S19459C7__8S19459C3__8S19459C2[2]),  2,5},
  {&(_tg__ZTV9S19459C11__A1__8S19459C3__8S19459C2[4]),  4,7},
  {&(_tg__ZTV8S19459C6__8S19459C3__8S19459C2[5]),  5,9},
  {&(_ZTV8S19459C2[30]),  30,81},
  {&(_ZTV8S19459C2[44]),  44,81},
  {&(_ZTV8S19459C2[55]),  55,81},
  {&(_ZTV8S19459C2[62]),  62,81},
  {&(_ZTV8S19459C2[49]),  49,81},
  {&(_ZTV8S19459C2[69]),  69,81},
  {&(_ZTV8S19459C2[77]),  77,81},
  {&(_tg__ZTV8S19459C7__8S19459C2[7]),  7,10},
  {&(_tg__ZTV9S19459C108S19459C7__8S19459C2[4]),  4,7},
  {&(_tg__ZTV8S19459C99S19459C108S19459C7__A1__8S19459C2[3]),  3,6},
  {&(_tg__ZTV8S19459C4__8S19459C99S19459C108S19459C7__A1__8S19459C2[5]),  5,9},
  {&(_tg__ZTV8S19459C4__9S19459C108S19459C7__8S19459C2[5]),  5,9},
  {&(_tg__ZTV8S19917C3__9S19459C108S19459C7__8S19459C2[3]),  3,5},
  {&(_tg__ZTV8S19917C3__8S19459C7__8S19459C2[3]),  3,5},
  {&(_tg__ZTV8S19459C9__8S19459C7__8S19459C2[5]),  5,8},
  {&(_tg__ZTV8S19459C4__8S19459C7__8S19459C2[5]),  5,9},
  {&(_tg__ZTV9S19459C11__A1__8S19459C7__8S19459C2[4]),  4,7},
  {&(_tg__ZTV8S19459C6__8S19459C7__8S19459C2[5]),  5,9},
  {&(_tg__ZTV8S19459C9__8S19459C2[3]),  3,6},
  {&(_tg__ZTV8S19459C4__8S19459C9__8S19459C2[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S19459C2[];
extern  VTBL_ENTRY _ZTV8S19459C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C2[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C7D0Ev,_ZTv0_n16_N8S19459C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S19459C7D0Ev,_ZThn1528_N8S19459C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C7D1Ev,_ZTv0_n16_N8S19459C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S19459C7D1Ev,_ZThn1528_N8S19459C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3344_N8S19459C7D0Ev,_ZThn1940_N8S19459C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19459C7D0Ev,_ZThn1560_N8S19459C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S19459C7D0Ev,_ZThn1328_N8S19459C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3344_N8S19459C7D1Ev,_ZThn1940_N8S19459C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19459C7D1Ev,_ZThn1560_N8S19459C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S19459C7D1Ev,_ZThn1328_N8S19459C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S19459C10D0Ev,_ZThn1328_N9S19459C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S19459C10D1Ev,_ZThn1328_N9S19459C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C3D0Ev,_ZTv0_n16_N8S19459C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5024_N8S19459C3D0Ev,_ZThn2992_N8S19459C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C3D1Ev,_ZTv0_n16_N8S19459C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5024_N8S19459C3D1Ev,_ZThn2992_N8S19459C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19459C3D0Ev,_ZTv0_n32_N8S19459C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N8S19459C3D0Ev,_ZThn1464_N8S19459C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19459C3D1Ev,_ZTv0_n32_N8S19459C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N8S19459C3D1Ev,_ZThn1464_N8S19459C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5760_N8S19459C3D0Ev,_ZThn3404_N8S19459C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S19459C3D0Ev,_ZThn3024_N8S19459C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4672_N8S19459C3D0Ev,_ZThn2792_N8S19459C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1968_N8S19459C3D0Ev,_ZThn1204_N8S19459C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5760_N8S19459C3D1Ev,_ZThn3404_N8S19459C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S19459C3D1Ev,_ZThn3024_N8S19459C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4672_N8S19459C3D1Ev,_ZThn2792_N8S19459C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1968_N8S19459C3D1Ev,_ZThn1204_N8S19459C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C2D0Ev,_ZTv0_n16_N8S19459C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5024_N8S19459C2D0Ev,_ZThn2992_N8S19459C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C2D1Ev,_ZTv0_n16_N8S19459C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5024_N8S19459C2D1Ev,_ZThn2992_N8S19459C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19459C2D0Ev,_ZTv0_n32_N8S19459C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N8S19459C2D0Ev,_ZThn1464_N8S19459C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19459C2D1Ev,_ZTv0_n32_N8S19459C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N8S19459C2D1Ev,_ZThn1464_N8S19459C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C2D0Ev,_ZTv0_n12_N8S19459C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5760_N8S19459C2D0Ev,_ZThn3404_N8S19459C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S19459C2D0Ev,_ZThn3024_N8S19459C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4672_N8S19459C2D0Ev,_ZThn2792_N8S19459C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1968_N8S19459C2D0Ev,_ZThn1204_N8S19459C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C2D1Ev,_ZTv0_n12_N8S19459C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5760_N8S19459C2D1Ev,_ZThn3404_N8S19459C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S19459C2D1Ev,_ZThn3024_N8S19459C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4672_N8S19459C2D1Ev,_ZThn2792_N8S19459C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1968_N8S19459C2D1Ev,_ZThn1204_N8S19459C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19459C2 = {  "S19459C2", // class name
  bases_S19459C2, 18,
  &(vtc_S19459C2[0]), // expected_vtbl_contents
  &(vtt_S19459C2[0]), // expected_vtt_contents
  ABISELECT(6032,3560), // object size
  NSPAIRA(_ZTI8S19459C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19459C2),81, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19459C2),29, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19459C1  : virtual S19459C2 , S19917C3 {
  __tsi64 s19459c1f0[2];
  ::S19917C12_nt s19459c1f1;
  __tsi64 s19459c1f2;
  int s19459c1f3;
  __tsi64 s19459c1f4;
  void *s19459c1f5;
  int s19459c1f6[3];
  void *s19459c1f7;
  virtual  ~S19459C1(); // _ZN8S19459C1D2Ev
  virtual void  v1(); // _ZN8S19459C12v1Ev
  S19459C1(); // tgen
};
//SIG(1 S19459C1) C1{ VBC2{ BC3{ VBC4{ BC5{ vd m Fp FD Fi Fp} v2 v3 FL[2] FC5 Fi[3] Fp[4] FC6{ BC5 vd v6 v7 Fi Fp[4] FD[5] Fp[2] FC5 Fl[3]} Fc:5} VBC7{ VBC8{ vd m FC9{ BC5 vd v10 v11 Fi Fp[4] FD[5] Fp[2] FC5 Fl[3]} FD[3] Fp} VBC10{ VBC4 BC5 vd v4 Fi} BC11{ VBC4 BC10 BC12{ vd v5 FL Fi FC6 Fi FC5 Fp Fi FC6 FD} VBC8 vd FC13{} FD[10] FC10 FC12 Fi} VBC12 VBC6 vd Fi Fc Fc:8 FD[8] Fi Fc Fp} vd FL[3] Fi} BC12 BC14{ v8 FL Fi FL Fp Fi Fp FD FL[6] Fp} BC4 vd v9 Fs FL[3] FD FL[2] FD[10] FC4} BC8 vd v1 FL[2] FC13 FL Fi FL Fp Fi[3] Fp}


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

static void Test_S19459C1()
{
  extern Class_Descriptor cd_S19459C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(405,956)];
    init_test(&cd_S19459C1, buf);
    S19459C1 *dp, &lv = *(dp=new (buf) S19459C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6464,3820), "sizeof(S19459C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19459C1)");
    /*is_ambiguous_... S19459C1::S19459C4 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19459C4*), ABISELECT(2400,1464), "S19459C1");
    check_base_class_offset(lv, (S19459C4*)(S19459C3*)(S19459C2*), ABISELECT(2400,1464), "S19459C1");
    /*is_ambiguous_... S19459C1::S19459C9 */ AMB_check_base_class_offset(lv, (S19459C4*)(S19459C9*), ABISELECT(2400,1464), "S19459C1");
    check_base_class_offset(lv, (S19459C4*)(S19459C10*)(S19459C7*), ABISELECT(2400,1464), "S19459C1");
    check_base_class_offset(lv, (S19459C4*)(S19459C9*)(S19459C10*)(S19459C7*), ABISELECT(2400,1464), "S19459C1");
    check_base_class_offset(lv, (S19917C3*)(S19459C7*), ABISELECT(5104,3052), "S19459C1");
    check_base_class_offset(lv, (S19917C3*)(S19459C10*)(S19459C7*), ABISELECT(5104,3052), "S19459C1");
    /*is_ambiguous_... S19459C1::S19459C9 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19459C9*), ABISELECT(5456,3252), "S19459C1");
    /*is_ambiguous_... S19459C7::S19459C9 */ AMB_check_base_class_offset(lv, (S19459C9*)(S19459C7*), ABISELECT(5456,3252), "S19459C1");
    /*is_ambiguous_... S19459C9::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19459C9*)(S19459C10*)(S19459C7*), ABISELECT(2848,1724), "S19459C1");
    check_base_class_offset(lv, (S19459C9*)(S19459C10*)(S19459C7*), ABISELECT(2848,1724), "S19459C1");
    check_base_class_offset(lv, (S19459C11*)(S19459C10*)(S19459C7*), ABISELECT(2912,1756), "S19459C1");
    check_base_class_offset(lv, (S19459C10*)(S19459C7*), ABISELECT(2848,1724), "S19459C1");
    /*is_ambiguous_... S19459C7::S19459C11 */ AMB_check_base_class_offset(lv, (S19459C11*)(S19459C7*), ABISELECT(5520,3284), "S19459C1");
    check_base_class_offset(lv, (S19917C5*)(S19459C6*), ABISELECT(6192,3664), "S19459C1");
    check_base_class_offset(lv, (S19459C6*)(S19459C7*), ABISELECT(6192,3664), "S19459C1");
    check_base_class_offset(lv, (S19459C7*)(S19459C3*)(S19459C2*), ABISELECT(2848,1724), "S19459C1");
    check_base_class_offset(lv, (S19459C3*)(S19459C2*), ABISELECT(432,260), "S19459C1");
    /*is_ambiguous_... S19459C2::S19459C11 */ AMB_check_base_class_offset(lv, (S19459C11*)(S19459C2*), ABISELECT(480,292), "S19459C1");
    check_base_class_offset(lv, (S19459C13*)(S19459C2*), ABISELECT(1152,672), "S19459C1");
    /*is_ambiguous_... S19459C2::S19459C4 */ AMB_check_base_class_offset(lv, (S19917C5*)(S19459C4*)(S19459C2*), ABISELECT(1296,772), "S19459C1");
    /*is_ambiguous_... S19459C2::S19459C4 */ AMB_check_base_class_offset(lv, (S19459C4*)(S19459C2*), ABISELECT(1296,772), "S19459C1");
    check_base_class_offset(lv, (S19459C2*), ABISELECT(432,260), "S19459C1");
    /*is_ambiguous_... S19459C1::S19917C3 */ AMB_check_base_class_offset(lv, (S19917C3*), 0, "S19459C1");
    check_field_offset(lv, s19459c1f0, ABISELECT(344,200), "S19459C1.s19459c1f0");
    check_field_offset(lv, s19459c1f1, ABISELECT(360,216), "S19459C1.s19459c1f1");
    check_field_offset(lv, s19459c1f2, ABISELECT(368,220), "S19459C1.s19459c1f2");
    check_field_offset(lv, s19459c1f3, ABISELECT(376,228), "S19459C1.s19459c1f3");
    check_field_offset(lv, s19459c1f4, ABISELECT(384,232), "S19459C1.s19459c1f4");
    check_field_offset(lv, s19459c1f5, ABISELECT(392,240), "S19459C1.s19459c1f5");
    check_field_offset(lv, s19459c1f6, ABISELECT(400,244), "S19459C1.s19459c1f6");
    check_field_offset(lv, s19459c1f7, ABISELECT(416,256), "S19459C1.s19459c1f7");
    test_class_info(&lv, &cd_S19459C1);
    dp->~S19459C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19459C1(Test_S19459C1, "S19459C1", ABISELECT(6464,3820));

#else // __cplusplus

extern void _ZN8S19459C1C1Ev();
extern void _ZN8S19459C1D2Ev();
Name_Map name_map_S19459C1[] = {
  NSPAIR(_ZN8S19459C1C1Ev),
  NSPAIR(_ZN8S19459C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C4;
extern VTBL_ENTRY _ZTI8S19459C4[];
extern  VTBL_ENTRY _ZTV8S19459C4[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C9;
extern VTBL_ENTRY _ZTI8S19459C9[];
extern  VTBL_ENTRY _ZTV8S19459C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C9[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C9;
extern VTBL_ENTRY _ZTI8S19459C9[];
extern  VTBL_ENTRY _ZTV8S19459C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C9[];
extern Class_Descriptor cd_S19459C11;
extern VTBL_ENTRY _ZTI9S19459C11[];
extern  VTBL_ENTRY _ZTV9S19459C11[];
extern Class_Descriptor cd_S19459C10;
extern VTBL_ENTRY _ZTI9S19459C10[];
extern  VTBL_ENTRY _ZTV9S19459C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19459C10[];
extern Class_Descriptor cd_S19459C11;
extern VTBL_ENTRY _ZTI9S19459C11[];
extern  VTBL_ENTRY _ZTV9S19459C11[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C6;
extern VTBL_ENTRY _ZTI8S19459C6[];
extern  VTBL_ENTRY _ZTV8S19459C6[];
extern Class_Descriptor cd_S19459C7;
extern VTBL_ENTRY _ZTI8S19459C7[];
extern  VTBL_ENTRY _ZTV8S19459C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C7[];
extern Class_Descriptor cd_S19459C3;
extern VTBL_ENTRY _ZTI8S19459C3[];
extern  VTBL_ENTRY _ZTV8S19459C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C3[];
extern Class_Descriptor cd_S19459C11;
extern VTBL_ENTRY _ZTI9S19459C11[];
extern  VTBL_ENTRY _ZTV9S19459C11[];
extern Class_Descriptor cd_S19459C13;
extern VTBL_ENTRY _ZTI9S19459C13[];
extern  VTBL_ENTRY _ZTV9S19459C13[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19459C4;
extern VTBL_ENTRY _ZTI8S19459C4[];
extern  VTBL_ENTRY _ZTV8S19459C4[];
extern Class_Descriptor cd_S19459C2;
extern VTBL_ENTRY _ZTI8S19459C2[];
extern  VTBL_ENTRY _ZTV8S19459C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C2[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
static Base_Class bases_S19459C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    ABISELECT(2400,1464), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19459C4,    ABISELECT(2400,1464), //bcp->offset
    43, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19917C3,    ABISELECT(5104,3052), //bcp->offset
    70, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(5456,3252), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19459C9,    ABISELECT(5456,3252), //bcp->offset
    75, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(2848,1724), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19459C9,    ABISELECT(2848,1724), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19459C11,    ABISELECT(2912,1756), //bcp->offset
    65, //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
    11, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19459C10,    ABISELECT(2848,1724), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19459C11,    ABISELECT(5520,3284), //bcp->offset
    83, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(6192,3664), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19459C6,    ABISELECT(6192,3664), //bcp->offset
    90, //bcp->virtual_function_table_offset
    5, //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
    12, //immediately_derived
  0, 1},
  {&cd_S19459C7,    ABISELECT(2848,1724), //bcp->offset
    52, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19459C3,    ABISELECT(432,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    18, //immediately_derived
  0, 0},
  {&cd_S19459C11,    ABISELECT(480,292), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19459C13,    ABISELECT(1152,672), //bcp->offset
    34, //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
    18, //immediately_derived
  0, 0},
  {&cd_S19917C5,    ABISELECT(1296,772), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19459C4,    ABISELECT(1296,772), //bcp->offset
    37, //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
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19459C2,    ABISELECT(432,260), //bcp->offset
    12, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19459C1[];
extern void _ZN8S19459C1D1Ev();
extern void _ZN8S19459C1D0Ev();
extern void _ZN8S19459C12v1Ev();
extern void ABISELECT(_ZTv0_n72_N8S19459C1D1Ev,_ZTv0_n36_N8S19459C1D1Ev)();
extern void ABISELECT(_ZThn432_N8S19459C1D1Ev,_ZThn260_N8S19459C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19459C1D0Ev,_ZTv0_n36_N8S19459C1D0Ev)();
extern void ABISELECT(_ZThn432_N8S19459C1D0Ev,_ZThn260_N8S19459C1D0Ev)() __attribute__((weak));
extern void _ZN8S19459C22v9Ev();
extern void ABISELECT(_ZTvn48_n72_N8S19459C1D1Ev,_ZTvn32_n36_N8S19459C1D1Ev)();
extern void ABISELECT(_ZTvn48_n72_N8S19459C1D0Ev,_ZTvn32_n36_N8S19459C1D0Ev)();
extern void _ZN9S19459C112v5Ev();
extern void _ZN9S19459C132v8Ev();
extern void ABISELECT(_ZTvn864_n72_N8S19459C1D1Ev,_ZTvn512_n36_N8S19459C1D1Ev)();
extern void ABISELECT(_ZTvn864_n72_N8S19459C1D0Ev,_ZTvn512_n36_N8S19459C1D0Ev)();
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S19459C1D1Ev,_ZTv0_n12_N8S19459C1D1Ev)();
extern void ABISELECT(_ZThn2400_N8S19459C1D1Ev,_ZThn1464_N8S19459C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C1D0Ev,_ZTv0_n12_N8S19459C1D0Ev)();
extern void ABISELECT(_ZThn2400_N8S19459C1D0Ev,_ZThn1464_N8S19459C1D0Ev)() __attribute__((weak));
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19459C1D1Ev,_ZTv0_n32_N8S19459C1D1Ev)();
extern void ABISELECT(_ZThn2848_N8S19459C1D1Ev,_ZThn1724_N8S19459C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19459C1D0Ev,_ZTv0_n32_N8S19459C1D0Ev)();
extern void ABISELECT(_ZThn2848_N8S19459C1D0Ev,_ZThn1724_N8S19459C1D0Ev)() __attribute__((weak));
extern void _ZN8S19459C92v4Ev();
extern void ABISELECT(_ZTvn64_n64_N8S19459C1D1Ev,_ZTvn32_n32_N8S19459C1D1Ev)();
extern void ABISELECT(_ZTvn64_n64_N8S19459C1D0Ev,_ZTvn32_n32_N8S19459C1D0Ev)();
extern void _ZN9S19459C112v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S19459C1D1Ev,_ZTv0_n12_N8S19459C1D1Ev)();
extern void ABISELECT(_ZThn5104_N8S19459C1D1Ev,_ZThn3052_N8S19459C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C1D0Ev,_ZTv0_n12_N8S19459C1D0Ev)();
extern void ABISELECT(_ZThn5104_N8S19459C1D0Ev,_ZThn3052_N8S19459C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19459C1D1Ev,_ZTv0_n16_N8S19459C1D1Ev)();
extern void ABISELECT(_ZThn5456_N8S19459C1D1Ev,_ZThn3252_N8S19459C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19459C1D0Ev,_ZTv0_n16_N8S19459C1D0Ev)();
extern void ABISELECT(_ZThn5456_N8S19459C1D0Ev,_ZThn3252_N8S19459C1D0Ev)() __attribute__((weak));
extern void _ZN8S19459C92v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S19459C1D1Ev,_ZTv0_n12_N8S19459C1D1Ev)();
extern void ABISELECT(_ZThn5520_N8S19459C1D1Ev,_ZThn3284_N8S19459C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C1D0Ev,_ZTv0_n12_N8S19459C1D0Ev)();
extern void ABISELECT(_ZThn5520_N8S19459C1D0Ev,_ZThn3284_N8S19459C1D0Ev)() __attribute__((weak));
extern void _ZN9S19459C112v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S19459C1D1Ev,_ZTv0_n12_N8S19459C1D1Ev)();
extern void ABISELECT(_ZThn6192_N8S19459C1D1Ev,_ZThn3664_N8S19459C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C1D0Ev,_ZTv0_n12_N8S19459C1D0Ev)();
extern void ABISELECT(_ZThn6192_N8S19459C1D0Ev,_ZThn3664_N8S19459C1D0Ev)() __attribute__((weak));
extern void _ZN8S19459C62v6Ev();
extern void _ZN8S19459C62v7Ev();
static  VTBL_ENTRY vtc_S19459C1[] = {
  ABISELECT(6192,3664),
  ABISELECT(5520,3284),
  ABISELECT(5456,3252),
  ABISELECT(5104,3052),
  ABISELECT(2848,1724),
  ABISELECT(2400,1464),
  ABISELECT(432,260),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C1[0]),
  (VTBL_ENTRY)&_ZN8S19459C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C12v1Ev,
  ABISELECT(864,512),
  ABISELECT(864,512),
  ABISELECT(720,412),
  ABISELECT(48,32),
  0,
  ABISELECT(-432,-260),
  ABISELECT(5760,3404),
  ABISELECT(5088,3024),
  ABISELECT(5024,2992),
  ABISELECT(4672,2792),
  ABISELECT(2416,1464),
  ABISELECT(1968,1204),
  ABISELECT(-432,-260),
  (VTBL_ENTRY)&(_ZTI8S19459C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19459C1D1Ev,_ZTv0_n36_N8S19459C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19459C1D0Ev,_ZTv0_n36_N8S19459C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C22v9Ev,
  ABISELECT(-480,-292),
  (VTBL_ENTRY)&(_ZTI8S19459C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n72_N8S19459C1D1Ev,_ZTvn32_n36_N8S19459C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n72_N8S19459C1D0Ev,_ZTvn32_n36_N8S19459C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
  ABISELECT(-1152,-672),
  (VTBL_ENTRY)&(_ZTI8S19459C1[0]),
  (VTBL_ENTRY)&_ZN9S19459C132v8Ev,
  ABISELECT(-1296,-772),
  (VTBL_ENTRY)&(_ZTI8S19459C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn864_n72_N8S19459C1D1Ev,_ZTvn512_n36_N8S19459C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn864_n72_N8S19459C1D0Ev,_ZTvn512_n36_N8S19459C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
  0,
  0,
  ABISELECT(-2400,-1464),
  ABISELECT(-2400,-1464),
  (VTBL_ENTRY)&(_ZTI8S19459C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C1D1Ev,_ZTv0_n12_N8S19459C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C1D0Ev,_ZTv0_n12_N8S19459C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
  ABISELECT(64,32),
  0,
  ABISELECT(-2848,-1724),
  ABISELECT(3344,1940),
  ABISELECT(2672,1560),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(-448,-260),
  ABISELECT(-2848,-1724),
  (VTBL_ENTRY)&(_ZTI8S19459C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19459C1D1Ev,_ZTv0_n32_N8S19459C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19459C1D0Ev,_ZTv0_n32_N8S19459C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
  ABISELECT(-2912,-1756),
  (VTBL_ENTRY)&(_ZTI8S19459C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S19459C1D1Ev,_ZTvn32_n32_N8S19459C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S19459C1D0Ev,_ZTvn32_n32_N8S19459C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
  ABISELECT(-5104,-3052),
  ABISELECT(-5104,-3052),
  (VTBL_ENTRY)&(_ZTI8S19459C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C1D1Ev,_ZTv0_n12_N8S19459C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C1D0Ev,_ZTv0_n12_N8S19459C1D0Ev),
  0,
  ABISELECT(-5456,-3252),
  ABISELECT(-3056,-1788),
  ABISELECT(-5456,-3252),
  (VTBL_ENTRY)&(_ZTI8S19459C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C1D1Ev,_ZTv0_n16_N8S19459C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C1D0Ev,_ZTv0_n16_N8S19459C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
  0,
  ABISELECT(-5520,-3284),
  ABISELECT(-5520,-3284),
  (VTBL_ENTRY)&(_ZTI8S19459C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C1D1Ev,_ZTv0_n12_N8S19459C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C1D0Ev,_ZTv0_n12_N8S19459C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
  0,
  0,
  ABISELECT(-6192,-3664),
  ABISELECT(-6192,-3664),
  (VTBL_ENTRY)&(_ZTI8S19459C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C1D1Ev,_ZTv0_n12_N8S19459C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C1D0Ev,_ZTv0_n12_N8S19459C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19459C62v7Ev,
};
extern VTBL_ENTRY _ZTV8S19459C1[];
extern void _ZN8S19459C2D1Ev();
extern void _ZN8S19459C2D0Ev();
extern void _ZN8S19459C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C2__8S19459C1[] = {
  ABISELECT(5760,3404),
  ABISELECT(5088,3024),
  ABISELECT(5024,2992),
  ABISELECT(4672,2792),
  ABISELECT(2416,1464),
  ABISELECT(1968,1204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&_ZN8S19459C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C22v9Ev,
};
extern void _ZN8S19459C3D1Ev();
extern void _ZN8S19459C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C38S19459C2__8S19459C1[] = {
  ABISELECT(5760,3404),
  ABISELECT(5088,3024),
  ABISELECT(5024,2992),
  ABISELECT(4672,2792),
  ABISELECT(2416,1464),
  ABISELECT(1968,1204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&_ZN8S19459C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev)();
extern void ABISELECT(_ZThn1968_N8S19459C3D1Ev,_ZThn1204_N8S19459C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev)();
extern void ABISELECT(_ZThn1968_N8S19459C3D0Ev,_ZThn1204_N8S19459C3D0Ev)() __attribute__((weak));
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__8S19459C38S19459C2__8S19459C1[] = {
  0,
  0,
  ABISELECT(-1968,-1204),
  ABISELECT(-1968,-1204),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S19459C3D1Ev,_ZTv0_n32_N8S19459C3D1Ev)();
extern void ABISELECT(_ZThn2416_N8S19459C3D1Ev,_ZThn1464_N8S19459C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19459C3D0Ev,_ZTv0_n32_N8S19459C3D0Ev)();
extern void ABISELECT(_ZThn2416_N8S19459C3D0Ev,_ZThn1464_N8S19459C3D0Ev)() __attribute__((weak));
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C7__8S19459C38S19459C2__8S19459C1[] = {
  ABISELECT(64,32),
  0,
  ABISELECT(-2416,-1464),
  ABISELECT(3344,1940),
  ABISELECT(2672,1560),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(-448,-260),
  ABISELECT(-2416,-1464),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19459C3D1Ev,_ZTv0_n32_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19459C3D0Ev,_ZTv0_n32_N8S19459C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev)();
extern void ABISELECT(_ZThn4672_N8S19459C3D1Ev,_ZThn2792_N8S19459C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev)();
extern void ABISELECT(_ZThn4672_N8S19459C3D0Ev,_ZThn2792_N8S19459C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__8S19459C38S19459C2__8S19459C1[] = {
  ABISELECT(-4672,-2792),
  ABISELECT(-4672,-2792),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19459C3D1Ev,_ZTv0_n16_N8S19459C3D1Ev)();
extern void ABISELECT(_ZThn5024_N8S19459C3D1Ev,_ZThn2992_N8S19459C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19459C3D0Ev,_ZTv0_n16_N8S19459C3D0Ev)();
extern void ABISELECT(_ZThn5024_N8S19459C3D0Ev,_ZThn2992_N8S19459C3D0Ev)() __attribute__((weak));
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C9__8S19459C38S19459C2__8S19459C1[] = {
  0,
  ABISELECT(-5024,-2992),
  ABISELECT(-3056,-1788),
  ABISELECT(-5024,-2992),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C3D1Ev,_ZTv0_n16_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C3D0Ev,_ZTv0_n16_N8S19459C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void ABISELECT(_ZTvn64_n64_N8S19459C3D1Ev,_ZTvn32_n32_N8S19459C3D1Ev)();
extern void ABISELECT(_ZTvn64_n64_N8S19459C3D0Ev,_ZTvn32_n32_N8S19459C3D0Ev)();
extern void _ZN9S19459C112v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19459C119S19459C108S19459C7__8S19459C38S19459C2__8S19459C1[] = {
  ABISELECT(-2480,-1496),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S19459C3D1Ev,_ZTvn32_n32_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S19459C3D0Ev,_ZTvn32_n32_N8S19459C3D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev)();
extern void ABISELECT(_ZThn5088_N8S19459C3D1Ev,_ZThn3024_N8S19459C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev)();
extern void ABISELECT(_ZThn5088_N8S19459C3D0Ev,_ZThn3024_N8S19459C3D0Ev)() __attribute__((weak));
extern void _ZN9S19459C112v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19459C11__A1__8S19459C38S19459C2__8S19459C1[] = {
  0,
  ABISELECT(-5088,-3024),
  ABISELECT(-5088,-3024),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev)();
extern void ABISELECT(_ZThn5760_N8S19459C3D1Ev,_ZThn3404_N8S19459C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev)();
extern void ABISELECT(_ZThn5760_N8S19459C3D0Ev,_ZThn3404_N8S19459C3D0Ev)() __attribute__((weak));
extern void _ZN8S19459C62v6Ev();
extern void _ZN8S19459C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C6__8S19459C38S19459C2__8S19459C1[] = {
  0,
  0,
  ABISELECT(-5760,-3404),
  ABISELECT(-5760,-3404),
  (VTBL_ENTRY)&(_ZTI8S19459C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19459C62v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C2D1Ev,_ZTv0_n12_N8S19459C2D1Ev)();
extern void ABISELECT(_ZThn1968_N8S19459C2D1Ev,_ZThn1204_N8S19459C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C2D0Ev,_ZTv0_n12_N8S19459C2D0Ev)();
extern void ABISELECT(_ZThn1968_N8S19459C2D0Ev,_ZThn1204_N8S19459C2D0Ev)() __attribute__((weak));
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__8S19459C2__8S19459C1[] = {
  0,
  0,
  ABISELECT(-1968,-1204),
  ABISELECT(-1968,-1204),
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C2D1Ev,_ZTv0_n12_N8S19459C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C2D0Ev,_ZTv0_n12_N8S19459C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S19459C2D1Ev,_ZTv0_n32_N8S19459C2D1Ev)();
extern void ABISELECT(_ZThn2416_N8S19459C2D1Ev,_ZThn1464_N8S19459C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19459C2D0Ev,_ZTv0_n32_N8S19459C2D0Ev)();
extern void ABISELECT(_ZThn2416_N8S19459C2D0Ev,_ZThn1464_N8S19459C2D0Ev)() __attribute__((weak));
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C7__8S19459C2__8S19459C1[] = {
  ABISELECT(64,32),
  0,
  ABISELECT(-2416,-1464),
  ABISELECT(3344,1940),
  ABISELECT(2672,1560),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(-448,-260),
  ABISELECT(-2416,-1464),
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19459C2D1Ev,_ZTv0_n32_N8S19459C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19459C2D0Ev,_ZTv0_n32_N8S19459C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C2D1Ev,_ZTv0_n12_N8S19459C2D1Ev)();
extern void ABISELECT(_ZThn4672_N8S19459C2D1Ev,_ZThn2792_N8S19459C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C2D0Ev,_ZTv0_n12_N8S19459C2D0Ev)();
extern void ABISELECT(_ZThn4672_N8S19459C2D0Ev,_ZThn2792_N8S19459C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__8S19459C2__8S19459C1[] = {
  ABISELECT(-4672,-2792),
  ABISELECT(-4672,-2792),
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C2D1Ev,_ZTv0_n12_N8S19459C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C2D0Ev,_ZTv0_n12_N8S19459C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19459C2D1Ev,_ZTv0_n16_N8S19459C2D1Ev)();
extern void ABISELECT(_ZThn5024_N8S19459C2D1Ev,_ZThn2992_N8S19459C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19459C2D0Ev,_ZTv0_n16_N8S19459C2D0Ev)();
extern void ABISELECT(_ZThn5024_N8S19459C2D0Ev,_ZThn2992_N8S19459C2D0Ev)() __attribute__((weak));
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C9__8S19459C2__8S19459C1[] = {
  0,
  ABISELECT(-5024,-2992),
  ABISELECT(-3056,-1788),
  ABISELECT(-5024,-2992),
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C2D1Ev,_ZTv0_n16_N8S19459C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C2D0Ev,_ZTv0_n16_N8S19459C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void ABISELECT(_ZTvn64_n64_N8S19459C2D1Ev,_ZTvn32_n32_N8S19459C2D1Ev)();
extern void ABISELECT(_ZTvn64_n64_N8S19459C2D0Ev,_ZTvn32_n32_N8S19459C2D0Ev)();
extern void _ZN9S19459C112v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19459C119S19459C108S19459C7__8S19459C2__8S19459C1[] = {
  ABISELECT(-2480,-1496),
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S19459C2D1Ev,_ZTvn32_n32_N8S19459C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S19459C2D0Ev,_ZTvn32_n32_N8S19459C2D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C2D1Ev,_ZTv0_n12_N8S19459C2D1Ev)();
extern void ABISELECT(_ZThn5088_N8S19459C2D1Ev,_ZThn3024_N8S19459C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C2D0Ev,_ZTv0_n12_N8S19459C2D0Ev)();
extern void ABISELECT(_ZThn5088_N8S19459C2D0Ev,_ZThn3024_N8S19459C2D0Ev)() __attribute__((weak));
extern void _ZN9S19459C112v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19459C11__A1__8S19459C2__8S19459C1[] = {
  0,
  ABISELECT(-5088,-3024),
  ABISELECT(-5088,-3024),
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C2D1Ev,_ZTv0_n12_N8S19459C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C2D0Ev,_ZTv0_n12_N8S19459C2D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C2D1Ev,_ZTv0_n12_N8S19459C2D1Ev)();
extern void ABISELECT(_ZThn5760_N8S19459C2D1Ev,_ZThn3404_N8S19459C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C2D0Ev,_ZTv0_n12_N8S19459C2D0Ev)();
extern void ABISELECT(_ZThn5760_N8S19459C2D0Ev,_ZThn3404_N8S19459C2D0Ev)() __attribute__((weak));
extern void _ZN8S19459C62v6Ev();
extern void _ZN8S19459C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C6__8S19459C2__8S19459C1[] = {
  0,
  0,
  ABISELECT(-5760,-3404),
  ABISELECT(-5760,-3404),
  (VTBL_ENTRY)&(_ZTI8S19459C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C2D1Ev,_ZTv0_n12_N8S19459C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C2D0Ev,_ZTv0_n12_N8S19459C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19459C62v7Ev,
};
extern void _ZN8S19459C7D1Ev();
extern void _ZN8S19459C7D0Ev();
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C7__8S19459C1[] = {
  ABISELECT(3344,1940),
  ABISELECT(2672,1560),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(-448,-260),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&_ZN8S19459C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void _ZN9S19459C10D1Ev();
extern void _ZN9S19459C10D0Ev();
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19459C108S19459C7__8S19459C1[] = {
  ABISELECT(2256,1328),
  ABISELECT(-448,-260),
  0,
  (VTBL_ENTRY)&(_ZTI9S19459C10[0]),
  (VTBL_ENTRY)&_ZN9S19459C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19459C10D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void _ZN8S19459C9D1Ev();
extern void _ZN8S19459C9D0Ev();
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C99S19459C108S19459C7__A1__8S19459C1[] = {
  ABISELECT(-448,-260),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&_ZN8S19459C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev)();
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__8S19459C99S19459C108S19459C7__A1__8S19459C1[] = {
  0,
  0,
  ABISELECT(448,260),
  ABISELECT(448,260),
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev)();
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__9S19459C108S19459C7__8S19459C1[] = {
  0,
  0,
  ABISELECT(448,260),
  ABISELECT(448,260),
  (VTBL_ENTRY)&(_ZTI9S19459C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev)();
extern void ABISELECT(_ZThn2256_N9S19459C10D1Ev,_ZThn1328_N9S19459C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev)();
extern void ABISELECT(_ZThn2256_N9S19459C10D0Ev,_ZThn1328_N9S19459C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__9S19459C108S19459C7__8S19459C1[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI9S19459C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev)();
extern void ABISELECT(_ZThn2256_N8S19459C7D1Ev,_ZThn1328_N8S19459C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev)();
extern void ABISELECT(_ZThn2256_N8S19459C7D0Ev,_ZThn1328_N8S19459C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__8S19459C7__8S19459C1[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19459C7D1Ev,_ZTv0_n16_N8S19459C7D1Ev)();
extern void ABISELECT(_ZThn2608_N8S19459C7D1Ev,_ZThn1528_N8S19459C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19459C7D0Ev,_ZTv0_n16_N8S19459C7D0Ev)();
extern void ABISELECT(_ZThn2608_N8S19459C7D0Ev,_ZThn1528_N8S19459C7D0Ev)() __attribute__((weak));
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C9__8S19459C7__8S19459C1[] = {
  0,
  ABISELECT(-2608,-1528),
  ABISELECT(-3056,-1788),
  ABISELECT(-2608,-1528),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C7D1Ev,_ZTv0_n16_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19459C7D0Ev,_ZTv0_n16_N8S19459C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev)();
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__8S19459C7__8S19459C1[] = {
  0,
  0,
  ABISELECT(448,260),
  ABISELECT(448,260),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev)();
extern void ABISELECT(_ZThn2672_N8S19459C7D1Ev,_ZThn1560_N8S19459C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev)();
extern void ABISELECT(_ZThn2672_N8S19459C7D0Ev,_ZThn1560_N8S19459C7D0Ev)() __attribute__((weak));
extern void _ZN9S19459C112v5Ev();
static  VTBL_ENTRY _tg__ZTV9S19459C11__A1__8S19459C7__8S19459C1[] = {
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev),
  (VTBL_ENTRY)&_ZN9S19459C112v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev)();
extern void ABISELECT(_ZThn3344_N8S19459C7D1Ev,_ZThn1940_N8S19459C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev)();
extern void ABISELECT(_ZThn3344_N8S19459C7D0Ev,_ZThn1940_N8S19459C7D0Ev)() __attribute__((weak));
extern void _ZN8S19459C62v6Ev();
extern void _ZN8S19459C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C6__8S19459C7__8S19459C1[] = {
  0,
  0,
  ABISELECT(-3344,-1940),
  ABISELECT(-3344,-1940),
  (VTBL_ENTRY)&(_ZTI8S19459C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C62v6Ev,
  (VTBL_ENTRY)&_ZN8S19459C62v7Ev,
};
extern void _ZN8S19459C9D1Ev();
extern void _ZN8S19459C9D0Ev();
extern void _ZN8S19459C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C9__8S19459C1[] = {
  ABISELECT(-3056,-1788),
  0,
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&_ZN8S19459C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19459C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19459C92v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev)();
extern void _ZN8S19459C42v2Ev();
extern void _ZN8S19459C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19459C4__8S19459C9__8S19459C1[] = {
  0,
  0,
  ABISELECT(3056,1788),
  ABISELECT(3056,1788),
  (VTBL_ENTRY)&(_ZTI8S19459C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D1Ev,_ZTv0_n12_N8S19459C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19459C9D0Ev,_ZTv0_n12_N8S19459C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19459C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19459C42v3Ev,
};
static  VTT_ENTRY vtt_S19459C1[] = {
  {&(_ZTV8S19459C1[9]),  9,99},
  {&(_ZTV8S19459C1[26]),  26,99},
  {&(_ZTV8S19459C1[48]),  48,99},
  {&(_ZTV8S19459C1[62]),  62,99},
  {&(_ZTV8S19459C1[73]),  73,99},
  {&(_ZTV8S19459C1[80]),  80,99},
  {&(_ZTV8S19459C1[67]),  67,99},
  {&(_ZTV8S19459C1[87]),  87,99},
  {&(_ZTV8S19459C1[95]),  95,99},
  {&(_ZTV8S19459C1[31]),  31,99},
  {&(_ZTV8S19459C1[36]),  36,99},
  {&(_ZTV8S19459C1[39]),  39,99},
  {&(_tg__ZTV8S19459C2__8S19459C1[8]),  8,11},
  {&(_tg__ZTV8S19459C38S19459C2__8S19459C1[8]),  8,10},
  {&(_tg__ZTV8S19459C4__8S19459C38S19459C2__8S19459C1[5]),  5,9},
  {&(_tg__ZTV8S19459C7__8S19459C38S19459C2__8S19459C1[10]),  10,13},
  {&(_tg__ZTV8S19917C3__8S19459C38S19459C2__8S19459C1[3]),  3,5},
  {&(_tg__ZTV8S19459C9__8S19459C38S19459C2__8S19459C1[5]),  5,8},
  {&(_tg__ZTV9S19459C119S19459C108S19459C7__8S19459C38S19459C2__8S19459C1[2]),  2,5},
  {&(_tg__ZTV9S19459C11__A1__8S19459C38S19459C2__8S19459C1[4]),  4,7},
  {&(_tg__ZTV8S19459C6__8S19459C38S19459C2__8S19459C1[5]),  5,9},
  {&(_tg__ZTV8S19459C4__8S19459C2__8S19459C1[5]),  5,9},
  {&(_tg__ZTV8S19459C7__8S19459C2__8S19459C1[10]),  10,13},
  {&(_tg__ZTV8S19917C3__8S19459C2__8S19459C1[3]),  3,5},
  {&(_tg__ZTV8S19459C9__8S19459C2__8S19459C1[5]),  5,8},
  {&(_tg__ZTV9S19459C119S19459C108S19459C7__8S19459C2__8S19459C1[2]),  2,5},
  {&(_tg__ZTV9S19459C11__A1__8S19459C2__8S19459C1[4]),  4,7},
  {&(_tg__ZTV8S19459C6__8S19459C2__8S19459C1[5]),  5,9},
  {&(_tg__ZTV8S19459C7__8S19459C1[7]),  7,10},
  {&(_tg__ZTV9S19459C108S19459C7__8S19459C1[4]),  4,7},
  {&(_tg__ZTV8S19459C99S19459C108S19459C7__A1__8S19459C1[3]),  3,6},
  {&(_tg__ZTV8S19459C4__8S19459C99S19459C108S19459C7__A1__8S19459C1[5]),  5,9},
  {&(_tg__ZTV8S19459C4__9S19459C108S19459C7__8S19459C1[5]),  5,9},
  {&(_tg__ZTV8S19917C3__9S19459C108S19459C7__8S19459C1[3]),  3,5},
  {&(_tg__ZTV8S19917C3__8S19459C7__8S19459C1[3]),  3,5},
  {&(_tg__ZTV8S19459C9__8S19459C7__8S19459C1[5]),  5,8},
  {&(_tg__ZTV8S19459C4__8S19459C7__8S19459C1[5]),  5,9},
  {&(_tg__ZTV9S19459C11__A1__8S19459C7__8S19459C1[4]),  4,7},
  {&(_tg__ZTV8S19459C6__8S19459C7__8S19459C1[5]),  5,9},
  {&(_tg__ZTV8S19459C9__8S19459C1[3]),  3,6},
  {&(_tg__ZTV8S19459C4__8S19459C9__8S19459C1[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S19459C1[];
extern  VTBL_ENTRY _ZTV8S19459C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19459C1[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C7D0Ev,_ZTv0_n16_N8S19459C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S19459C7D0Ev,_ZThn1528_N8S19459C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C7D1Ev,_ZTv0_n16_N8S19459C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S19459C7D1Ev,_ZThn1528_N8S19459C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C7D0Ev,_ZTv0_n12_N8S19459C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3344_N8S19459C7D0Ev,_ZThn1940_N8S19459C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19459C7D0Ev,_ZThn1560_N8S19459C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S19459C7D0Ev,_ZThn1328_N8S19459C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C7D1Ev,_ZTv0_n12_N8S19459C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3344_N8S19459C7D1Ev,_ZThn1940_N8S19459C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S19459C7D1Ev,_ZThn1560_N8S19459C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S19459C7D1Ev,_ZThn1328_N8S19459C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19459C10D0Ev,_ZTv0_n12_N9S19459C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S19459C10D0Ev,_ZThn1328_N9S19459C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19459C10D1Ev,_ZTv0_n12_N9S19459C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S19459C10D1Ev,_ZThn1328_N9S19459C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C2D0Ev,_ZTv0_n16_N8S19459C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5024_N8S19459C2D0Ev,_ZThn2992_N8S19459C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C2D1Ev,_ZTv0_n16_N8S19459C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5024_N8S19459C2D1Ev,_ZThn2992_N8S19459C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19459C2D0Ev,_ZTv0_n32_N8S19459C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N8S19459C2D0Ev,_ZThn1464_N8S19459C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19459C2D1Ev,_ZTv0_n32_N8S19459C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N8S19459C2D1Ev,_ZThn1464_N8S19459C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C2D0Ev,_ZTv0_n12_N8S19459C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5760_N8S19459C2D0Ev,_ZThn3404_N8S19459C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S19459C2D0Ev,_ZThn3024_N8S19459C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4672_N8S19459C2D0Ev,_ZThn2792_N8S19459C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1968_N8S19459C2D0Ev,_ZThn1204_N8S19459C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C2D1Ev,_ZTv0_n12_N8S19459C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5760_N8S19459C2D1Ev,_ZThn3404_N8S19459C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S19459C2D1Ev,_ZThn3024_N8S19459C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4672_N8S19459C2D1Ev,_ZThn2792_N8S19459C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1968_N8S19459C2D1Ev,_ZThn1204_N8S19459C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C3D0Ev,_ZTv0_n16_N8S19459C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5024_N8S19459C3D0Ev,_ZThn2992_N8S19459C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C3D1Ev,_ZTv0_n16_N8S19459C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5024_N8S19459C3D1Ev,_ZThn2992_N8S19459C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19459C3D0Ev,_ZTv0_n32_N8S19459C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N8S19459C3D0Ev,_ZThn1464_N8S19459C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19459C3D1Ev,_ZTv0_n32_N8S19459C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N8S19459C3D1Ev,_ZThn1464_N8S19459C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C3D0Ev,_ZTv0_n12_N8S19459C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5760_N8S19459C3D0Ev,_ZThn3404_N8S19459C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S19459C3D0Ev,_ZThn3024_N8S19459C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4672_N8S19459C3D0Ev,_ZThn2792_N8S19459C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1968_N8S19459C3D0Ev,_ZThn1204_N8S19459C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C3D1Ev,_ZTv0_n12_N8S19459C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5760_N8S19459C3D1Ev,_ZThn3404_N8S19459C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S19459C3D1Ev,_ZThn3024_N8S19459C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4672_N8S19459C3D1Ev,_ZThn2792_N8S19459C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1968_N8S19459C3D1Ev,_ZThn1204_N8S19459C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C1D0Ev,_ZTv0_n16_N8S19459C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S19459C1D0Ev,_ZThn3252_N8S19459C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19459C1D1Ev,_ZTv0_n16_N8S19459C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5456_N8S19459C1D1Ev,_ZThn3252_N8S19459C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19459C1D0Ev,_ZTv0_n32_N8S19459C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2848_N8S19459C1D0Ev,_ZThn1724_N8S19459C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19459C1D1Ev,_ZTv0_n32_N8S19459C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2848_N8S19459C1D1Ev,_ZThn1724_N8S19459C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C1D0Ev,_ZTv0_n12_N8S19459C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6192_N8S19459C1D0Ev,_ZThn3664_N8S19459C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5520_N8S19459C1D0Ev,_ZThn3284_N8S19459C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5104_N8S19459C1D0Ev,_ZThn3052_N8S19459C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2400_N8S19459C1D0Ev,_ZThn1464_N8S19459C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19459C1D1Ev,_ZTv0_n12_N8S19459C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6192_N8S19459C1D1Ev,_ZThn3664_N8S19459C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5520_N8S19459C1D1Ev,_ZThn3284_N8S19459C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5104_N8S19459C1D1Ev,_ZThn3052_N8S19459C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2400_N8S19459C1D1Ev,_ZThn1464_N8S19459C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19459C1D0Ev,_ZTv0_n36_N8S19459C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19459C1D0Ev,_ZThn260_N8S19459C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19459C1D1Ev,_ZTv0_n36_N8S19459C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn432_N8S19459C1D1Ev,_ZThn260_N8S19459C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19459C1 = {  "S19459C1", // class name
  bases_S19459C1, 20,
  &(vtc_S19459C1[0]), // expected_vtbl_contents
  &(vtt_S19459C1[0]), // expected_vtt_contents
  ABISELECT(6464,3820), // object size
  NSPAIRA(_ZTI8S19459C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19459C1),99, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19459C1),41, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2362C4  {
  ::S5166C19_nt s2362c4f0;
  int s2362c4f1[2];
  char s2362c4f2;
  virtual  ~S2362C4(); // _ZN7S2362C4D1Ev
  virtual void  v5(); // _ZN7S2362C42v5Ev
  virtual void  v6(); // _ZN7S2362C42v6Ev
  virtual void  v7(); // _ZN7S2362C42v7Ev
  S2362C4(); // tgen
};
//SIG(-1 S2362C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2362C4 ::~S2362C4(){ note_dtor("S2362C4", this);}
void  S2362C4 ::v5(){vfunc_called(this, "_ZN7S2362C42v5Ev");}
void  S2362C4 ::v6(){vfunc_called(this, "_ZN7S2362C42v6Ev");}
void  S2362C4 ::v7(){vfunc_called(this, "_ZN7S2362C42v7Ev");}
S2362C4 ::S2362C4(){ note_ctor("S2362C4", this);} // tgen

static void Test_S2362C4()
{
  extern Class_Descriptor cd_S2362C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2362C4, buf);
    S2362C4 *dp, &lv = *(dp=new (buf) S2362C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2362C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2362C4)");
    check_field_offset(lv, s2362c4f0, ABISELECT(8,4), "S2362C4.s2362c4f0");
    check_field_offset(lv, s2362c4f1, ABISELECT(24,16), "S2362C4.s2362c4f1");
    check_field_offset(lv, s2362c4f2, ABISELECT(32,24), "S2362C4.s2362c4f2");
    test_class_info(&lv, &cd_S2362C4);
    dp->~S2362C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2362C4(Test_S2362C4, "S2362C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2362C4C1Ev();
extern void _ZN7S2362C4D1Ev();
Name_Map name_map_S2362C4[] = {
  NSPAIR(_ZN7S2362C4C1Ev),
  NSPAIR(_ZN7S2362C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2362C4[];
extern void _ZN7S2362C4D1Ev();
extern void _ZN7S2362C4D0Ev();
extern void _ZN7S2362C42v5Ev();
extern void _ZN7S2362C42v6Ev();
extern void _ZN7S2362C42v7Ev();
static  VTBL_ENTRY vtc_S2362C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2362C4[0]),
  (VTBL_ENTRY)&_ZN7S2362C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2362C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2362C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2362C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2362C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S2362C4[];
extern  VTBL_ENTRY _ZTV7S2362C4[];
Class_Descriptor cd_S2362C4 = {  "S2362C4", // class name
  0,0,//no base classes
  &(vtc_S2362C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2362C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2362C4),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  S2362C7  {
  virtual  ~S2362C7(); // _ZN7S2362C7D1Ev
  virtual void  v8(); // _ZN7S2362C72v8Ev
  virtual void  v9(); // _ZN7S2362C72v9Ev
  virtual void  v10(); // _ZN7S2362C73v10Ev
  S2362C7(); // tgen
};
//SIG(-1 S2362C7) C1{ vd v1 v2 v3}


 S2362C7 ::~S2362C7(){ note_dtor("S2362C7", this);}
void  S2362C7 ::v8(){vfunc_called(this, "_ZN7S2362C72v8Ev");}
void  S2362C7 ::v9(){vfunc_called(this, "_ZN7S2362C72v9Ev");}
void  S2362C7 ::v10(){vfunc_called(this, "_ZN7S2362C73v10Ev");}
S2362C7 ::S2362C7(){ note_ctor("S2362C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2362C7C1Ev();
extern void _ZN7S2362C7D1Ev();
Name_Map name_map_S2362C7[] = {
  NSPAIR(_ZN7S2362C7C1Ev),
  NSPAIR(_ZN7S2362C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2362C7[];
extern void _ZN7S2362C7D1Ev();
extern void _ZN7S2362C7D0Ev();
extern void _ZN7S2362C72v8Ev();
extern void _ZN7S2362C72v9Ev();
extern void _ZN7S2362C73v10Ev();
static  VTBL_ENTRY vtc_S2362C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2362C7[0]),
  (VTBL_ENTRY)&_ZN7S2362C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2362C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2362C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2362C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2362C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2362C7[];
extern  VTBL_ENTRY _ZTV7S2362C7[];
Class_Descriptor cd_S2362C7 = {  "S2362C7", // class name
  0,0,//no base classes
  &(vtc_S2362C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2362C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2362C7),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  S2362C3  : S2362C4 , S2362C7 {
  void *s2362c3f0;
  char s2362c3f1;
  int s2362c3f2;
  virtual  ~S2362C3(); // _ZN7S2362C3D1Ev
  virtual void  v11(); // _ZN7S2362C33v11Ev
  virtual void  v12(); // _ZN7S2362C33v12Ev
  virtual void  v13(); // _ZN7S2362C33v13Ev
  virtual void  v14(); // _ZN7S2362C33v14Ev
  virtual void  v15(); // _ZN7S2362C33v15Ev
  virtual void  v16(); // _ZN7S2362C33v16Ev
  virtual void  v17(); // _ZN7S2362C33v17Ev
  virtual void  v18(); // _ZN7S2362C33v18Ev
  virtual void  v19(); // _ZN7S2362C33v19Ev
  virtual void  v20(); // _ZN7S2362C33v20Ev
  S2362C3(); // tgen
};
//SIG(-1 S2362C3) C1{ BC2{ vd v11 v12 v13 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fc Fi}


 S2362C3 ::~S2362C3(){ note_dtor("S2362C3", this);}
void  S2362C3 ::v11(){vfunc_called(this, "_ZN7S2362C33v11Ev");}
void  S2362C3 ::v12(){vfunc_called(this, "_ZN7S2362C33v12Ev");}
void  S2362C3 ::v13(){vfunc_called(this, "_ZN7S2362C33v13Ev");}
void  S2362C3 ::v14(){vfunc_called(this, "_ZN7S2362C33v14Ev");}
void  S2362C3 ::v15(){vfunc_called(this, "_ZN7S2362C33v15Ev");}
void  S2362C3 ::v16(){vfunc_called(this, "_ZN7S2362C33v16Ev");}
void  S2362C3 ::v17(){vfunc_called(this, "_ZN7S2362C33v17Ev");}
void  S2362C3 ::v18(){vfunc_called(this, "_ZN7S2362C33v18Ev");}
void  S2362C3 ::v19(){vfunc_called(this, "_ZN7S2362C33v19Ev");}
void  S2362C3 ::v20(){vfunc_called(this, "_ZN7S2362C33v20Ev");}
S2362C3 ::S2362C3(){ note_ctor("S2362C3", this);} // tgen

static void Test_S2362C3()
{
  extern Class_Descriptor cd_S2362C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S2362C3, buf);
    S2362C3 *dp, &lv = *(dp=new (buf) S2362C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S2362C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2362C3)");
    check_base_class_offset(lv, (S2362C4*), 0, "S2362C3");
    check_base_class_offset(lv, (S2362C7*), ABISELECT(40,28), "S2362C3");
    check_field_offset(lv, s2362c3f0, ABISELECT(48,32), "S2362C3.s2362c3f0");
    check_field_offset(lv, s2362c3f1, ABISELECT(56,36), "S2362C3.s2362c3f1");
    check_field_offset(lv, s2362c3f2, ABISELECT(60,40), "S2362C3.s2362c3f2");
    test_class_info(&lv, &cd_S2362C3);
    dp->~S2362C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2362C3(Test_S2362C3, "S2362C3", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S2362C3C1Ev();
extern void _ZN7S2362C3D1Ev();
Name_Map name_map_S2362C3[] = {
  NSPAIR(_ZN7S2362C3C1Ev),
  NSPAIR(_ZN7S2362C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2362C4;
extern VTBL_ENTRY _ZTI7S2362C4[];
extern  VTBL_ENTRY _ZTV7S2362C4[];
extern Class_Descriptor cd_S2362C7;
extern VTBL_ENTRY _ZTI7S2362C7[];
extern  VTBL_ENTRY _ZTV7S2362C7[];
static Base_Class bases_S2362C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2362C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2362C7,    ABISELECT(40,28), //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2362C3[];
extern void _ZN7S2362C3D1Ev();
extern void _ZN7S2362C3D0Ev();
extern void _ZN7S2362C42v5Ev();
extern void _ZN7S2362C42v6Ev();
extern void _ZN7S2362C42v7Ev();
extern void _ZN7S2362C33v11Ev();
extern void _ZN7S2362C33v12Ev();
extern void _ZN7S2362C33v13Ev();
extern void _ZN7S2362C33v14Ev();
extern void _ZN7S2362C33v15Ev();
extern void _ZN7S2362C33v16Ev();
extern void _ZN7S2362C33v17Ev();
extern void _ZN7S2362C33v18Ev();
extern void _ZN7S2362C33v19Ev();
extern void _ZN7S2362C33v20Ev();
extern void ABISELECT(_ZThn40_N7S2362C3D1Ev,_ZThn28_N7S2362C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2362C3D0Ev,_ZThn28_N7S2362C3D0Ev)();
extern void _ZN7S2362C72v8Ev();
extern void _ZN7S2362C72v9Ev();
extern void _ZN7S2362C73v10Ev();
static  VTBL_ENTRY vtc_S2362C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2362C3[0]),
  (VTBL_ENTRY)&_ZN7S2362C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2362C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2362C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2362C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2362C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v20Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2362C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2362C3D1Ev,_ZThn28_N7S2362C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2362C3D0Ev,_ZThn28_N7S2362C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2362C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2362C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2362C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2362C3[];
extern  VTBL_ENTRY _ZTV7S2362C3[];
Class_Descriptor cd_S2362C3 = {  "S2362C3", // class name
  bases_S2362C3, 2,
  &(vtc_S2362C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S2362C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2362C3),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  S2362C10  {
  virtual  ~S2362C10(); // _ZN8S2362C10D1Ev
  virtual void  v21(); // _ZN8S2362C103v21Ev
  virtual void  v22(); // _ZN8S2362C103v22Ev
  virtual void  v23(); // _ZN8S2362C103v23Ev
  S2362C10(); // tgen
};
//SIG(-1 S2362C10) C1{ vd v1 v2 v3}


 S2362C10 ::~S2362C10(){ note_dtor("S2362C10", this);}
void  S2362C10 ::v21(){vfunc_called(this, "_ZN8S2362C103v21Ev");}
void  S2362C10 ::v22(){vfunc_called(this, "_ZN8S2362C103v22Ev");}
void  S2362C10 ::v23(){vfunc_called(this, "_ZN8S2362C103v23Ev");}
S2362C10 ::S2362C10(){ note_ctor("S2362C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2362C10C1Ev();
extern void _ZN8S2362C10D1Ev();
Name_Map name_map_S2362C10[] = {
  NSPAIR(_ZN8S2362C10C1Ev),
  NSPAIR(_ZN8S2362C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2362C10[];
extern void _ZN8S2362C10D1Ev();
extern void _ZN8S2362C10D0Ev();
extern void _ZN8S2362C103v21Ev();
extern void _ZN8S2362C103v22Ev();
extern void _ZN8S2362C103v23Ev();
static  VTBL_ENTRY vtc_S2362C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2362C10[0]),
  (VTBL_ENTRY)&_ZN8S2362C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2362C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2362C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2362C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2362C103v23Ev,
};
extern VTBL_ENTRY _ZTI8S2362C10[];
extern  VTBL_ENTRY _ZTV8S2362C10[];
Class_Descriptor cd_S2362C10 = {  "S2362C10", // class name
  0,0,//no base classes
  &(vtc_S2362C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2362C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2362C10),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  S2362C9  : S2362C10 {
  ::S5166C36 s2362c9f0;
  ::S2355C13_nt s2362c9f1;
  char s2362c9f2;
  virtual  ~S2362C9(); // _ZN7S2362C9D1Ev
  virtual void  v24(); // _ZN7S2362C93v24Ev
  virtual void  v25(); // _ZN7S2362C93v25Ev
  virtual void  v26(); // _ZN7S2362C93v26Ev
  S2362C9(); // tgen
};
//SIG(-1 S2362C9) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2362C9 ::~S2362C9(){ note_dtor("S2362C9", this);}
void  S2362C9 ::v24(){vfunc_called(this, "_ZN7S2362C93v24Ev");}
void  S2362C9 ::v25(){vfunc_called(this, "_ZN7S2362C93v25Ev");}
void  S2362C9 ::v26(){vfunc_called(this, "_ZN7S2362C93v26Ev");}
S2362C9 ::S2362C9(){ note_ctor("S2362C9", this);} // tgen

static void Test_S2362C9()
{
  extern Class_Descriptor cd_S2362C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2362C9, buf);
    S2362C9 *dp, &lv = *(dp=new (buf) S2362C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2362C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2362C9)");
    check_base_class_offset(lv, (S2362C10*), 0, "S2362C9");
    check_field_offset(lv, s2362c9f0, ABISELECT(8,4), "S2362C9.s2362c9f0");
    check_field_offset(lv, s2362c9f1, ABISELECT(32,20), "S2362C9.s2362c9f1");
    check_field_offset(lv, s2362c9f2, ABISELECT(64,52), "S2362C9.s2362c9f2");
    test_class_info(&lv, &cd_S2362C9);
    dp->~S2362C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2362C9(Test_S2362C9, "S2362C9", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2362C9C1Ev();
extern void _ZN7S2362C9D1Ev();
Name_Map name_map_S2362C9[] = {
  NSPAIR(_ZN7S2362C9C1Ev),
  NSPAIR(_ZN7S2362C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2362C10;
extern VTBL_ENTRY _ZTI8S2362C10[];
extern  VTBL_ENTRY _ZTV8S2362C10[];
static Base_Class bases_S2362C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2362C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2362C9[];
extern void _ZN7S2362C9D1Ev();
extern void _ZN7S2362C9D0Ev();
extern void _ZN8S2362C103v21Ev();
extern void _ZN8S2362C103v22Ev();
extern void _ZN8S2362C103v23Ev();
extern void _ZN7S2362C93v24Ev();
extern void _ZN7S2362C93v25Ev();
extern void _ZN7S2362C93v26Ev();
static  VTBL_ENTRY vtc_S2362C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2362C9[0]),
  (VTBL_ENTRY)&_ZN7S2362C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2362C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2362C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2362C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2362C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2362C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2362C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2362C93v26Ev,
};
extern VTBL_ENTRY _ZTI7S2362C9[];
extern  VTBL_ENTRY _ZTV7S2362C9[];
Class_Descriptor cd_S2362C9 = {  "S2362C9", // class name
  bases_S2362C9, 1,
  &(vtc_S2362C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2362C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2362C9),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  S2362C8  : S2362C9 {
  virtual  ~S2362C8(); // _ZN7S2362C8D1Ev
  virtual void  v27(); // _ZN7S2362C83v27Ev
  virtual void  v28(); // _ZN7S2362C83v28Ev
  virtual void  v29(); // _ZN7S2362C83v29Ev
  virtual void  v30(); // _ZN7S2362C83v30Ev
  S2362C8(); // tgen
};
//SIG(-1 S2362C8) C1{ BC2{ BC3{ vd v5 v6 v7} vd v8 v9 v10 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4}


 S2362C8 ::~S2362C8(){ note_dtor("S2362C8", this);}
void  S2362C8 ::v27(){vfunc_called(this, "_ZN7S2362C83v27Ev");}
void  S2362C8 ::v28(){vfunc_called(this, "_ZN7S2362C83v28Ev");}
void  S2362C8 ::v29(){vfunc_called(this, "_ZN7S2362C83v29Ev");}
void  S2362C8 ::v30(){vfunc_called(this, "_ZN7S2362C83v30Ev");}
S2362C8 ::S2362C8(){ note_ctor("S2362C8", this);} // tgen

static void Test_S2362C8()
{
  extern Class_Descriptor cd_S2362C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2362C8, buf);
    S2362C8 *dp, &lv = *(dp=new (buf) S2362C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2362C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2362C8)");
    check_base_class_offset(lv, (S2362C10*)(S2362C9*), 0, "S2362C8");
    check_base_class_offset(lv, (S2362C9*), 0, "S2362C8");
    test_class_info(&lv, &cd_S2362C8);
    dp->~S2362C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2362C8(Test_S2362C8, "S2362C8", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2362C8C1Ev();
extern void _ZN7S2362C8D1Ev();
Name_Map name_map_S2362C8[] = {
  NSPAIR(_ZN7S2362C8C1Ev),
  NSPAIR(_ZN7S2362C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2362C10;
extern VTBL_ENTRY _ZTI8S2362C10[];
extern  VTBL_ENTRY _ZTV8S2362C10[];
extern Class_Descriptor cd_S2362C9;
extern VTBL_ENTRY _ZTI7S2362C9[];
extern  VTBL_ENTRY _ZTV7S2362C9[];
static Base_Class bases_S2362C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2362C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2362C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2362C8[];
extern void _ZN7S2362C8D1Ev();
extern void _ZN7S2362C8D0Ev();
extern void _ZN8S2362C103v21Ev();
extern void _ZN8S2362C103v22Ev();
extern void _ZN8S2362C103v23Ev();
extern void _ZN7S2362C93v24Ev();
extern void _ZN7S2362C93v25Ev();
extern void _ZN7S2362C93v26Ev();
extern void _ZN7S2362C83v27Ev();
extern void _ZN7S2362C83v28Ev();
extern void _ZN7S2362C83v29Ev();
extern void _ZN7S2362C83v30Ev();
static  VTBL_ENTRY vtc_S2362C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2362C8[0]),
  (VTBL_ENTRY)&_ZN7S2362C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2362C8D0Ev,
  (VTBL_ENTRY)&_ZN8S2362C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2362C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2362C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2362C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2362C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2362C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2362C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2362C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2362C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2362C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2362C8[];
extern  VTBL_ENTRY _ZTV7S2362C8[];
Class_Descriptor cd_S2362C8 = {  "S2362C8", // class name
  bases_S2362C8, 2,
  &(vtc_S2362C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2362C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2362C8),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2362C2  : S2362C3 , S2362C8 {
  int s2362c2f0[3];
  char s2362c2f1;
  ::S5166C24 s2362c2f2;
  virtual  ~S2362C2(); // _ZN7S2362C2D1Ev
  virtual void  v31(); // _ZN7S2362C23v31Ev
  virtual void  v32(); // _ZN7S2362C23v32Ev
  virtual void  v33(); // _ZN7S2362C23v33Ev
  virtual void  v34(); // _ZN7S2362C23v34Ev
  virtual void  v35(); // _ZN7S2362C23v35Ev
  virtual void  v36(); // _ZN7S2362C23v36Ev
  S2362C2(); // tgen
};
//SIG(-1 S2362C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd v10 v11 v12} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp Fc Fi} BC7{ BC8{ BC9{ vd v23 v24 v25} vd v26 v27 v28 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m FL[4]} Fc} vd v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 Fi[3] Fc FC13{ BC14{ m Fp Fi FC15{ m} FC16{ m}}}}


 S2362C2 ::~S2362C2(){ note_dtor("S2362C2", this);}
void  S2362C2 ::v31(){vfunc_called(this, "_ZN7S2362C23v31Ev");}
void  S2362C2 ::v32(){vfunc_called(this, "_ZN7S2362C23v32Ev");}
void  S2362C2 ::v33(){vfunc_called(this, "_ZN7S2362C23v33Ev");}
void  S2362C2 ::v34(){vfunc_called(this, "_ZN7S2362C23v34Ev");}
void  S2362C2 ::v35(){vfunc_called(this, "_ZN7S2362C23v35Ev");}
void  S2362C2 ::v36(){vfunc_called(this, "_ZN7S2362C23v36Ev");}
S2362C2 ::S2362C2(){ note_ctor("S2362C2", this);} // tgen

static void Test_S2362C2()
{
  extern Class_Descriptor cd_S2362C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,33)];
    init_test(&cd_S2362C2, buf);
    S2362C2 *dp, &lv = *(dp=new (buf) S2362C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,128), "sizeof(S2362C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2362C2)");
    check_base_class_offset(lv, (S2362C4*)(S2362C3*), 0, "S2362C2");
    check_base_class_offset(lv, (S2362C7*)(S2362C3*), ABISELECT(40,28), "S2362C2");
    check_base_class_offset(lv, (S2362C3*), 0, "S2362C2");
    check_base_class_offset(lv, (S2362C10*)(S2362C9*)(S2362C8*), ABISELECT(64,44), "S2362C2");
    check_base_class_offset(lv, (S2362C9*)(S2362C8*), ABISELECT(64,44), "S2362C2");
    check_base_class_offset(lv, (S2362C8*), ABISELECT(64,44), "S2362C2");
    check_field_offset(lv, s2362c2f0, ABISELECT(132,100), "S2362C2.s2362c2f0");
    check_field_offset(lv, s2362c2f1, ABISELECT(144,112), "S2362C2.s2362c2f1");
    check_field_offset(lv, s2362c2f2, ABISELECT(152,116), "S2362C2.s2362c2f2");
    test_class_info(&lv, &cd_S2362C2);
    dp->~S2362C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2362C2(Test_S2362C2, "S2362C2", ABISELECT(168,128));

#else // __cplusplus

extern void _ZN7S2362C2C1Ev();
extern void _ZN7S2362C2D1Ev();
Name_Map name_map_S2362C2[] = {
  NSPAIR(_ZN7S2362C2C1Ev),
  NSPAIR(_ZN7S2362C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2362C4;
extern VTBL_ENTRY _ZTI7S2362C4[];
extern  VTBL_ENTRY _ZTV7S2362C4[];
extern Class_Descriptor cd_S2362C7;
extern VTBL_ENTRY _ZTI7S2362C7[];
extern  VTBL_ENTRY _ZTV7S2362C7[];
extern Class_Descriptor cd_S2362C3;
extern VTBL_ENTRY _ZTI7S2362C3[];
extern  VTBL_ENTRY _ZTV7S2362C3[];
extern Class_Descriptor cd_S2362C10;
extern VTBL_ENTRY _ZTI8S2362C10[];
extern  VTBL_ENTRY _ZTV8S2362C10[];
extern Class_Descriptor cd_S2362C9;
extern VTBL_ENTRY _ZTI7S2362C9[];
extern  VTBL_ENTRY _ZTV7S2362C9[];
extern Class_Descriptor cd_S2362C8;
extern VTBL_ENTRY _ZTI7S2362C8[];
extern  VTBL_ENTRY _ZTV7S2362C8[];
static Base_Class bases_S2362C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2362C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2362C7,    ABISELECT(40,28), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2362C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2362C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2362C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2362C8,    ABISELECT(64,44), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2362C2[];
extern void _ZN7S2362C2D1Ev();
extern void _ZN7S2362C2D0Ev();
extern void _ZN7S2362C42v5Ev();
extern void _ZN7S2362C42v6Ev();
extern void _ZN7S2362C42v7Ev();
extern void _ZN7S2362C33v11Ev();
extern void _ZN7S2362C33v12Ev();
extern void _ZN7S2362C33v13Ev();
extern void _ZN7S2362C33v14Ev();
extern void _ZN7S2362C33v15Ev();
extern void _ZN7S2362C33v16Ev();
extern void _ZN7S2362C33v17Ev();
extern void _ZN7S2362C33v18Ev();
extern void _ZN7S2362C33v19Ev();
extern void _ZN7S2362C33v20Ev();
extern void _ZN7S2362C23v31Ev();
extern void _ZN7S2362C23v32Ev();
extern void _ZN7S2362C23v33Ev();
extern void _ZN7S2362C23v34Ev();
extern void _ZN7S2362C23v35Ev();
extern void _ZN7S2362C23v36Ev();
extern void ABISELECT(_ZThn40_N7S2362C2D1Ev,_ZThn28_N7S2362C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2362C2D0Ev,_ZThn28_N7S2362C2D0Ev)();
extern void _ZN7S2362C72v8Ev();
extern void _ZN7S2362C72v9Ev();
extern void _ZN7S2362C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2362C2D1Ev,_ZThn44_N7S2362C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S2362C2D0Ev,_ZThn44_N7S2362C2D0Ev)();
extern void _ZN8S2362C103v21Ev();
extern void _ZN8S2362C103v22Ev();
extern void _ZN8S2362C103v23Ev();
extern void _ZN7S2362C93v24Ev();
extern void _ZN7S2362C93v25Ev();
extern void _ZN7S2362C93v26Ev();
extern void _ZN7S2362C83v27Ev();
extern void _ZN7S2362C83v28Ev();
extern void _ZN7S2362C83v29Ev();
extern void _ZN7S2362C83v30Ev();
static  VTBL_ENTRY vtc_S2362C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2362C2[0]),
  (VTBL_ENTRY)&_ZN7S2362C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2362C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2362C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2362C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2362C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2362C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2362C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2362C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2362C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2362C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2362C23v36Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2362C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2362C2D1Ev,_ZThn28_N7S2362C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2362C2D0Ev,_ZThn28_N7S2362C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2362C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2362C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2362C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2362C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2362C2D1Ev,_ZThn44_N7S2362C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2362C2D0Ev,_ZThn44_N7S2362C2D0Ev),
  (VTBL_ENTRY)&_ZN8S2362C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2362C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2362C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2362C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2362C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2362C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2362C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2362C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2362C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2362C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2362C2[];
extern  VTBL_ENTRY _ZTV7S2362C2[];
Class_Descriptor cd_S2362C2 = {  "S2362C2", // class name
  bases_S2362C2, 6,
  &(vtc_S2362C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,128), // object size
  NSPAIRA(_ZTI7S2362C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2362C2),44, //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  S2362C1  : S2362C2 {
  ::S2361C18_nt s2362c1f0;
  ::S2355C19_nt s2362c1f1;
  int s2362c1f2;
  ::S5166C19_nt s2362c1f3;
  void *s2362c1f4;
  int s2362c1f5;
  virtual  ~S2362C1(); // _ZN7S2362C1D1Ev
  virtual void  v1(); // _ZN7S2362C12v1Ev
  virtual void  v2(); // _ZN7S2362C12v2Ev
  virtual void  v3(); // _ZN7S2362C12v3Ev
  virtual void  v4(); // _ZN7S2362C12v4Ev
  S2362C1(); // tgen
};
//SIG(1 S2362C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd v8 v9 v10} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp Fc Fi} BC8{ BC9{ BC10{ vd v21 v22 v23} vd v24 v25 v26 FC11{ m Fp Fi[2] FC12{ m}} FC13{ m FL[4]} Fc} vd v27 v28 v29 v30} vd v31 v32 v33 v34 v35 v36 Fi[3] Fc FC14{ BC15{ m Fp Fi FC16{ m} FC17{ m}}}} vd v1 v2 v3 v4 FC18{ vd v37 v38 v39 v40 v41 v42 Fp} FC19{ BC20{ vd v44 FC21{ m FC15} Fp[3] Fc} v43 Fp} Fi FC5 Fp Fi}


 S2362C1 ::~S2362C1(){ note_dtor("S2362C1", this);}
void  S2362C1 ::v1(){vfunc_called(this, "_ZN7S2362C12v1Ev");}
void  S2362C1 ::v2(){vfunc_called(this, "_ZN7S2362C12v2Ev");}
void  S2362C1 ::v3(){vfunc_called(this, "_ZN7S2362C12v3Ev");}
void  S2362C1 ::v4(){vfunc_called(this, "_ZN7S2362C12v4Ev");}
S2362C1 ::S2362C1(){ note_ctor("S2362C1", this);} // tgen

static void Test_S2362C1()
{
  extern Class_Descriptor cd_S2362C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,50)];
    init_test(&cd_S2362C1, buf);
    S2362C1 *dp, &lv = *(dp=new (buf) S2362C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,196), "sizeof(S2362C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2362C1)");
    check_base_class_offset(lv, (S2362C4*)(S2362C3*)(S2362C2*), 0, "S2362C1");
    check_base_class_offset(lv, (S2362C7*)(S2362C3*)(S2362C2*), ABISELECT(40,28), "S2362C1");
    check_base_class_offset(lv, (S2362C3*)(S2362C2*), 0, "S2362C1");
    check_base_class_offset(lv, (S2362C10*)(S2362C9*)(S2362C8*)(S2362C2*), ABISELECT(64,44), "S2362C1");
    check_base_class_offset(lv, (S2362C9*)(S2362C8*)(S2362C2*), ABISELECT(64,44), "S2362C1");
    check_base_class_offset(lv, (S2362C8*)(S2362C2*), ABISELECT(64,44), "S2362C1");
    check_base_class_offset(lv, (S2362C2*), 0, "S2362C1");
    check_field_offset(lv, s2362c1f0, ABISELECT(168,128), "S2362C1.s2362c1f0");
    check_field_offset(lv, s2362c1f1, ABISELECT(184,136), "S2362C1.s2362c1f1");
    check_field_offset(lv, s2362c1f2, ABISELECT(248,172), "S2362C1.s2362c1f2");
    check_field_offset(lv, s2362c1f3, ABISELECT(256,176), "S2362C1.s2362c1f3");
    check_field_offset(lv, s2362c1f4, ABISELECT(272,188), "S2362C1.s2362c1f4");
    check_field_offset(lv, s2362c1f5, ABISELECT(280,192), "S2362C1.s2362c1f5");
    test_class_info(&lv, &cd_S2362C1);
    dp->~S2362C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2362C1(Test_S2362C1, "S2362C1", ABISELECT(288,196));

#else // __cplusplus

extern void _ZN7S2362C1C1Ev();
extern void _ZN7S2362C1D1Ev();
Name_Map name_map_S2362C1[] = {
  NSPAIR(_ZN7S2362C1C1Ev),
  NSPAIR(_ZN7S2362C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2362C4;
extern VTBL_ENTRY _ZTI7S2362C4[];
extern  VTBL_ENTRY _ZTV7S2362C4[];
extern Class_Descriptor cd_S2362C7;
extern VTBL_ENTRY _ZTI7S2362C7[];
extern  VTBL_ENTRY _ZTV7S2362C7[];
extern Class_Descriptor cd_S2362C3;
extern VTBL_ENTRY _ZTI7S2362C3[];
extern  VTBL_ENTRY _ZTV7S2362C3[];
extern Class_Descriptor cd_S2362C10;
extern VTBL_ENTRY _ZTI8S2362C10[];
extern  VTBL_ENTRY _ZTV8S2362C10[];
extern Class_Descriptor cd_S2362C9;
extern VTBL_ENTRY _ZTI7S2362C9[];
extern  VTBL_ENTRY _ZTV7S2362C9[];
extern Class_Descriptor cd_S2362C8;
extern VTBL_ENTRY _ZTI7S2362C8[];
extern  VTBL_ENTRY _ZTV7S2362C8[];
extern Class_Descriptor cd_S2362C2;
extern VTBL_ENTRY _ZTI7S2362C2[];
extern  VTBL_ENTRY _ZTV7S2362C2[];
static Base_Class bases_S2362C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2362C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2362C7,    ABISELECT(40,28), //bcp->offset
    27, //bcp->virtual_function_table_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_S2362C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2362C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2362C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2362C8,    ABISELECT(64,44), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2362C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2362C1[];
extern void _ZN7S2362C1D1Ev();
extern void _ZN7S2362C1D0Ev();
extern void _ZN7S2362C42v5Ev();
extern void _ZN7S2362C42v6Ev();
extern void _ZN7S2362C42v7Ev();
extern void _ZN7S2362C33v11Ev();
extern void _ZN7S2362C33v12Ev();
extern void _ZN7S2362C33v13Ev();
extern void _ZN7S2362C33v14Ev();
extern void _ZN7S2362C33v15Ev();
extern void _ZN7S2362C33v16Ev();
extern void _ZN7S2362C33v17Ev();
extern void _ZN7S2362C33v18Ev();
extern void _ZN7S2362C33v19Ev();
extern void _ZN7S2362C33v20Ev();
extern void _ZN7S2362C23v31Ev();
extern void _ZN7S2362C23v32Ev();
extern void _ZN7S2362C23v33Ev();
extern void _ZN7S2362C23v34Ev();
extern void _ZN7S2362C23v35Ev();
extern void _ZN7S2362C23v36Ev();
extern void _ZN7S2362C12v1Ev();
extern void _ZN7S2362C12v2Ev();
extern void _ZN7S2362C12v3Ev();
extern void _ZN7S2362C12v4Ev();
extern void ABISELECT(_ZThn40_N7S2362C1D1Ev,_ZThn28_N7S2362C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2362C1D0Ev,_ZThn28_N7S2362C1D0Ev)();
extern void _ZN7S2362C72v8Ev();
extern void _ZN7S2362C72v9Ev();
extern void _ZN7S2362C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2362C1D1Ev,_ZThn44_N7S2362C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S2362C1D0Ev,_ZThn44_N7S2362C1D0Ev)();
extern void _ZN8S2362C103v21Ev();
extern void _ZN8S2362C103v22Ev();
extern void _ZN8S2362C103v23Ev();
extern void _ZN7S2362C93v24Ev();
extern void _ZN7S2362C93v25Ev();
extern void _ZN7S2362C93v26Ev();
extern void _ZN7S2362C83v27Ev();
extern void _ZN7S2362C83v28Ev();
extern void _ZN7S2362C83v29Ev();
extern void _ZN7S2362C83v30Ev();
static  VTBL_ENTRY vtc_S2362C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2362C1[0]),
  (VTBL_ENTRY)&_ZN7S2362C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2362C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2362C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2362C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2362C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2362C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2362C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2362C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2362C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2362C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2362C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2362C23v36Ev,
  (VTBL_ENTRY)&_ZN7S2362C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2362C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2362C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2362C12v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2362C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2362C1D1Ev,_ZThn28_N7S2362C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2362C1D0Ev,_ZThn28_N7S2362C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2362C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2362C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2362C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2362C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2362C1D1Ev,_ZThn44_N7S2362C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2362C1D0Ev,_ZThn44_N7S2362C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2362C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2362C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2362C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2362C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2362C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2362C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2362C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2362C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2362C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2362C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2362C1[];
extern  VTBL_ENTRY _ZTV7S2362C1[];
Class_Descriptor cd_S2362C1 = {  "S2362C1", // class name
  bases_S2362C1, 7,
  &(vtc_S2362C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,196), // object size
  NSPAIRA(_ZTI7S2362C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2362C1),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2363C4  {
  ::S5166C19_nt s2363c4f0;
  int s2363c4f1[2];
  char s2363c4f2;
  virtual  ~S2363C4(); // _ZN7S2363C4D1Ev
  virtual void  v5(); // _ZN7S2363C42v5Ev
  virtual void  v6(); // _ZN7S2363C42v6Ev
  virtual void  v7(); // _ZN7S2363C42v7Ev
  S2363C4(); // tgen
};
//SIG(-1 S2363C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2363C4 ::~S2363C4(){ note_dtor("S2363C4", this);}
void  S2363C4 ::v5(){vfunc_called(this, "_ZN7S2363C42v5Ev");}
void  S2363C4 ::v6(){vfunc_called(this, "_ZN7S2363C42v6Ev");}
void  S2363C4 ::v7(){vfunc_called(this, "_ZN7S2363C42v7Ev");}
S2363C4 ::S2363C4(){ note_ctor("S2363C4", this);} // tgen

static void Test_S2363C4()
{
  extern Class_Descriptor cd_S2363C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2363C4, buf);
    S2363C4 *dp, &lv = *(dp=new (buf) S2363C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2363C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2363C4)");
    check_field_offset(lv, s2363c4f0, ABISELECT(8,4), "S2363C4.s2363c4f0");
    check_field_offset(lv, s2363c4f1, ABISELECT(24,16), "S2363C4.s2363c4f1");
    check_field_offset(lv, s2363c4f2, ABISELECT(32,24), "S2363C4.s2363c4f2");
    test_class_info(&lv, &cd_S2363C4);
    dp->~S2363C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2363C4(Test_S2363C4, "S2363C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2363C4C1Ev();
extern void _ZN7S2363C4D1Ev();
Name_Map name_map_S2363C4[] = {
  NSPAIR(_ZN7S2363C4C1Ev),
  NSPAIR(_ZN7S2363C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2363C4[];
extern void _ZN7S2363C4D1Ev();
extern void _ZN7S2363C4D0Ev();
extern void _ZN7S2363C42v5Ev();
extern void _ZN7S2363C42v6Ev();
extern void _ZN7S2363C42v7Ev();
static  VTBL_ENTRY vtc_S2363C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2363C4[0]),
  (VTBL_ENTRY)&_ZN7S2363C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2363C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2363C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2363C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2363C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S2363C4[];
extern  VTBL_ENTRY _ZTV7S2363C4[];
Class_Descriptor cd_S2363C4 = {  "S2363C4", // class name
  0,0,//no base classes
  &(vtc_S2363C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2363C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2363C4),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  S2363C7  {
  virtual  ~S2363C7(); // _ZN7S2363C7D1Ev
  virtual void  v8(); // _ZN7S2363C72v8Ev
  virtual void  v9(); // _ZN7S2363C72v9Ev
  virtual void  v10(); // _ZN7S2363C73v10Ev
  S2363C7(); // tgen
};
//SIG(-1 S2363C7) C1{ vd v1 v2 v3}


 S2363C7 ::~S2363C7(){ note_dtor("S2363C7", this);}
void  S2363C7 ::v8(){vfunc_called(this, "_ZN7S2363C72v8Ev");}
void  S2363C7 ::v9(){vfunc_called(this, "_ZN7S2363C72v9Ev");}
void  S2363C7 ::v10(){vfunc_called(this, "_ZN7S2363C73v10Ev");}
S2363C7 ::S2363C7(){ note_ctor("S2363C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2363C7C1Ev();
extern void _ZN7S2363C7D1Ev();
Name_Map name_map_S2363C7[] = {
  NSPAIR(_ZN7S2363C7C1Ev),
  NSPAIR(_ZN7S2363C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2363C7[];
extern void _ZN7S2363C7D1Ev();
extern void _ZN7S2363C7D0Ev();
extern void _ZN7S2363C72v8Ev();
extern void _ZN7S2363C72v9Ev();
extern void _ZN7S2363C73v10Ev();
static  VTBL_ENTRY vtc_S2363C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2363C7[0]),
  (VTBL_ENTRY)&_ZN7S2363C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2363C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2363C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2363C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2363C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2363C7[];
extern  VTBL_ENTRY _ZTV7S2363C7[];
Class_Descriptor cd_S2363C7 = {  "S2363C7", // class name
  0,0,//no base classes
  &(vtc_S2363C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2363C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2363C7),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  S2363C3  : S2363C4 , S2363C7 {
  void *s2363c3f0;
  char s2363c3f1;
  int s2363c3f2;
  virtual  ~S2363C3(); // _ZN7S2363C3D1Ev
  virtual void  v11(); // _ZN7S2363C33v11Ev
  virtual void  v12(); // _ZN7S2363C33v12Ev
  virtual void  v13(); // _ZN7S2363C33v13Ev
  virtual void  v14(); // _ZN7S2363C33v14Ev
  virtual void  v15(); // _ZN7S2363C33v15Ev
  virtual void  v16(); // _ZN7S2363C33v16Ev
  virtual void  v17(); // _ZN7S2363C33v17Ev
  virtual void  v18(); // _ZN7S2363C33v18Ev
  virtual void  v19(); // _ZN7S2363C33v19Ev
  virtual void  v20(); // _ZN7S2363C33v20Ev
  S2363C3(); // tgen
};
//SIG(-1 S2363C3) C1{ BC2{ vd v11 v12 v13 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fc Fi}


 S2363C3 ::~S2363C3(){ note_dtor("S2363C3", this);}
void  S2363C3 ::v11(){vfunc_called(this, "_ZN7S2363C33v11Ev");}
void  S2363C3 ::v12(){vfunc_called(this, "_ZN7S2363C33v12Ev");}
void  S2363C3 ::v13(){vfunc_called(this, "_ZN7S2363C33v13Ev");}
void  S2363C3 ::v14(){vfunc_called(this, "_ZN7S2363C33v14Ev");}
void  S2363C3 ::v15(){vfunc_called(this, "_ZN7S2363C33v15Ev");}
void  S2363C3 ::v16(){vfunc_called(this, "_ZN7S2363C33v16Ev");}
void  S2363C3 ::v17(){vfunc_called(this, "_ZN7S2363C33v17Ev");}
void  S2363C3 ::v18(){vfunc_called(this, "_ZN7S2363C33v18Ev");}
void  S2363C3 ::v19(){vfunc_called(this, "_ZN7S2363C33v19Ev");}
void  S2363C3 ::v20(){vfunc_called(this, "_ZN7S2363C33v20Ev");}
S2363C3 ::S2363C3(){ note_ctor("S2363C3", this);} // tgen

static void Test_S2363C3()
{
  extern Class_Descriptor cd_S2363C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S2363C3, buf);
    S2363C3 *dp, &lv = *(dp=new (buf) S2363C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S2363C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2363C3)");
    check_base_class_offset(lv, (S2363C4*), 0, "S2363C3");
    check_base_class_offset(lv, (S2363C7*), ABISELECT(40,28), "S2363C3");
    check_field_offset(lv, s2363c3f0, ABISELECT(48,32), "S2363C3.s2363c3f0");
    check_field_offset(lv, s2363c3f1, ABISELECT(56,36), "S2363C3.s2363c3f1");
    check_field_offset(lv, s2363c3f2, ABISELECT(60,40), "S2363C3.s2363c3f2");
    test_class_info(&lv, &cd_S2363C3);
    dp->~S2363C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2363C3(Test_S2363C3, "S2363C3", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S2363C3C1Ev();
extern void _ZN7S2363C3D1Ev();
Name_Map name_map_S2363C3[] = {
  NSPAIR(_ZN7S2363C3C1Ev),
  NSPAIR(_ZN7S2363C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2363C4;
extern VTBL_ENTRY _ZTI7S2363C4[];
extern  VTBL_ENTRY _ZTV7S2363C4[];
extern Class_Descriptor cd_S2363C7;
extern VTBL_ENTRY _ZTI7S2363C7[];
extern  VTBL_ENTRY _ZTV7S2363C7[];
static Base_Class bases_S2363C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2363C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2363C7,    ABISELECT(40,28), //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2363C3[];
extern void _ZN7S2363C3D1Ev();
extern void _ZN7S2363C3D0Ev();
extern void _ZN7S2363C42v5Ev();
extern void _ZN7S2363C42v6Ev();
extern void _ZN7S2363C42v7Ev();
extern void _ZN7S2363C33v11Ev();
extern void _ZN7S2363C33v12Ev();
extern void _ZN7S2363C33v13Ev();
extern void _ZN7S2363C33v14Ev();
extern void _ZN7S2363C33v15Ev();
extern void _ZN7S2363C33v16Ev();
extern void _ZN7S2363C33v17Ev();
extern void _ZN7S2363C33v18Ev();
extern void _ZN7S2363C33v19Ev();
extern void _ZN7S2363C33v20Ev();
extern void ABISELECT(_ZThn40_N7S2363C3D1Ev,_ZThn28_N7S2363C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2363C3D0Ev,_ZThn28_N7S2363C3D0Ev)();
extern void _ZN7S2363C72v8Ev();
extern void _ZN7S2363C72v9Ev();
extern void _ZN7S2363C73v10Ev();
static  VTBL_ENTRY vtc_S2363C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2363C3[0]),
  (VTBL_ENTRY)&_ZN7S2363C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2363C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2363C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2363C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2363C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v20Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2363C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2363C3D1Ev,_ZThn28_N7S2363C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2363C3D0Ev,_ZThn28_N7S2363C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2363C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2363C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2363C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2363C3[];
extern  VTBL_ENTRY _ZTV7S2363C3[];
Class_Descriptor cd_S2363C3 = {  "S2363C3", // class name
  bases_S2363C3, 2,
  &(vtc_S2363C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S2363C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2363C3),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  S2363C10  {
  virtual  ~S2363C10(); // _ZN8S2363C10D1Ev
  virtual void  v21(); // _ZN8S2363C103v21Ev
  virtual void  v22(); // _ZN8S2363C103v22Ev
  virtual void  v23(); // _ZN8S2363C103v23Ev
  S2363C10(); // tgen
};
//SIG(-1 S2363C10) C1{ vd v1 v2 v3}


 S2363C10 ::~S2363C10(){ note_dtor("S2363C10", this);}
void  S2363C10 ::v21(){vfunc_called(this, "_ZN8S2363C103v21Ev");}
void  S2363C10 ::v22(){vfunc_called(this, "_ZN8S2363C103v22Ev");}
void  S2363C10 ::v23(){vfunc_called(this, "_ZN8S2363C103v23Ev");}
S2363C10 ::S2363C10(){ note_ctor("S2363C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2363C10C1Ev();
extern void _ZN8S2363C10D1Ev();
Name_Map name_map_S2363C10[] = {
  NSPAIR(_ZN8S2363C10C1Ev),
  NSPAIR(_ZN8S2363C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2363C10[];
extern void _ZN8S2363C10D1Ev();
extern void _ZN8S2363C10D0Ev();
extern void _ZN8S2363C103v21Ev();
extern void _ZN8S2363C103v22Ev();
extern void _ZN8S2363C103v23Ev();
static  VTBL_ENTRY vtc_S2363C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2363C10[0]),
  (VTBL_ENTRY)&_ZN8S2363C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2363C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2363C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2363C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2363C103v23Ev,
};
extern VTBL_ENTRY _ZTI8S2363C10[];
extern  VTBL_ENTRY _ZTV8S2363C10[];
Class_Descriptor cd_S2363C10 = {  "S2363C10", // class name
  0,0,//no base classes
  &(vtc_S2363C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2363C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2363C10),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  S2363C9  : S2363C10 {
  ::S5166C36 s2363c9f0;
  ::S2355C13_nt s2363c9f1;
  char s2363c9f2;
  virtual  ~S2363C9(); // _ZN7S2363C9D1Ev
  virtual void  v24(); // _ZN7S2363C93v24Ev
  virtual void  v25(); // _ZN7S2363C93v25Ev
  virtual void  v26(); // _ZN7S2363C93v26Ev
  S2363C9(); // tgen
};
//SIG(-1 S2363C9) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2363C9 ::~S2363C9(){ note_dtor("S2363C9", this);}
void  S2363C9 ::v24(){vfunc_called(this, "_ZN7S2363C93v24Ev");}
void  S2363C9 ::v25(){vfunc_called(this, "_ZN7S2363C93v25Ev");}
void  S2363C9 ::v26(){vfunc_called(this, "_ZN7S2363C93v26Ev");}
S2363C9 ::S2363C9(){ note_ctor("S2363C9", this);} // tgen

static void Test_S2363C9()
{
  extern Class_Descriptor cd_S2363C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2363C9, buf);
    S2363C9 *dp, &lv = *(dp=new (buf) S2363C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2363C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2363C9)");
    check_base_class_offset(lv, (S2363C10*), 0, "S2363C9");
    check_field_offset(lv, s2363c9f0, ABISELECT(8,4), "S2363C9.s2363c9f0");
    check_field_offset(lv, s2363c9f1, ABISELECT(32,20), "S2363C9.s2363c9f1");
    check_field_offset(lv, s2363c9f2, ABISELECT(64,52), "S2363C9.s2363c9f2");
    test_class_info(&lv, &cd_S2363C9);
    dp->~S2363C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2363C9(Test_S2363C9, "S2363C9", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2363C9C1Ev();
extern void _ZN7S2363C9D1Ev();
Name_Map name_map_S2363C9[] = {
  NSPAIR(_ZN7S2363C9C1Ev),
  NSPAIR(_ZN7S2363C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2363C10;
extern VTBL_ENTRY _ZTI8S2363C10[];
extern  VTBL_ENTRY _ZTV8S2363C10[];
static Base_Class bases_S2363C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2363C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2363C9[];
extern void _ZN7S2363C9D1Ev();
extern void _ZN7S2363C9D0Ev();
extern void _ZN8S2363C103v21Ev();
extern void _ZN8S2363C103v22Ev();
extern void _ZN8S2363C103v23Ev();
extern void _ZN7S2363C93v24Ev();
extern void _ZN7S2363C93v25Ev();
extern void _ZN7S2363C93v26Ev();
static  VTBL_ENTRY vtc_S2363C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2363C9[0]),
  (VTBL_ENTRY)&_ZN7S2363C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2363C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2363C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2363C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2363C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2363C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2363C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2363C93v26Ev,
};
extern VTBL_ENTRY _ZTI7S2363C9[];
extern  VTBL_ENTRY _ZTV7S2363C9[];
Class_Descriptor cd_S2363C9 = {  "S2363C9", // class name
  bases_S2363C9, 1,
  &(vtc_S2363C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2363C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2363C9),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  S2363C8  : S2363C9 {
  virtual  ~S2363C8(); // _ZN7S2363C8D1Ev
  virtual void  v27(); // _ZN7S2363C83v27Ev
  virtual void  v28(); // _ZN7S2363C83v28Ev
  virtual void  v29(); // _ZN7S2363C83v29Ev
  virtual void  v30(); // _ZN7S2363C83v30Ev
  S2363C8(); // tgen
};
//SIG(-1 S2363C8) C1{ BC2{ BC3{ vd v5 v6 v7} vd v8 v9 v10 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4}


 S2363C8 ::~S2363C8(){ note_dtor("S2363C8", this);}
void  S2363C8 ::v27(){vfunc_called(this, "_ZN7S2363C83v27Ev");}
void  S2363C8 ::v28(){vfunc_called(this, "_ZN7S2363C83v28Ev");}
void  S2363C8 ::v29(){vfunc_called(this, "_ZN7S2363C83v29Ev");}
void  S2363C8 ::v30(){vfunc_called(this, "_ZN7S2363C83v30Ev");}
S2363C8 ::S2363C8(){ note_ctor("S2363C8", this);} // tgen

static void Test_S2363C8()
{
  extern Class_Descriptor cd_S2363C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2363C8, buf);
    S2363C8 *dp, &lv = *(dp=new (buf) S2363C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2363C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2363C8)");
    check_base_class_offset(lv, (S2363C10*)(S2363C9*), 0, "S2363C8");
    check_base_class_offset(lv, (S2363C9*), 0, "S2363C8");
    test_class_info(&lv, &cd_S2363C8);
    dp->~S2363C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2363C8(Test_S2363C8, "S2363C8", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2363C8C1Ev();
extern void _ZN7S2363C8D1Ev();
Name_Map name_map_S2363C8[] = {
  NSPAIR(_ZN7S2363C8C1Ev),
  NSPAIR(_ZN7S2363C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2363C10;
extern VTBL_ENTRY _ZTI8S2363C10[];
extern  VTBL_ENTRY _ZTV8S2363C10[];
extern Class_Descriptor cd_S2363C9;
extern VTBL_ENTRY _ZTI7S2363C9[];
extern  VTBL_ENTRY _ZTV7S2363C9[];
static Base_Class bases_S2363C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2363C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2363C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2363C8[];
extern void _ZN7S2363C8D1Ev();
extern void _ZN7S2363C8D0Ev();
extern void _ZN8S2363C103v21Ev();
extern void _ZN8S2363C103v22Ev();
extern void _ZN8S2363C103v23Ev();
extern void _ZN7S2363C93v24Ev();
extern void _ZN7S2363C93v25Ev();
extern void _ZN7S2363C93v26Ev();
extern void _ZN7S2363C83v27Ev();
extern void _ZN7S2363C83v28Ev();
extern void _ZN7S2363C83v29Ev();
extern void _ZN7S2363C83v30Ev();
static  VTBL_ENTRY vtc_S2363C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2363C8[0]),
  (VTBL_ENTRY)&_ZN7S2363C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2363C8D0Ev,
  (VTBL_ENTRY)&_ZN8S2363C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2363C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2363C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2363C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2363C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2363C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2363C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2363C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2363C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2363C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2363C8[];
extern  VTBL_ENTRY _ZTV7S2363C8[];
Class_Descriptor cd_S2363C8 = {  "S2363C8", // class name
  bases_S2363C8, 2,
  &(vtc_S2363C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2363C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2363C8),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2363C2  : S2363C3 , S2363C8 {
  int s2363c2f0[3];
  char s2363c2f1;
  ::S5166C24 s2363c2f2;
  virtual  ~S2363C2(); // _ZN7S2363C2D1Ev
  virtual void  v31(); // _ZN7S2363C23v31Ev
  virtual void  v32(); // _ZN7S2363C23v32Ev
  virtual void  v33(); // _ZN7S2363C23v33Ev
  virtual void  v34(); // _ZN7S2363C23v34Ev
  virtual void  v35(); // _ZN7S2363C23v35Ev
  virtual void  v36(); // _ZN7S2363C23v36Ev
  S2363C2(); // tgen
};
//SIG(-1 S2363C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd v10 v11 v12} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp Fc Fi} BC7{ BC8{ BC9{ vd v23 v24 v25} vd v26 v27 v28 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m FL[4]} Fc} vd v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 Fi[3] Fc FC13{ BC14{ m Fp Fi FC15{ m} FC16{ m}}}}


 S2363C2 ::~S2363C2(){ note_dtor("S2363C2", this);}
void  S2363C2 ::v31(){vfunc_called(this, "_ZN7S2363C23v31Ev");}
void  S2363C2 ::v32(){vfunc_called(this, "_ZN7S2363C23v32Ev");}
void  S2363C2 ::v33(){vfunc_called(this, "_ZN7S2363C23v33Ev");}
void  S2363C2 ::v34(){vfunc_called(this, "_ZN7S2363C23v34Ev");}
void  S2363C2 ::v35(){vfunc_called(this, "_ZN7S2363C23v35Ev");}
void  S2363C2 ::v36(){vfunc_called(this, "_ZN7S2363C23v36Ev");}
S2363C2 ::S2363C2(){ note_ctor("S2363C2", this);} // tgen

static void Test_S2363C2()
{
  extern Class_Descriptor cd_S2363C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,33)];
    init_test(&cd_S2363C2, buf);
    S2363C2 *dp, &lv = *(dp=new (buf) S2363C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,128), "sizeof(S2363C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2363C2)");
    check_base_class_offset(lv, (S2363C4*)(S2363C3*), 0, "S2363C2");
    check_base_class_offset(lv, (S2363C7*)(S2363C3*), ABISELECT(40,28), "S2363C2");
    check_base_class_offset(lv, (S2363C3*), 0, "S2363C2");
    check_base_class_offset(lv, (S2363C10*)(S2363C9*)(S2363C8*), ABISELECT(64,44), "S2363C2");
    check_base_class_offset(lv, (S2363C9*)(S2363C8*), ABISELECT(64,44), "S2363C2");
    check_base_class_offset(lv, (S2363C8*), ABISELECT(64,44), "S2363C2");
    check_field_offset(lv, s2363c2f0, ABISELECT(132,100), "S2363C2.s2363c2f0");
    check_field_offset(lv, s2363c2f1, ABISELECT(144,112), "S2363C2.s2363c2f1");
    check_field_offset(lv, s2363c2f2, ABISELECT(152,116), "S2363C2.s2363c2f2");
    test_class_info(&lv, &cd_S2363C2);
    dp->~S2363C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2363C2(Test_S2363C2, "S2363C2", ABISELECT(168,128));

#else // __cplusplus

extern void _ZN7S2363C2C1Ev();
extern void _ZN7S2363C2D1Ev();
Name_Map name_map_S2363C2[] = {
  NSPAIR(_ZN7S2363C2C1Ev),
  NSPAIR(_ZN7S2363C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2363C4;
extern VTBL_ENTRY _ZTI7S2363C4[];
extern  VTBL_ENTRY _ZTV7S2363C4[];
extern Class_Descriptor cd_S2363C7;
extern VTBL_ENTRY _ZTI7S2363C7[];
extern  VTBL_ENTRY _ZTV7S2363C7[];
extern Class_Descriptor cd_S2363C3;
extern VTBL_ENTRY _ZTI7S2363C3[];
extern  VTBL_ENTRY _ZTV7S2363C3[];
extern Class_Descriptor cd_S2363C10;
extern VTBL_ENTRY _ZTI8S2363C10[];
extern  VTBL_ENTRY _ZTV8S2363C10[];
extern Class_Descriptor cd_S2363C9;
extern VTBL_ENTRY _ZTI7S2363C9[];
extern  VTBL_ENTRY _ZTV7S2363C9[];
extern Class_Descriptor cd_S2363C8;
extern VTBL_ENTRY _ZTI7S2363C8[];
extern  VTBL_ENTRY _ZTV7S2363C8[];
static Base_Class bases_S2363C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2363C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2363C7,    ABISELECT(40,28), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2363C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2363C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2363C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2363C8,    ABISELECT(64,44), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2363C2[];
extern void _ZN7S2363C2D1Ev();
extern void _ZN7S2363C2D0Ev();
extern void _ZN7S2363C42v5Ev();
extern void _ZN7S2363C42v6Ev();
extern void _ZN7S2363C42v7Ev();
extern void _ZN7S2363C33v11Ev();
extern void _ZN7S2363C33v12Ev();
extern void _ZN7S2363C33v13Ev();
extern void _ZN7S2363C33v14Ev();
extern void _ZN7S2363C33v15Ev();
extern void _ZN7S2363C33v16Ev();
extern void _ZN7S2363C33v17Ev();
extern void _ZN7S2363C33v18Ev();
extern void _ZN7S2363C33v19Ev();
extern void _ZN7S2363C33v20Ev();
extern void _ZN7S2363C23v31Ev();
extern void _ZN7S2363C23v32Ev();
extern void _ZN7S2363C23v33Ev();
extern void _ZN7S2363C23v34Ev();
extern void _ZN7S2363C23v35Ev();
extern void _ZN7S2363C23v36Ev();
extern void ABISELECT(_ZThn40_N7S2363C2D1Ev,_ZThn28_N7S2363C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2363C2D0Ev,_ZThn28_N7S2363C2D0Ev)();
extern void _ZN7S2363C72v8Ev();
extern void _ZN7S2363C72v9Ev();
extern void _ZN7S2363C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2363C2D1Ev,_ZThn44_N7S2363C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S2363C2D0Ev,_ZThn44_N7S2363C2D0Ev)();
extern void _ZN8S2363C103v21Ev();
extern void _ZN8S2363C103v22Ev();
extern void _ZN8S2363C103v23Ev();
extern void _ZN7S2363C93v24Ev();
extern void _ZN7S2363C93v25Ev();
extern void _ZN7S2363C93v26Ev();
extern void _ZN7S2363C83v27Ev();
extern void _ZN7S2363C83v28Ev();
extern void _ZN7S2363C83v29Ev();
extern void _ZN7S2363C83v30Ev();
static  VTBL_ENTRY vtc_S2363C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2363C2[0]),
  (VTBL_ENTRY)&_ZN7S2363C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2363C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2363C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2363C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2363C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2363C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2363C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2363C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2363C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2363C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2363C23v36Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2363C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2363C2D1Ev,_ZThn28_N7S2363C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2363C2D0Ev,_ZThn28_N7S2363C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2363C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2363C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2363C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2363C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2363C2D1Ev,_ZThn44_N7S2363C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2363C2D0Ev,_ZThn44_N7S2363C2D0Ev),
  (VTBL_ENTRY)&_ZN8S2363C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2363C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2363C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2363C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2363C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2363C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2363C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2363C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2363C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2363C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2363C2[];
extern  VTBL_ENTRY _ZTV7S2363C2[];
Class_Descriptor cd_S2363C2 = {  "S2363C2", // class name
  bases_S2363C2, 6,
  &(vtc_S2363C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,128), // object size
  NSPAIRA(_ZTI7S2363C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2363C2),44, //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  S2363C1  : S2363C2 {
  ::S2361C18_nt s2363c1f0;
  ::S2355C19_nt s2363c1f1;
  void *s2363c1f2[2];
  ::S5166C19_nt s2363c1f3;
  virtual  ~S2363C1(); // _ZN7S2363C1D1Ev
  virtual void  v1(); // _ZN7S2363C12v1Ev
  virtual void  v2(); // _ZN7S2363C12v2Ev
  virtual void  v3(); // _ZN7S2363C12v3Ev
  virtual void  v4(); // _ZN7S2363C12v4Ev
  S2363C1(); // tgen
};
//SIG(1 S2363C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd v8 v9 v10} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp Fc Fi} BC8{ BC9{ BC10{ vd v21 v22 v23} vd v24 v25 v26 FC11{ m Fp Fi[2] FC12{ m}} FC13{ m FL[4]} Fc} vd v27 v28 v29 v30} vd v31 v32 v33 v34 v35 v36 Fi[3] Fc FC14{ BC15{ m Fp Fi FC16{ m} FC17{ m}}}} vd v1 v2 v3 v4 FC18{ vd v37 v38 v39 v40 v41 v42 Fp} FC19{ BC20{ vd v44 FC21{ m FC15} Fp[3] Fc} v43 Fp} Fp[2] FC5}


 S2363C1 ::~S2363C1(){ note_dtor("S2363C1", this);}
void  S2363C1 ::v1(){vfunc_called(this, "_ZN7S2363C12v1Ev");}
void  S2363C1 ::v2(){vfunc_called(this, "_ZN7S2363C12v2Ev");}
void  S2363C1 ::v3(){vfunc_called(this, "_ZN7S2363C12v3Ev");}
void  S2363C1 ::v4(){vfunc_called(this, "_ZN7S2363C12v4Ev");}
S2363C1 ::S2363C1(){ note_ctor("S2363C1", this);} // tgen

static void Test_S2363C1()
{
  extern Class_Descriptor cd_S2363C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,49)];
    init_test(&cd_S2363C1, buf);
    S2363C1 *dp, &lv = *(dp=new (buf) S2363C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,192), "sizeof(S2363C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2363C1)");
    check_base_class_offset(lv, (S2363C4*)(S2363C3*)(S2363C2*), 0, "S2363C1");
    check_base_class_offset(lv, (S2363C7*)(S2363C3*)(S2363C2*), ABISELECT(40,28), "S2363C1");
    check_base_class_offset(lv, (S2363C3*)(S2363C2*), 0, "S2363C1");
    check_base_class_offset(lv, (S2363C10*)(S2363C9*)(S2363C8*)(S2363C2*), ABISELECT(64,44), "S2363C1");
    check_base_class_offset(lv, (S2363C9*)(S2363C8*)(S2363C2*), ABISELECT(64,44), "S2363C1");
    check_base_class_offset(lv, (S2363C8*)(S2363C2*), ABISELECT(64,44), "S2363C1");
    check_base_class_offset(lv, (S2363C2*), 0, "S2363C1");
    check_field_offset(lv, s2363c1f0, ABISELECT(168,128), "S2363C1.s2363c1f0");
    check_field_offset(lv, s2363c1f1, ABISELECT(184,136), "S2363C1.s2363c1f1");
    check_field_offset(lv, s2363c1f2, ABISELECT(248,172), "S2363C1.s2363c1f2");
    check_field_offset(lv, s2363c1f3, ABISELECT(264,180), "S2363C1.s2363c1f3");
    test_class_info(&lv, &cd_S2363C1);
    dp->~S2363C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2363C1(Test_S2363C1, "S2363C1", ABISELECT(280,192));

#else // __cplusplus

extern void _ZN7S2363C1C1Ev();
extern void _ZN7S2363C1D1Ev();
Name_Map name_map_S2363C1[] = {
  NSPAIR(_ZN7S2363C1C1Ev),
  NSPAIR(_ZN7S2363C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2363C4;
extern VTBL_ENTRY _ZTI7S2363C4[];
extern  VTBL_ENTRY _ZTV7S2363C4[];
extern Class_Descriptor cd_S2363C7;
extern VTBL_ENTRY _ZTI7S2363C7[];
extern  VTBL_ENTRY _ZTV7S2363C7[];
extern Class_Descriptor cd_S2363C3;
extern VTBL_ENTRY _ZTI7S2363C3[];
extern  VTBL_ENTRY _ZTV7S2363C3[];
extern Class_Descriptor cd_S2363C10;
extern VTBL_ENTRY _ZTI8S2363C10[];
extern  VTBL_ENTRY _ZTV8S2363C10[];
extern Class_Descriptor cd_S2363C9;
extern VTBL_ENTRY _ZTI7S2363C9[];
extern  VTBL_ENTRY _ZTV7S2363C9[];
extern Class_Descriptor cd_S2363C8;
extern VTBL_ENTRY _ZTI7S2363C8[];
extern  VTBL_ENTRY _ZTV7S2363C8[];
extern Class_Descriptor cd_S2363C2;
extern VTBL_ENTRY _ZTI7S2363C2[];
extern  VTBL_ENTRY _ZTV7S2363C2[];
static Base_Class bases_S2363C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2363C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2363C7,    ABISELECT(40,28), //bcp->offset
    27, //bcp->virtual_function_table_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_S2363C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2363C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2363C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2363C8,    ABISELECT(64,44), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2363C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2363C1[];
extern void _ZN7S2363C1D1Ev();
extern void _ZN7S2363C1D0Ev();
extern void _ZN7S2363C42v5Ev();
extern void _ZN7S2363C42v6Ev();
extern void _ZN7S2363C42v7Ev();
extern void _ZN7S2363C33v11Ev();
extern void _ZN7S2363C33v12Ev();
extern void _ZN7S2363C33v13Ev();
extern void _ZN7S2363C33v14Ev();
extern void _ZN7S2363C33v15Ev();
extern void _ZN7S2363C33v16Ev();
extern void _ZN7S2363C33v17Ev();
extern void _ZN7S2363C33v18Ev();
extern void _ZN7S2363C33v19Ev();
extern void _ZN7S2363C33v20Ev();
extern void _ZN7S2363C23v31Ev();
extern void _ZN7S2363C23v32Ev();
extern void _ZN7S2363C23v33Ev();
extern void _ZN7S2363C23v34Ev();
extern void _ZN7S2363C23v35Ev();
extern void _ZN7S2363C23v36Ev();
extern void _ZN7S2363C12v1Ev();
extern void _ZN7S2363C12v2Ev();
extern void _ZN7S2363C12v3Ev();
extern void _ZN7S2363C12v4Ev();
extern void ABISELECT(_ZThn40_N7S2363C1D1Ev,_ZThn28_N7S2363C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2363C1D0Ev,_ZThn28_N7S2363C1D0Ev)();
extern void _ZN7S2363C72v8Ev();
extern void _ZN7S2363C72v9Ev();
extern void _ZN7S2363C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2363C1D1Ev,_ZThn44_N7S2363C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S2363C1D0Ev,_ZThn44_N7S2363C1D0Ev)();
extern void _ZN8S2363C103v21Ev();
extern void _ZN8S2363C103v22Ev();
extern void _ZN8S2363C103v23Ev();
extern void _ZN7S2363C93v24Ev();
extern void _ZN7S2363C93v25Ev();
extern void _ZN7S2363C93v26Ev();
extern void _ZN7S2363C83v27Ev();
extern void _ZN7S2363C83v28Ev();
extern void _ZN7S2363C83v29Ev();
extern void _ZN7S2363C83v30Ev();
static  VTBL_ENTRY vtc_S2363C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2363C1[0]),
  (VTBL_ENTRY)&_ZN7S2363C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2363C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2363C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2363C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2363C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2363C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2363C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2363C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2363C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2363C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2363C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2363C23v36Ev,
  (VTBL_ENTRY)&_ZN7S2363C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2363C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2363C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2363C12v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2363C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2363C1D1Ev,_ZThn28_N7S2363C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2363C1D0Ev,_ZThn28_N7S2363C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2363C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2363C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2363C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2363C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2363C1D1Ev,_ZThn44_N7S2363C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2363C1D0Ev,_ZThn44_N7S2363C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2363C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2363C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2363C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2363C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2363C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2363C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2363C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2363C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2363C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2363C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2363C1[];
extern  VTBL_ENTRY _ZTV7S2363C1[];
Class_Descriptor cd_S2363C1 = {  "S2363C1", // class name
  bases_S2363C1, 7,
  &(vtc_S2363C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,192), // object size
  NSPAIRA(_ZTI7S2363C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2363C1),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2360C4  {
  ::S5166C19_nt s2360c4f0;
  int s2360c4f1[2];
  char s2360c4f2;
  virtual  ~S2360C4(); // _ZN7S2360C4D1Ev
  virtual void  v5(); // _ZN7S2360C42v5Ev
  virtual void  v6(); // _ZN7S2360C42v6Ev
  virtual void  v7(); // _ZN7S2360C42v7Ev
  S2360C4(); // tgen
};
//SIG(-1 S2360C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2360C4 ::~S2360C4(){ note_dtor("S2360C4", this);}
void  S2360C4 ::v5(){vfunc_called(this, "_ZN7S2360C42v5Ev");}
void  S2360C4 ::v6(){vfunc_called(this, "_ZN7S2360C42v6Ev");}
void  S2360C4 ::v7(){vfunc_called(this, "_ZN7S2360C42v7Ev");}
S2360C4 ::S2360C4(){ note_ctor("S2360C4", this);} // tgen

static void Test_S2360C4()
{
  extern Class_Descriptor cd_S2360C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2360C4, buf);
    S2360C4 *dp, &lv = *(dp=new (buf) S2360C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2360C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2360C4)");
    check_field_offset(lv, s2360c4f0, ABISELECT(8,4), "S2360C4.s2360c4f0");
    check_field_offset(lv, s2360c4f1, ABISELECT(24,16), "S2360C4.s2360c4f1");
    check_field_offset(lv, s2360c4f2, ABISELECT(32,24), "S2360C4.s2360c4f2");
    test_class_info(&lv, &cd_S2360C4);
    dp->~S2360C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2360C4(Test_S2360C4, "S2360C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2360C4C1Ev();
extern void _ZN7S2360C4D1Ev();
Name_Map name_map_S2360C4[] = {
  NSPAIR(_ZN7S2360C4C1Ev),
  NSPAIR(_ZN7S2360C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2360C4[];
extern void _ZN7S2360C4D1Ev();
extern void _ZN7S2360C4D0Ev();
extern void _ZN7S2360C42v5Ev();
extern void _ZN7S2360C42v6Ev();
extern void _ZN7S2360C42v7Ev();
static  VTBL_ENTRY vtc_S2360C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2360C4[0]),
  (VTBL_ENTRY)&_ZN7S2360C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2360C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2360C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2360C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2360C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S2360C4[];
extern  VTBL_ENTRY _ZTV7S2360C4[];
Class_Descriptor cd_S2360C4 = {  "S2360C4", // class name
  0,0,//no base classes
  &(vtc_S2360C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2360C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2360C4),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  S2360C7  {
  virtual  ~S2360C7(); // _ZN7S2360C7D1Ev
  virtual void  v8(); // _ZN7S2360C72v8Ev
  virtual void  v9(); // _ZN7S2360C72v9Ev
  virtual void  v10(); // _ZN7S2360C73v10Ev
  S2360C7(); // tgen
};
//SIG(-1 S2360C7) C1{ vd v1 v2 v3}


 S2360C7 ::~S2360C7(){ note_dtor("S2360C7", this);}
void  S2360C7 ::v8(){vfunc_called(this, "_ZN7S2360C72v8Ev");}
void  S2360C7 ::v9(){vfunc_called(this, "_ZN7S2360C72v9Ev");}
void  S2360C7 ::v10(){vfunc_called(this, "_ZN7S2360C73v10Ev");}
S2360C7 ::S2360C7(){ note_ctor("S2360C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2360C7C1Ev();
extern void _ZN7S2360C7D1Ev();
Name_Map name_map_S2360C7[] = {
  NSPAIR(_ZN7S2360C7C1Ev),
  NSPAIR(_ZN7S2360C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2360C7[];
extern void _ZN7S2360C7D1Ev();
extern void _ZN7S2360C7D0Ev();
extern void _ZN7S2360C72v8Ev();
extern void _ZN7S2360C72v9Ev();
extern void _ZN7S2360C73v10Ev();
static  VTBL_ENTRY vtc_S2360C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2360C7[0]),
  (VTBL_ENTRY)&_ZN7S2360C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2360C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2360C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2360C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2360C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2360C7[];
extern  VTBL_ENTRY _ZTV7S2360C7[];
Class_Descriptor cd_S2360C7 = {  "S2360C7", // class name
  0,0,//no base classes
  &(vtc_S2360C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2360C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2360C7),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  S2360C3  : S2360C4 , S2360C7 {
  void *s2360c3f0;
  char s2360c3f1;
  int s2360c3f2;
  virtual  ~S2360C3(); // _ZN7S2360C3D1Ev
  virtual void  v11(); // _ZN7S2360C33v11Ev
  virtual void  v12(); // _ZN7S2360C33v12Ev
  virtual void  v13(); // _ZN7S2360C33v13Ev
  virtual void  v14(); // _ZN7S2360C33v14Ev
  virtual void  v15(); // _ZN7S2360C33v15Ev
  virtual void  v16(); // _ZN7S2360C33v16Ev
  virtual void  v17(); // _ZN7S2360C33v17Ev
  virtual void  v18(); // _ZN7S2360C33v18Ev
  virtual void  v19(); // _ZN7S2360C33v19Ev
  virtual void  v20(); // _ZN7S2360C33v20Ev
  S2360C3(); // tgen
};
//SIG(-1 S2360C3) C1{ BC2{ vd v11 v12 v13 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fc Fi}


 S2360C3 ::~S2360C3(){ note_dtor("S2360C3", this);}
void  S2360C3 ::v11(){vfunc_called(this, "_ZN7S2360C33v11Ev");}
void  S2360C3 ::v12(){vfunc_called(this, "_ZN7S2360C33v12Ev");}
void  S2360C3 ::v13(){vfunc_called(this, "_ZN7S2360C33v13Ev");}
void  S2360C3 ::v14(){vfunc_called(this, "_ZN7S2360C33v14Ev");}
void  S2360C3 ::v15(){vfunc_called(this, "_ZN7S2360C33v15Ev");}
void  S2360C3 ::v16(){vfunc_called(this, "_ZN7S2360C33v16Ev");}
void  S2360C3 ::v17(){vfunc_called(this, "_ZN7S2360C33v17Ev");}
void  S2360C3 ::v18(){vfunc_called(this, "_ZN7S2360C33v18Ev");}
void  S2360C3 ::v19(){vfunc_called(this, "_ZN7S2360C33v19Ev");}
void  S2360C3 ::v20(){vfunc_called(this, "_ZN7S2360C33v20Ev");}
S2360C3 ::S2360C3(){ note_ctor("S2360C3", this);} // tgen

static void Test_S2360C3()
{
  extern Class_Descriptor cd_S2360C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S2360C3, buf);
    S2360C3 *dp, &lv = *(dp=new (buf) S2360C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S2360C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2360C3)");
    check_base_class_offset(lv, (S2360C4*), 0, "S2360C3");
    check_base_class_offset(lv, (S2360C7*), ABISELECT(40,28), "S2360C3");
    check_field_offset(lv, s2360c3f0, ABISELECT(48,32), "S2360C3.s2360c3f0");
    check_field_offset(lv, s2360c3f1, ABISELECT(56,36), "S2360C3.s2360c3f1");
    check_field_offset(lv, s2360c3f2, ABISELECT(60,40), "S2360C3.s2360c3f2");
    test_class_info(&lv, &cd_S2360C3);
    dp->~S2360C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2360C3(Test_S2360C3, "S2360C3", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S2360C3C1Ev();
extern void _ZN7S2360C3D1Ev();
Name_Map name_map_S2360C3[] = {
  NSPAIR(_ZN7S2360C3C1Ev),
  NSPAIR(_ZN7S2360C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2360C4;
extern VTBL_ENTRY _ZTI7S2360C4[];
extern  VTBL_ENTRY _ZTV7S2360C4[];
extern Class_Descriptor cd_S2360C7;
extern VTBL_ENTRY _ZTI7S2360C7[];
extern  VTBL_ENTRY _ZTV7S2360C7[];
static Base_Class bases_S2360C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2360C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2360C7,    ABISELECT(40,28), //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2360C3[];
extern void _ZN7S2360C3D1Ev();
extern void _ZN7S2360C3D0Ev();
extern void _ZN7S2360C42v5Ev();
extern void _ZN7S2360C42v6Ev();
extern void _ZN7S2360C42v7Ev();
extern void _ZN7S2360C33v11Ev();
extern void _ZN7S2360C33v12Ev();
extern void _ZN7S2360C33v13Ev();
extern void _ZN7S2360C33v14Ev();
extern void _ZN7S2360C33v15Ev();
extern void _ZN7S2360C33v16Ev();
extern void _ZN7S2360C33v17Ev();
extern void _ZN7S2360C33v18Ev();
extern void _ZN7S2360C33v19Ev();
extern void _ZN7S2360C33v20Ev();
extern void ABISELECT(_ZThn40_N7S2360C3D1Ev,_ZThn28_N7S2360C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2360C3D0Ev,_ZThn28_N7S2360C3D0Ev)();
extern void _ZN7S2360C72v8Ev();
extern void _ZN7S2360C72v9Ev();
extern void _ZN7S2360C73v10Ev();
static  VTBL_ENTRY vtc_S2360C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2360C3[0]),
  (VTBL_ENTRY)&_ZN7S2360C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2360C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2360C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2360C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2360C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v20Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2360C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2360C3D1Ev,_ZThn28_N7S2360C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2360C3D0Ev,_ZThn28_N7S2360C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2360C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2360C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2360C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2360C3[];
extern  VTBL_ENTRY _ZTV7S2360C3[];
Class_Descriptor cd_S2360C3 = {  "S2360C3", // class name
  bases_S2360C3, 2,
  &(vtc_S2360C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S2360C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2360C3),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  S2360C10  {
  virtual  ~S2360C10(); // _ZN8S2360C10D1Ev
  virtual void  v21(); // _ZN8S2360C103v21Ev
  virtual void  v22(); // _ZN8S2360C103v22Ev
  virtual void  v23(); // _ZN8S2360C103v23Ev
  S2360C10(); // tgen
};
//SIG(-1 S2360C10) C1{ vd v1 v2 v3}


 S2360C10 ::~S2360C10(){ note_dtor("S2360C10", this);}
void  S2360C10 ::v21(){vfunc_called(this, "_ZN8S2360C103v21Ev");}
void  S2360C10 ::v22(){vfunc_called(this, "_ZN8S2360C103v22Ev");}
void  S2360C10 ::v23(){vfunc_called(this, "_ZN8S2360C103v23Ev");}
S2360C10 ::S2360C10(){ note_ctor("S2360C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2360C10C1Ev();
extern void _ZN8S2360C10D1Ev();
Name_Map name_map_S2360C10[] = {
  NSPAIR(_ZN8S2360C10C1Ev),
  NSPAIR(_ZN8S2360C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2360C10[];
extern void _ZN8S2360C10D1Ev();
extern void _ZN8S2360C10D0Ev();
extern void _ZN8S2360C103v21Ev();
extern void _ZN8S2360C103v22Ev();
extern void _ZN8S2360C103v23Ev();
static  VTBL_ENTRY vtc_S2360C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2360C10[0]),
  (VTBL_ENTRY)&_ZN8S2360C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2360C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2360C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2360C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2360C103v23Ev,
};
extern VTBL_ENTRY _ZTI8S2360C10[];
extern  VTBL_ENTRY _ZTV8S2360C10[];
Class_Descriptor cd_S2360C10 = {  "S2360C10", // class name
  0,0,//no base classes
  &(vtc_S2360C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2360C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2360C10),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  S2360C9  : S2360C10 {
  ::S5166C36 s2360c9f0;
  ::S2355C13_nt s2360c9f1;
  char s2360c9f2;
  virtual  ~S2360C9(); // _ZN7S2360C9D1Ev
  virtual void  v24(); // _ZN7S2360C93v24Ev
  virtual void  v25(); // _ZN7S2360C93v25Ev
  virtual void  v26(); // _ZN7S2360C93v26Ev
  S2360C9(); // tgen
};
//SIG(-1 S2360C9) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2360C9 ::~S2360C9(){ note_dtor("S2360C9", this);}
void  S2360C9 ::v24(){vfunc_called(this, "_ZN7S2360C93v24Ev");}
void  S2360C9 ::v25(){vfunc_called(this, "_ZN7S2360C93v25Ev");}
void  S2360C9 ::v26(){vfunc_called(this, "_ZN7S2360C93v26Ev");}
S2360C9 ::S2360C9(){ note_ctor("S2360C9", this);} // tgen

static void Test_S2360C9()
{
  extern Class_Descriptor cd_S2360C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2360C9, buf);
    S2360C9 *dp, &lv = *(dp=new (buf) S2360C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2360C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2360C9)");
    check_base_class_offset(lv, (S2360C10*), 0, "S2360C9");
    check_field_offset(lv, s2360c9f0, ABISELECT(8,4), "S2360C9.s2360c9f0");
    check_field_offset(lv, s2360c9f1, ABISELECT(32,20), "S2360C9.s2360c9f1");
    check_field_offset(lv, s2360c9f2, ABISELECT(64,52), "S2360C9.s2360c9f2");
    test_class_info(&lv, &cd_S2360C9);
    dp->~S2360C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2360C9(Test_S2360C9, "S2360C9", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2360C9C1Ev();
extern void _ZN7S2360C9D1Ev();
Name_Map name_map_S2360C9[] = {
  NSPAIR(_ZN7S2360C9C1Ev),
  NSPAIR(_ZN7S2360C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2360C10;
extern VTBL_ENTRY _ZTI8S2360C10[];
extern  VTBL_ENTRY _ZTV8S2360C10[];
static Base_Class bases_S2360C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2360C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2360C9[];
extern void _ZN7S2360C9D1Ev();
extern void _ZN7S2360C9D0Ev();
extern void _ZN8S2360C103v21Ev();
extern void _ZN8S2360C103v22Ev();
extern void _ZN8S2360C103v23Ev();
extern void _ZN7S2360C93v24Ev();
extern void _ZN7S2360C93v25Ev();
extern void _ZN7S2360C93v26Ev();
static  VTBL_ENTRY vtc_S2360C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2360C9[0]),
  (VTBL_ENTRY)&_ZN7S2360C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2360C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2360C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2360C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2360C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2360C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2360C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2360C93v26Ev,
};
extern VTBL_ENTRY _ZTI7S2360C9[];
extern  VTBL_ENTRY _ZTV7S2360C9[];
Class_Descriptor cd_S2360C9 = {  "S2360C9", // class name
  bases_S2360C9, 1,
  &(vtc_S2360C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2360C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2360C9),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  S2360C8  : S2360C9 {
  virtual  ~S2360C8(); // _ZN7S2360C8D1Ev
  virtual void  v27(); // _ZN7S2360C83v27Ev
  virtual void  v28(); // _ZN7S2360C83v28Ev
  virtual void  v29(); // _ZN7S2360C83v29Ev
  virtual void  v30(); // _ZN7S2360C83v30Ev
  S2360C8(); // tgen
};
//SIG(-1 S2360C8) C1{ BC2{ BC3{ vd v5 v6 v7} vd v8 v9 v10 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4}


 S2360C8 ::~S2360C8(){ note_dtor("S2360C8", this);}
void  S2360C8 ::v27(){vfunc_called(this, "_ZN7S2360C83v27Ev");}
void  S2360C8 ::v28(){vfunc_called(this, "_ZN7S2360C83v28Ev");}
void  S2360C8 ::v29(){vfunc_called(this, "_ZN7S2360C83v29Ev");}
void  S2360C8 ::v30(){vfunc_called(this, "_ZN7S2360C83v30Ev");}
S2360C8 ::S2360C8(){ note_ctor("S2360C8", this);} // tgen

static void Test_S2360C8()
{
  extern Class_Descriptor cd_S2360C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2360C8, buf);
    S2360C8 *dp, &lv = *(dp=new (buf) S2360C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2360C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2360C8)");
    check_base_class_offset(lv, (S2360C10*)(S2360C9*), 0, "S2360C8");
    check_base_class_offset(lv, (S2360C9*), 0, "S2360C8");
    test_class_info(&lv, &cd_S2360C8);
    dp->~S2360C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2360C8(Test_S2360C8, "S2360C8", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2360C8C1Ev();
extern void _ZN7S2360C8D1Ev();
Name_Map name_map_S2360C8[] = {
  NSPAIR(_ZN7S2360C8C1Ev),
  NSPAIR(_ZN7S2360C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2360C10;
extern VTBL_ENTRY _ZTI8S2360C10[];
extern  VTBL_ENTRY _ZTV8S2360C10[];
extern Class_Descriptor cd_S2360C9;
extern VTBL_ENTRY _ZTI7S2360C9[];
extern  VTBL_ENTRY _ZTV7S2360C9[];
static Base_Class bases_S2360C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2360C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2360C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2360C8[];
extern void _ZN7S2360C8D1Ev();
extern void _ZN7S2360C8D0Ev();
extern void _ZN8S2360C103v21Ev();
extern void _ZN8S2360C103v22Ev();
extern void _ZN8S2360C103v23Ev();
extern void _ZN7S2360C93v24Ev();
extern void _ZN7S2360C93v25Ev();
extern void _ZN7S2360C93v26Ev();
extern void _ZN7S2360C83v27Ev();
extern void _ZN7S2360C83v28Ev();
extern void _ZN7S2360C83v29Ev();
extern void _ZN7S2360C83v30Ev();
static  VTBL_ENTRY vtc_S2360C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2360C8[0]),
  (VTBL_ENTRY)&_ZN7S2360C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2360C8D0Ev,
  (VTBL_ENTRY)&_ZN8S2360C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2360C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2360C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2360C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2360C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2360C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2360C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2360C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2360C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2360C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2360C8[];
extern  VTBL_ENTRY _ZTV7S2360C8[];
Class_Descriptor cd_S2360C8 = {  "S2360C8", // class name
  bases_S2360C8, 2,
  &(vtc_S2360C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2360C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2360C8),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2360C2  : S2360C3 , S2360C8 {
  int s2360c2f0[3];
  char s2360c2f1;
  ::S5166C24 s2360c2f2;
  virtual  ~S2360C2(); // _ZN7S2360C2D1Ev
  virtual void  v31(); // _ZN7S2360C23v31Ev
  virtual void  v32(); // _ZN7S2360C23v32Ev
  virtual void  v33(); // _ZN7S2360C23v33Ev
  virtual void  v34(); // _ZN7S2360C23v34Ev
  virtual void  v35(); // _ZN7S2360C23v35Ev
  virtual void  v36(); // _ZN7S2360C23v36Ev
  S2360C2(); // tgen
};
//SIG(-1 S2360C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd v10 v11 v12} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp Fc Fi} BC7{ BC8{ BC9{ vd v23 v24 v25} vd v26 v27 v28 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m FL[4]} Fc} vd v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 Fi[3] Fc FC13{ BC14{ m Fp Fi FC15{ m} FC16{ m}}}}


 S2360C2 ::~S2360C2(){ note_dtor("S2360C2", this);}
void  S2360C2 ::v31(){vfunc_called(this, "_ZN7S2360C23v31Ev");}
void  S2360C2 ::v32(){vfunc_called(this, "_ZN7S2360C23v32Ev");}
void  S2360C2 ::v33(){vfunc_called(this, "_ZN7S2360C23v33Ev");}
void  S2360C2 ::v34(){vfunc_called(this, "_ZN7S2360C23v34Ev");}
void  S2360C2 ::v35(){vfunc_called(this, "_ZN7S2360C23v35Ev");}
void  S2360C2 ::v36(){vfunc_called(this, "_ZN7S2360C23v36Ev");}
S2360C2 ::S2360C2(){ note_ctor("S2360C2", this);} // tgen

static void Test_S2360C2()
{
  extern Class_Descriptor cd_S2360C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,33)];
    init_test(&cd_S2360C2, buf);
    S2360C2 *dp, &lv = *(dp=new (buf) S2360C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,128), "sizeof(S2360C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2360C2)");
    check_base_class_offset(lv, (S2360C4*)(S2360C3*), 0, "S2360C2");
    check_base_class_offset(lv, (S2360C7*)(S2360C3*), ABISELECT(40,28), "S2360C2");
    check_base_class_offset(lv, (S2360C3*), 0, "S2360C2");
    check_base_class_offset(lv, (S2360C10*)(S2360C9*)(S2360C8*), ABISELECT(64,44), "S2360C2");
    check_base_class_offset(lv, (S2360C9*)(S2360C8*), ABISELECT(64,44), "S2360C2");
    check_base_class_offset(lv, (S2360C8*), ABISELECT(64,44), "S2360C2");
    check_field_offset(lv, s2360c2f0, ABISELECT(132,100), "S2360C2.s2360c2f0");
    check_field_offset(lv, s2360c2f1, ABISELECT(144,112), "S2360C2.s2360c2f1");
    check_field_offset(lv, s2360c2f2, ABISELECT(152,116), "S2360C2.s2360c2f2");
    test_class_info(&lv, &cd_S2360C2);
    dp->~S2360C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2360C2(Test_S2360C2, "S2360C2", ABISELECT(168,128));

#else // __cplusplus

extern void _ZN7S2360C2C1Ev();
extern void _ZN7S2360C2D1Ev();
Name_Map name_map_S2360C2[] = {
  NSPAIR(_ZN7S2360C2C1Ev),
  NSPAIR(_ZN7S2360C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2360C4;
extern VTBL_ENTRY _ZTI7S2360C4[];
extern  VTBL_ENTRY _ZTV7S2360C4[];
extern Class_Descriptor cd_S2360C7;
extern VTBL_ENTRY _ZTI7S2360C7[];
extern  VTBL_ENTRY _ZTV7S2360C7[];
extern Class_Descriptor cd_S2360C3;
extern VTBL_ENTRY _ZTI7S2360C3[];
extern  VTBL_ENTRY _ZTV7S2360C3[];
extern Class_Descriptor cd_S2360C10;
extern VTBL_ENTRY _ZTI8S2360C10[];
extern  VTBL_ENTRY _ZTV8S2360C10[];
extern Class_Descriptor cd_S2360C9;
extern VTBL_ENTRY _ZTI7S2360C9[];
extern  VTBL_ENTRY _ZTV7S2360C9[];
extern Class_Descriptor cd_S2360C8;
extern VTBL_ENTRY _ZTI7S2360C8[];
extern  VTBL_ENTRY _ZTV7S2360C8[];
static Base_Class bases_S2360C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2360C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2360C7,    ABISELECT(40,28), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2360C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2360C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2360C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2360C8,    ABISELECT(64,44), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2360C2[];
extern void _ZN7S2360C2D1Ev();
extern void _ZN7S2360C2D0Ev();
extern void _ZN7S2360C42v5Ev();
extern void _ZN7S2360C42v6Ev();
extern void _ZN7S2360C42v7Ev();
extern void _ZN7S2360C33v11Ev();
extern void _ZN7S2360C33v12Ev();
extern void _ZN7S2360C33v13Ev();
extern void _ZN7S2360C33v14Ev();
extern void _ZN7S2360C33v15Ev();
extern void _ZN7S2360C33v16Ev();
extern void _ZN7S2360C33v17Ev();
extern void _ZN7S2360C33v18Ev();
extern void _ZN7S2360C33v19Ev();
extern void _ZN7S2360C33v20Ev();
extern void _ZN7S2360C23v31Ev();
extern void _ZN7S2360C23v32Ev();
extern void _ZN7S2360C23v33Ev();
extern void _ZN7S2360C23v34Ev();
extern void _ZN7S2360C23v35Ev();
extern void _ZN7S2360C23v36Ev();
extern void ABISELECT(_ZThn40_N7S2360C2D1Ev,_ZThn28_N7S2360C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2360C2D0Ev,_ZThn28_N7S2360C2D0Ev)();
extern void _ZN7S2360C72v8Ev();
extern void _ZN7S2360C72v9Ev();
extern void _ZN7S2360C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2360C2D1Ev,_ZThn44_N7S2360C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S2360C2D0Ev,_ZThn44_N7S2360C2D0Ev)();
extern void _ZN8S2360C103v21Ev();
extern void _ZN8S2360C103v22Ev();
extern void _ZN8S2360C103v23Ev();
extern void _ZN7S2360C93v24Ev();
extern void _ZN7S2360C93v25Ev();
extern void _ZN7S2360C93v26Ev();
extern void _ZN7S2360C83v27Ev();
extern void _ZN7S2360C83v28Ev();
extern void _ZN7S2360C83v29Ev();
extern void _ZN7S2360C83v30Ev();
static  VTBL_ENTRY vtc_S2360C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2360C2[0]),
  (VTBL_ENTRY)&_ZN7S2360C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2360C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2360C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2360C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2360C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2360C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2360C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2360C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2360C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2360C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2360C23v36Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2360C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2360C2D1Ev,_ZThn28_N7S2360C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2360C2D0Ev,_ZThn28_N7S2360C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2360C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2360C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2360C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2360C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2360C2D1Ev,_ZThn44_N7S2360C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2360C2D0Ev,_ZThn44_N7S2360C2D0Ev),
  (VTBL_ENTRY)&_ZN8S2360C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2360C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2360C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2360C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2360C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2360C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2360C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2360C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2360C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2360C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2360C2[];
extern  VTBL_ENTRY _ZTV7S2360C2[];
Class_Descriptor cd_S2360C2 = {  "S2360C2", // class name
  bases_S2360C2, 6,
  &(vtc_S2360C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,128), // object size
  NSPAIRA(_ZTI7S2360C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2360C2),44, //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  S2360C1  : S2360C2 {
  ::S2358C18_nt s2360c1f0;
  ::S2355C19_nt s2360c1f1;
  int s2360c1f2;
  void *s2360c1f3;
  ::S5166C19_nt s2360c1f4;
  virtual  ~S2360C1(); // _ZN7S2360C1D1Ev
  virtual void  v1(); // _ZN7S2360C12v1Ev
  virtual void  v2(); // _ZN7S2360C12v2Ev
  virtual void  v3(); // _ZN7S2360C12v3Ev
  virtual void  v4(); // _ZN7S2360C12v4Ev
  S2360C1(); // tgen
};
//SIG(1 S2360C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd v8 v9 v10} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp Fc Fi} BC8{ BC9{ BC10{ vd v21 v22 v23} vd v24 v25 v26 FC11{ m Fp Fi[2] FC12{ m}} FC13{ m FL[4]} Fc} vd v27 v28 v29 v30} vd v31 v32 v33 v34 v35 v36 Fi[3] Fc FC14{ BC15{ m Fp Fi FC16{ m} FC17{ m}}}} vd v1 v2 v3 v4 FC18{ vd v37 v38 v39 v40 v41 Fp} FC19{ BC20{ vd v43 FC21{ m FC15} Fp[3] Fc} v42 Fp} Fi Fp FC5}


 S2360C1 ::~S2360C1(){ note_dtor("S2360C1", this);}
void  S2360C1 ::v1(){vfunc_called(this, "_ZN7S2360C12v1Ev");}
void  S2360C1 ::v2(){vfunc_called(this, "_ZN7S2360C12v2Ev");}
void  S2360C1 ::v3(){vfunc_called(this, "_ZN7S2360C12v3Ev");}
void  S2360C1 ::v4(){vfunc_called(this, "_ZN7S2360C12v4Ev");}
S2360C1 ::S2360C1(){ note_ctor("S2360C1", this);} // tgen

static void Test_S2360C1()
{
  extern Class_Descriptor cd_S2360C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,49)];
    init_test(&cd_S2360C1, buf);
    S2360C1 *dp, &lv = *(dp=new (buf) S2360C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,192), "sizeof(S2360C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2360C1)");
    check_base_class_offset(lv, (S2360C4*)(S2360C3*)(S2360C2*), 0, "S2360C1");
    check_base_class_offset(lv, (S2360C7*)(S2360C3*)(S2360C2*), ABISELECT(40,28), "S2360C1");
    check_base_class_offset(lv, (S2360C3*)(S2360C2*), 0, "S2360C1");
    check_base_class_offset(lv, (S2360C10*)(S2360C9*)(S2360C8*)(S2360C2*), ABISELECT(64,44), "S2360C1");
    check_base_class_offset(lv, (S2360C9*)(S2360C8*)(S2360C2*), ABISELECT(64,44), "S2360C1");
    check_base_class_offset(lv, (S2360C8*)(S2360C2*), ABISELECT(64,44), "S2360C1");
    check_base_class_offset(lv, (S2360C2*), 0, "S2360C1");
    check_field_offset(lv, s2360c1f0, ABISELECT(168,128), "S2360C1.s2360c1f0");
    check_field_offset(lv, s2360c1f1, ABISELECT(184,136), "S2360C1.s2360c1f1");
    check_field_offset(lv, s2360c1f2, ABISELECT(248,172), "S2360C1.s2360c1f2");
    check_field_offset(lv, s2360c1f3, ABISELECT(256,176), "S2360C1.s2360c1f3");
    check_field_offset(lv, s2360c1f4, ABISELECT(264,180), "S2360C1.s2360c1f4");
    test_class_info(&lv, &cd_S2360C1);
    dp->~S2360C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2360C1(Test_S2360C1, "S2360C1", ABISELECT(280,192));

#else // __cplusplus

extern void _ZN7S2360C1C1Ev();
extern void _ZN7S2360C1D1Ev();
Name_Map name_map_S2360C1[] = {
  NSPAIR(_ZN7S2360C1C1Ev),
  NSPAIR(_ZN7S2360C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2360C4;
extern VTBL_ENTRY _ZTI7S2360C4[];
extern  VTBL_ENTRY _ZTV7S2360C4[];
extern Class_Descriptor cd_S2360C7;
extern VTBL_ENTRY _ZTI7S2360C7[];
extern  VTBL_ENTRY _ZTV7S2360C7[];
extern Class_Descriptor cd_S2360C3;
extern VTBL_ENTRY _ZTI7S2360C3[];
extern  VTBL_ENTRY _ZTV7S2360C3[];
extern Class_Descriptor cd_S2360C10;
extern VTBL_ENTRY _ZTI8S2360C10[];
extern  VTBL_ENTRY _ZTV8S2360C10[];
extern Class_Descriptor cd_S2360C9;
extern VTBL_ENTRY _ZTI7S2360C9[];
extern  VTBL_ENTRY _ZTV7S2360C9[];
extern Class_Descriptor cd_S2360C8;
extern VTBL_ENTRY _ZTI7S2360C8[];
extern  VTBL_ENTRY _ZTV7S2360C8[];
extern Class_Descriptor cd_S2360C2;
extern VTBL_ENTRY _ZTI7S2360C2[];
extern  VTBL_ENTRY _ZTV7S2360C2[];
static Base_Class bases_S2360C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2360C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2360C7,    ABISELECT(40,28), //bcp->offset
    27, //bcp->virtual_function_table_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_S2360C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2360C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2360C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2360C8,    ABISELECT(64,44), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2360C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2360C1[];
extern void _ZN7S2360C1D1Ev();
extern void _ZN7S2360C1D0Ev();
extern void _ZN7S2360C42v5Ev();
extern void _ZN7S2360C42v6Ev();
extern void _ZN7S2360C42v7Ev();
extern void _ZN7S2360C33v11Ev();
extern void _ZN7S2360C33v12Ev();
extern void _ZN7S2360C33v13Ev();
extern void _ZN7S2360C33v14Ev();
extern void _ZN7S2360C33v15Ev();
extern void _ZN7S2360C33v16Ev();
extern void _ZN7S2360C33v17Ev();
extern void _ZN7S2360C33v18Ev();
extern void _ZN7S2360C33v19Ev();
extern void _ZN7S2360C33v20Ev();
extern void _ZN7S2360C23v31Ev();
extern void _ZN7S2360C23v32Ev();
extern void _ZN7S2360C23v33Ev();
extern void _ZN7S2360C23v34Ev();
extern void _ZN7S2360C23v35Ev();
extern void _ZN7S2360C23v36Ev();
extern void _ZN7S2360C12v1Ev();
extern void _ZN7S2360C12v2Ev();
extern void _ZN7S2360C12v3Ev();
extern void _ZN7S2360C12v4Ev();
extern void ABISELECT(_ZThn40_N7S2360C1D1Ev,_ZThn28_N7S2360C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2360C1D0Ev,_ZThn28_N7S2360C1D0Ev)();
extern void _ZN7S2360C72v8Ev();
extern void _ZN7S2360C72v9Ev();
extern void _ZN7S2360C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2360C1D1Ev,_ZThn44_N7S2360C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S2360C1D0Ev,_ZThn44_N7S2360C1D0Ev)();
extern void _ZN8S2360C103v21Ev();
extern void _ZN8S2360C103v22Ev();
extern void _ZN8S2360C103v23Ev();
extern void _ZN7S2360C93v24Ev();
extern void _ZN7S2360C93v25Ev();
extern void _ZN7S2360C93v26Ev();
extern void _ZN7S2360C83v27Ev();
extern void _ZN7S2360C83v28Ev();
extern void _ZN7S2360C83v29Ev();
extern void _ZN7S2360C83v30Ev();
static  VTBL_ENTRY vtc_S2360C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2360C1[0]),
  (VTBL_ENTRY)&_ZN7S2360C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2360C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2360C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2360C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2360C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2360C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2360C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2360C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2360C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2360C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2360C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2360C23v36Ev,
  (VTBL_ENTRY)&_ZN7S2360C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2360C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2360C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2360C12v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2360C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2360C1D1Ev,_ZThn28_N7S2360C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2360C1D0Ev,_ZThn28_N7S2360C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2360C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2360C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2360C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2360C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2360C1D1Ev,_ZThn44_N7S2360C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2360C1D0Ev,_ZThn44_N7S2360C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2360C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2360C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2360C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2360C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2360C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2360C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2360C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2360C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2360C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2360C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2360C1[];
extern  VTBL_ENTRY _ZTV7S2360C1[];
Class_Descriptor cd_S2360C1 = {  "S2360C1", // class name
  bases_S2360C1, 7,
  &(vtc_S2360C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,192), // object size
  NSPAIRA(_ZTI7S2360C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2360C1),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2353C4  {
  ::S5166C19_nt s2353c4f0;
  int s2353c4f1[2];
  char s2353c4f2;
  virtual  ~S2353C4(); // _ZN7S2353C4D1Ev
  virtual void  v5(); // _ZN7S2353C42v5Ev
  virtual void  v6(); // _ZN7S2353C42v6Ev
  virtual void  v7(); // _ZN7S2353C42v7Ev
  S2353C4(); // tgen
};
//SIG(-1 S2353C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2353C4 ::~S2353C4(){ note_dtor("S2353C4", this);}
void  S2353C4 ::v5(){vfunc_called(this, "_ZN7S2353C42v5Ev");}
void  S2353C4 ::v6(){vfunc_called(this, "_ZN7S2353C42v6Ev");}
void  S2353C4 ::v7(){vfunc_called(this, "_ZN7S2353C42v7Ev");}
S2353C4 ::S2353C4(){ note_ctor("S2353C4", this);} // tgen

static void Test_S2353C4()
{
  extern Class_Descriptor cd_S2353C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2353C4, buf);
    S2353C4 *dp, &lv = *(dp=new (buf) S2353C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2353C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2353C4)");
    check_field_offset(lv, s2353c4f0, ABISELECT(8,4), "S2353C4.s2353c4f0");
    check_field_offset(lv, s2353c4f1, ABISELECT(24,16), "S2353C4.s2353c4f1");
    check_field_offset(lv, s2353c4f2, ABISELECT(32,24), "S2353C4.s2353c4f2");
    test_class_info(&lv, &cd_S2353C4);
    dp->~S2353C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2353C4(Test_S2353C4, "S2353C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2353C4C1Ev();
extern void _ZN7S2353C4D1Ev();
Name_Map name_map_S2353C4[] = {
  NSPAIR(_ZN7S2353C4C1Ev),
  NSPAIR(_ZN7S2353C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2353C4[];
extern void _ZN7S2353C4D1Ev();
extern void _ZN7S2353C4D0Ev();
extern void _ZN7S2353C42v5Ev();
extern void _ZN7S2353C42v6Ev();
extern void _ZN7S2353C42v7Ev();
static  VTBL_ENTRY vtc_S2353C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2353C4[0]),
  (VTBL_ENTRY)&_ZN7S2353C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2353C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2353C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2353C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2353C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S2353C4[];
extern  VTBL_ENTRY _ZTV7S2353C4[];
Class_Descriptor cd_S2353C4 = {  "S2353C4", // class name
  0,0,//no base classes
  &(vtc_S2353C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2353C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2353C4),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  S2353C7  {
  virtual  ~S2353C7(); // _ZN7S2353C7D1Ev
  virtual void  v8(); // _ZN7S2353C72v8Ev
  virtual void  v9(); // _ZN7S2353C72v9Ev
  virtual void  v10(); // _ZN7S2353C73v10Ev
  S2353C7(); // tgen
};
//SIG(-1 S2353C7) C1{ vd v1 v2 v3}


 S2353C7 ::~S2353C7(){ note_dtor("S2353C7", this);}
void  S2353C7 ::v8(){vfunc_called(this, "_ZN7S2353C72v8Ev");}
void  S2353C7 ::v9(){vfunc_called(this, "_ZN7S2353C72v9Ev");}
void  S2353C7 ::v10(){vfunc_called(this, "_ZN7S2353C73v10Ev");}
S2353C7 ::S2353C7(){ note_ctor("S2353C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2353C7C1Ev();
extern void _ZN7S2353C7D1Ev();
Name_Map name_map_S2353C7[] = {
  NSPAIR(_ZN7S2353C7C1Ev),
  NSPAIR(_ZN7S2353C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2353C7[];
extern void _ZN7S2353C7D1Ev();
extern void _ZN7S2353C7D0Ev();
extern void _ZN7S2353C72v8Ev();
extern void _ZN7S2353C72v9Ev();
extern void _ZN7S2353C73v10Ev();
static  VTBL_ENTRY vtc_S2353C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2353C7[0]),
  (VTBL_ENTRY)&_ZN7S2353C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2353C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2353C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2353C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2353C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2353C7[];
extern  VTBL_ENTRY _ZTV7S2353C7[];
Class_Descriptor cd_S2353C7 = {  "S2353C7", // class name
  0,0,//no base classes
  &(vtc_S2353C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2353C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2353C7),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  S2353C3  : S2353C4 , S2353C7 {
  void *s2353c3f0;
  char s2353c3f1;
  int s2353c3f2;
  virtual  ~S2353C3(); // _ZN7S2353C3D1Ev
  virtual void  v11(); // _ZN7S2353C33v11Ev
  virtual void  v12(); // _ZN7S2353C33v12Ev
  virtual void  v13(); // _ZN7S2353C33v13Ev
  virtual void  v14(); // _ZN7S2353C33v14Ev
  virtual void  v15(); // _ZN7S2353C33v15Ev
  virtual void  v16(); // _ZN7S2353C33v16Ev
  virtual void  v17(); // _ZN7S2353C33v17Ev
  virtual void  v18(); // _ZN7S2353C33v18Ev
  virtual void  v19(); // _ZN7S2353C33v19Ev
  virtual void  v20(); // _ZN7S2353C33v20Ev
  S2353C3(); // tgen
};
//SIG(-1 S2353C3) C1{ BC2{ vd v11 v12 v13 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fc Fi}


 S2353C3 ::~S2353C3(){ note_dtor("S2353C3", this);}
void  S2353C3 ::v11(){vfunc_called(this, "_ZN7S2353C33v11Ev");}
void  S2353C3 ::v12(){vfunc_called(this, "_ZN7S2353C33v12Ev");}
void  S2353C3 ::v13(){vfunc_called(this, "_ZN7S2353C33v13Ev");}
void  S2353C3 ::v14(){vfunc_called(this, "_ZN7S2353C33v14Ev");}
void  S2353C3 ::v15(){vfunc_called(this, "_ZN7S2353C33v15Ev");}
void  S2353C3 ::v16(){vfunc_called(this, "_ZN7S2353C33v16Ev");}
void  S2353C3 ::v17(){vfunc_called(this, "_ZN7S2353C33v17Ev");}
void  S2353C3 ::v18(){vfunc_called(this, "_ZN7S2353C33v18Ev");}
void  S2353C3 ::v19(){vfunc_called(this, "_ZN7S2353C33v19Ev");}
void  S2353C3 ::v20(){vfunc_called(this, "_ZN7S2353C33v20Ev");}
S2353C3 ::S2353C3(){ note_ctor("S2353C3", this);} // tgen

static void Test_S2353C3()
{
  extern Class_Descriptor cd_S2353C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S2353C3, buf);
    S2353C3 *dp, &lv = *(dp=new (buf) S2353C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S2353C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2353C3)");
    check_base_class_offset(lv, (S2353C4*), 0, "S2353C3");
    check_base_class_offset(lv, (S2353C7*), ABISELECT(40,28), "S2353C3");
    check_field_offset(lv, s2353c3f0, ABISELECT(48,32), "S2353C3.s2353c3f0");
    check_field_offset(lv, s2353c3f1, ABISELECT(56,36), "S2353C3.s2353c3f1");
    check_field_offset(lv, s2353c3f2, ABISELECT(60,40), "S2353C3.s2353c3f2");
    test_class_info(&lv, &cd_S2353C3);
    dp->~S2353C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2353C3(Test_S2353C3, "S2353C3", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S2353C3C1Ev();
extern void _ZN7S2353C3D1Ev();
Name_Map name_map_S2353C3[] = {
  NSPAIR(_ZN7S2353C3C1Ev),
  NSPAIR(_ZN7S2353C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2353C4;
extern VTBL_ENTRY _ZTI7S2353C4[];
extern  VTBL_ENTRY _ZTV7S2353C4[];
extern Class_Descriptor cd_S2353C7;
extern VTBL_ENTRY _ZTI7S2353C7[];
extern  VTBL_ENTRY _ZTV7S2353C7[];
static Base_Class bases_S2353C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2353C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2353C7,    ABISELECT(40,28), //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2353C3[];
extern void _ZN7S2353C3D1Ev();
extern void _ZN7S2353C3D0Ev();
extern void _ZN7S2353C42v5Ev();
extern void _ZN7S2353C42v6Ev();
extern void _ZN7S2353C42v7Ev();
extern void _ZN7S2353C33v11Ev();
extern void _ZN7S2353C33v12Ev();
extern void _ZN7S2353C33v13Ev();
extern void _ZN7S2353C33v14Ev();
extern void _ZN7S2353C33v15Ev();
extern void _ZN7S2353C33v16Ev();
extern void _ZN7S2353C33v17Ev();
extern void _ZN7S2353C33v18Ev();
extern void _ZN7S2353C33v19Ev();
extern void _ZN7S2353C33v20Ev();
extern void ABISELECT(_ZThn40_N7S2353C3D1Ev,_ZThn28_N7S2353C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2353C3D0Ev,_ZThn28_N7S2353C3D0Ev)();
extern void _ZN7S2353C72v8Ev();
extern void _ZN7S2353C72v9Ev();
extern void _ZN7S2353C73v10Ev();
static  VTBL_ENTRY vtc_S2353C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2353C3[0]),
  (VTBL_ENTRY)&_ZN7S2353C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2353C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2353C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2353C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2353C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v20Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2353C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2353C3D1Ev,_ZThn28_N7S2353C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2353C3D0Ev,_ZThn28_N7S2353C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2353C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2353C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2353C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2353C3[];
extern  VTBL_ENTRY _ZTV7S2353C3[];
Class_Descriptor cd_S2353C3 = {  "S2353C3", // class name
  bases_S2353C3, 2,
  &(vtc_S2353C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S2353C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2353C3),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  S2353C10  {
  virtual  ~S2353C10(); // _ZN8S2353C10D1Ev
  virtual void  v21(); // _ZN8S2353C103v21Ev
  virtual void  v22(); // _ZN8S2353C103v22Ev
  virtual void  v23(); // _ZN8S2353C103v23Ev
  S2353C10(); // tgen
};
//SIG(-1 S2353C10) C1{ vd v1 v2 v3}


 S2353C10 ::~S2353C10(){ note_dtor("S2353C10", this);}
void  S2353C10 ::v21(){vfunc_called(this, "_ZN8S2353C103v21Ev");}
void  S2353C10 ::v22(){vfunc_called(this, "_ZN8S2353C103v22Ev");}
void  S2353C10 ::v23(){vfunc_called(this, "_ZN8S2353C103v23Ev");}
S2353C10 ::S2353C10(){ note_ctor("S2353C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2353C10C1Ev();
extern void _ZN8S2353C10D1Ev();
Name_Map name_map_S2353C10[] = {
  NSPAIR(_ZN8S2353C10C1Ev),
  NSPAIR(_ZN8S2353C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2353C10[];
extern void _ZN8S2353C10D1Ev();
extern void _ZN8S2353C10D0Ev();
extern void _ZN8S2353C103v21Ev();
extern void _ZN8S2353C103v22Ev();
extern void _ZN8S2353C103v23Ev();
static  VTBL_ENTRY vtc_S2353C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2353C10[0]),
  (VTBL_ENTRY)&_ZN8S2353C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2353C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2353C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2353C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2353C103v23Ev,
};
extern VTBL_ENTRY _ZTI8S2353C10[];
extern  VTBL_ENTRY _ZTV8S2353C10[];
Class_Descriptor cd_S2353C10 = {  "S2353C10", // class name
  0,0,//no base classes
  &(vtc_S2353C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2353C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2353C10),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  S2353C9  : S2353C10 {
  ::S5166C36 s2353c9f0;
  ::S2355C13_nt s2353c9f1;
  char s2353c9f2;
  virtual  ~S2353C9(); // _ZN7S2353C9D1Ev
  virtual void  v24(); // _ZN7S2353C93v24Ev
  virtual void  v25(); // _ZN7S2353C93v25Ev
  virtual void  v26(); // _ZN7S2353C93v26Ev
  S2353C9(); // tgen
};
//SIG(-1 S2353C9) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2353C9 ::~S2353C9(){ note_dtor("S2353C9", this);}
void  S2353C9 ::v24(){vfunc_called(this, "_ZN7S2353C93v24Ev");}
void  S2353C9 ::v25(){vfunc_called(this, "_ZN7S2353C93v25Ev");}
void  S2353C9 ::v26(){vfunc_called(this, "_ZN7S2353C93v26Ev");}
S2353C9 ::S2353C9(){ note_ctor("S2353C9", this);} // tgen

static void Test_S2353C9()
{
  extern Class_Descriptor cd_S2353C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2353C9, buf);
    S2353C9 *dp, &lv = *(dp=new (buf) S2353C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2353C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2353C9)");
    check_base_class_offset(lv, (S2353C10*), 0, "S2353C9");
    check_field_offset(lv, s2353c9f0, ABISELECT(8,4), "S2353C9.s2353c9f0");
    check_field_offset(lv, s2353c9f1, ABISELECT(32,20), "S2353C9.s2353c9f1");
    check_field_offset(lv, s2353c9f2, ABISELECT(64,52), "S2353C9.s2353c9f2");
    test_class_info(&lv, &cd_S2353C9);
    dp->~S2353C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2353C9(Test_S2353C9, "S2353C9", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2353C9C1Ev();
extern void _ZN7S2353C9D1Ev();
Name_Map name_map_S2353C9[] = {
  NSPAIR(_ZN7S2353C9C1Ev),
  NSPAIR(_ZN7S2353C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2353C10;
extern VTBL_ENTRY _ZTI8S2353C10[];
extern  VTBL_ENTRY _ZTV8S2353C10[];
static Base_Class bases_S2353C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2353C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2353C9[];
extern void _ZN7S2353C9D1Ev();
extern void _ZN7S2353C9D0Ev();
extern void _ZN8S2353C103v21Ev();
extern void _ZN8S2353C103v22Ev();
extern void _ZN8S2353C103v23Ev();
extern void _ZN7S2353C93v24Ev();
extern void _ZN7S2353C93v25Ev();
extern void _ZN7S2353C93v26Ev();
static  VTBL_ENTRY vtc_S2353C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2353C9[0]),
  (VTBL_ENTRY)&_ZN7S2353C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2353C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2353C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2353C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2353C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2353C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2353C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2353C93v26Ev,
};
extern VTBL_ENTRY _ZTI7S2353C9[];
extern  VTBL_ENTRY _ZTV7S2353C9[];
Class_Descriptor cd_S2353C9 = {  "S2353C9", // class name
  bases_S2353C9, 1,
  &(vtc_S2353C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2353C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2353C9),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  S2353C8  : S2353C9 {
  virtual  ~S2353C8(); // _ZN7S2353C8D1Ev
  virtual void  v27(); // _ZN7S2353C83v27Ev
  virtual void  v28(); // _ZN7S2353C83v28Ev
  virtual void  v29(); // _ZN7S2353C83v29Ev
  virtual void  v30(); // _ZN7S2353C83v30Ev
  S2353C8(); // tgen
};
//SIG(-1 S2353C8) C1{ BC2{ BC3{ vd v5 v6 v7} vd v8 v9 v10 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4}


 S2353C8 ::~S2353C8(){ note_dtor("S2353C8", this);}
void  S2353C8 ::v27(){vfunc_called(this, "_ZN7S2353C83v27Ev");}
void  S2353C8 ::v28(){vfunc_called(this, "_ZN7S2353C83v28Ev");}
void  S2353C8 ::v29(){vfunc_called(this, "_ZN7S2353C83v29Ev");}
void  S2353C8 ::v30(){vfunc_called(this, "_ZN7S2353C83v30Ev");}
S2353C8 ::S2353C8(){ note_ctor("S2353C8", this);} // tgen

static void Test_S2353C8()
{
  extern Class_Descriptor cd_S2353C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2353C8, buf);
    S2353C8 *dp, &lv = *(dp=new (buf) S2353C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2353C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2353C8)");
    check_base_class_offset(lv, (S2353C10*)(S2353C9*), 0, "S2353C8");
    check_base_class_offset(lv, (S2353C9*), 0, "S2353C8");
    test_class_info(&lv, &cd_S2353C8);
    dp->~S2353C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2353C8(Test_S2353C8, "S2353C8", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2353C8C1Ev();
extern void _ZN7S2353C8D1Ev();
Name_Map name_map_S2353C8[] = {
  NSPAIR(_ZN7S2353C8C1Ev),
  NSPAIR(_ZN7S2353C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2353C10;
extern VTBL_ENTRY _ZTI8S2353C10[];
extern  VTBL_ENTRY _ZTV8S2353C10[];
extern Class_Descriptor cd_S2353C9;
extern VTBL_ENTRY _ZTI7S2353C9[];
extern  VTBL_ENTRY _ZTV7S2353C9[];
static Base_Class bases_S2353C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2353C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2353C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2353C8[];
extern void _ZN7S2353C8D1Ev();
extern void _ZN7S2353C8D0Ev();
extern void _ZN8S2353C103v21Ev();
extern void _ZN8S2353C103v22Ev();
extern void _ZN8S2353C103v23Ev();
extern void _ZN7S2353C93v24Ev();
extern void _ZN7S2353C93v25Ev();
extern void _ZN7S2353C93v26Ev();
extern void _ZN7S2353C83v27Ev();
extern void _ZN7S2353C83v28Ev();
extern void _ZN7S2353C83v29Ev();
extern void _ZN7S2353C83v30Ev();
static  VTBL_ENTRY vtc_S2353C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2353C8[0]),
  (VTBL_ENTRY)&_ZN7S2353C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2353C8D0Ev,
  (VTBL_ENTRY)&_ZN8S2353C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2353C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2353C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2353C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2353C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2353C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2353C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2353C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2353C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2353C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2353C8[];
extern  VTBL_ENTRY _ZTV7S2353C8[];
Class_Descriptor cd_S2353C8 = {  "S2353C8", // class name
  bases_S2353C8, 2,
  &(vtc_S2353C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2353C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2353C8),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2353C2  : S2353C3 , S2353C8 {
  int s2353c2f0[3];
  char s2353c2f1;
  ::S5166C24 s2353c2f2;
  virtual  ~S2353C2(); // _ZN7S2353C2D1Ev
  virtual void  v31(); // _ZN7S2353C23v31Ev
  virtual void  v32(); // _ZN7S2353C23v32Ev
  virtual void  v33(); // _ZN7S2353C23v33Ev
  virtual void  v34(); // _ZN7S2353C23v34Ev
  virtual void  v35(); // _ZN7S2353C23v35Ev
  virtual void  v36(); // _ZN7S2353C23v36Ev
  S2353C2(); // tgen
};
//SIG(-1 S2353C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd v10 v11 v12} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp Fc Fi} BC7{ BC8{ BC9{ vd v23 v24 v25} vd v26 v27 v28 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m FL[4]} Fc} vd v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 Fi[3] Fc FC13{ BC14{ m Fp Fi FC15{ m} FC16{ m}}}}


 S2353C2 ::~S2353C2(){ note_dtor("S2353C2", this);}
void  S2353C2 ::v31(){vfunc_called(this, "_ZN7S2353C23v31Ev");}
void  S2353C2 ::v32(){vfunc_called(this, "_ZN7S2353C23v32Ev");}
void  S2353C2 ::v33(){vfunc_called(this, "_ZN7S2353C23v33Ev");}
void  S2353C2 ::v34(){vfunc_called(this, "_ZN7S2353C23v34Ev");}
void  S2353C2 ::v35(){vfunc_called(this, "_ZN7S2353C23v35Ev");}
void  S2353C2 ::v36(){vfunc_called(this, "_ZN7S2353C23v36Ev");}
S2353C2 ::S2353C2(){ note_ctor("S2353C2", this);} // tgen

static void Test_S2353C2()
{
  extern Class_Descriptor cd_S2353C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,33)];
    init_test(&cd_S2353C2, buf);
    S2353C2 *dp, &lv = *(dp=new (buf) S2353C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,128), "sizeof(S2353C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2353C2)");
    check_base_class_offset(lv, (S2353C4*)(S2353C3*), 0, "S2353C2");
    check_base_class_offset(lv, (S2353C7*)(S2353C3*), ABISELECT(40,28), "S2353C2");
    check_base_class_offset(lv, (S2353C3*), 0, "S2353C2");
    check_base_class_offset(lv, (S2353C10*)(S2353C9*)(S2353C8*), ABISELECT(64,44), "S2353C2");
    check_base_class_offset(lv, (S2353C9*)(S2353C8*), ABISELECT(64,44), "S2353C2");
    check_base_class_offset(lv, (S2353C8*), ABISELECT(64,44), "S2353C2");
    check_field_offset(lv, s2353c2f0, ABISELECT(132,100), "S2353C2.s2353c2f0");
    check_field_offset(lv, s2353c2f1, ABISELECT(144,112), "S2353C2.s2353c2f1");
    check_field_offset(lv, s2353c2f2, ABISELECT(152,116), "S2353C2.s2353c2f2");
    test_class_info(&lv, &cd_S2353C2);
    dp->~S2353C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2353C2(Test_S2353C2, "S2353C2", ABISELECT(168,128));

#else // __cplusplus

extern void _ZN7S2353C2C1Ev();
extern void _ZN7S2353C2D1Ev();
Name_Map name_map_S2353C2[] = {
  NSPAIR(_ZN7S2353C2C1Ev),
  NSPAIR(_ZN7S2353C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2353C4;
extern VTBL_ENTRY _ZTI7S2353C4[];
extern  VTBL_ENTRY _ZTV7S2353C4[];
extern Class_Descriptor cd_S2353C7;
extern VTBL_ENTRY _ZTI7S2353C7[];
extern  VTBL_ENTRY _ZTV7S2353C7[];
extern Class_Descriptor cd_S2353C3;
extern VTBL_ENTRY _ZTI7S2353C3[];
extern  VTBL_ENTRY _ZTV7S2353C3[];
extern Class_Descriptor cd_S2353C10;
extern VTBL_ENTRY _ZTI8S2353C10[];
extern  VTBL_ENTRY _ZTV8S2353C10[];
extern Class_Descriptor cd_S2353C9;
extern VTBL_ENTRY _ZTI7S2353C9[];
extern  VTBL_ENTRY _ZTV7S2353C9[];
extern Class_Descriptor cd_S2353C8;
extern VTBL_ENTRY _ZTI7S2353C8[];
extern  VTBL_ENTRY _ZTV7S2353C8[];
static Base_Class bases_S2353C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2353C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2353C7,    ABISELECT(40,28), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2353C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2353C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2353C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2353C8,    ABISELECT(64,44), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2353C2[];
extern void _ZN7S2353C2D1Ev();
extern void _ZN7S2353C2D0Ev();
extern void _ZN7S2353C42v5Ev();
extern void _ZN7S2353C42v6Ev();
extern void _ZN7S2353C42v7Ev();
extern void _ZN7S2353C33v11Ev();
extern void _ZN7S2353C33v12Ev();
extern void _ZN7S2353C33v13Ev();
extern void _ZN7S2353C33v14Ev();
extern void _ZN7S2353C33v15Ev();
extern void _ZN7S2353C33v16Ev();
extern void _ZN7S2353C33v17Ev();
extern void _ZN7S2353C33v18Ev();
extern void _ZN7S2353C33v19Ev();
extern void _ZN7S2353C33v20Ev();
extern void _ZN7S2353C23v31Ev();
extern void _ZN7S2353C23v32Ev();
extern void _ZN7S2353C23v33Ev();
extern void _ZN7S2353C23v34Ev();
extern void _ZN7S2353C23v35Ev();
extern void _ZN7S2353C23v36Ev();
extern void ABISELECT(_ZThn40_N7S2353C2D1Ev,_ZThn28_N7S2353C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2353C2D0Ev,_ZThn28_N7S2353C2D0Ev)();
extern void _ZN7S2353C72v8Ev();
extern void _ZN7S2353C72v9Ev();
extern void _ZN7S2353C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2353C2D1Ev,_ZThn44_N7S2353C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S2353C2D0Ev,_ZThn44_N7S2353C2D0Ev)();
extern void _ZN8S2353C103v21Ev();
extern void _ZN8S2353C103v22Ev();
extern void _ZN8S2353C103v23Ev();
extern void _ZN7S2353C93v24Ev();
extern void _ZN7S2353C93v25Ev();
extern void _ZN7S2353C93v26Ev();
extern void _ZN7S2353C83v27Ev();
extern void _ZN7S2353C83v28Ev();
extern void _ZN7S2353C83v29Ev();
extern void _ZN7S2353C83v30Ev();
static  VTBL_ENTRY vtc_S2353C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2353C2[0]),
  (VTBL_ENTRY)&_ZN7S2353C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2353C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2353C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2353C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2353C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2353C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2353C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2353C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2353C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2353C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2353C23v36Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2353C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2353C2D1Ev,_ZThn28_N7S2353C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2353C2D0Ev,_ZThn28_N7S2353C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2353C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2353C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2353C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2353C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2353C2D1Ev,_ZThn44_N7S2353C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2353C2D0Ev,_ZThn44_N7S2353C2D0Ev),
  (VTBL_ENTRY)&_ZN8S2353C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2353C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2353C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2353C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2353C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2353C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2353C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2353C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2353C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2353C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2353C2[];
extern  VTBL_ENTRY _ZTV7S2353C2[];
Class_Descriptor cd_S2353C2 = {  "S2353C2", // class name
  bases_S2353C2, 6,
  &(vtc_S2353C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,128), // object size
  NSPAIRA(_ZTI7S2353C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2353C2),44, //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  S2353C1  : S2353C2 {
  ::S2355C18_nt s2353c1f0;
  ::S2355C19_nt s2353c1f1;
  int s2353c1f2[2];
  ::S5166C19_nt s2353c1f3;
  int s2353c1f4;
  virtual  ~S2353C1(); // _ZN7S2353C1D1Ev
  virtual void  v1(); // _ZN7S2353C12v1Ev
  virtual void  v2(); // _ZN7S2353C12v2Ev
  virtual void  v3(); // _ZN7S2353C12v3Ev
  virtual void  v4(); // _ZN7S2353C12v4Ev
  S2353C1(); // tgen
};
//SIG(1 S2353C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd v8 v9 v10} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp Fc Fi} BC8{ BC9{ BC10{ vd v21 v22 v23} vd v24 v25 v26 FC11{ m Fp Fi[2] FC12{ m}} FC13{ m FL[4]} Fc} vd v27 v28 v29 v30} vd v31 v32 v33 v34 v35 v36 Fi[3] Fc FC14{ BC15{ m Fp Fi FC16{ m} FC17{ m}}}} vd v1 v2 v3 v4 FC18{ vd v37 v38 v39 v40 Fp} FC19{ BC20{ vd v42 FC21{ m FC15} Fp[3] Fc} v41 Fp} Fi[2] FC5 Fi}


 S2353C1 ::~S2353C1(){ note_dtor("S2353C1", this);}
void  S2353C1 ::v1(){vfunc_called(this, "_ZN7S2353C12v1Ev");}
void  S2353C1 ::v2(){vfunc_called(this, "_ZN7S2353C12v2Ev");}
void  S2353C1 ::v3(){vfunc_called(this, "_ZN7S2353C12v3Ev");}
void  S2353C1 ::v4(){vfunc_called(this, "_ZN7S2353C12v4Ev");}
S2353C1 ::S2353C1(){ note_ctor("S2353C1", this);} // tgen

static void Test_S2353C1()
{
  extern Class_Descriptor cd_S2353C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,50)];
    init_test(&cd_S2353C1, buf);
    S2353C1 *dp, &lv = *(dp=new (buf) S2353C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,196), "sizeof(S2353C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2353C1)");
    check_base_class_offset(lv, (S2353C4*)(S2353C3*)(S2353C2*), 0, "S2353C1");
    check_base_class_offset(lv, (S2353C7*)(S2353C3*)(S2353C2*), ABISELECT(40,28), "S2353C1");
    check_base_class_offset(lv, (S2353C3*)(S2353C2*), 0, "S2353C1");
    check_base_class_offset(lv, (S2353C10*)(S2353C9*)(S2353C8*)(S2353C2*), ABISELECT(64,44), "S2353C1");
    check_base_class_offset(lv, (S2353C9*)(S2353C8*)(S2353C2*), ABISELECT(64,44), "S2353C1");
    check_base_class_offset(lv, (S2353C8*)(S2353C2*), ABISELECT(64,44), "S2353C1");
    check_base_class_offset(lv, (S2353C2*), 0, "S2353C1");
    check_field_offset(lv, s2353c1f0, ABISELECT(168,128), "S2353C1.s2353c1f0");
    check_field_offset(lv, s2353c1f1, ABISELECT(184,136), "S2353C1.s2353c1f1");
    check_field_offset(lv, s2353c1f2, ABISELECT(248,172), "S2353C1.s2353c1f2");
    check_field_offset(lv, s2353c1f3, ABISELECT(256,180), "S2353C1.s2353c1f3");
    check_field_offset(lv, s2353c1f4, ABISELECT(272,192), "S2353C1.s2353c1f4");
    test_class_info(&lv, &cd_S2353C1);
    dp->~S2353C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2353C1(Test_S2353C1, "S2353C1", ABISELECT(280,196));

#else // __cplusplus

extern void _ZN7S2353C1C1Ev();
extern void _ZN7S2353C1D1Ev();
Name_Map name_map_S2353C1[] = {
  NSPAIR(_ZN7S2353C1C1Ev),
  NSPAIR(_ZN7S2353C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2353C4;
extern VTBL_ENTRY _ZTI7S2353C4[];
extern  VTBL_ENTRY _ZTV7S2353C4[];
extern Class_Descriptor cd_S2353C7;
extern VTBL_ENTRY _ZTI7S2353C7[];
extern  VTBL_ENTRY _ZTV7S2353C7[];
extern Class_Descriptor cd_S2353C3;
extern VTBL_ENTRY _ZTI7S2353C3[];
extern  VTBL_ENTRY _ZTV7S2353C3[];
extern Class_Descriptor cd_S2353C10;
extern VTBL_ENTRY _ZTI8S2353C10[];
extern  VTBL_ENTRY _ZTV8S2353C10[];
extern Class_Descriptor cd_S2353C9;
extern VTBL_ENTRY _ZTI7S2353C9[];
extern  VTBL_ENTRY _ZTV7S2353C9[];
extern Class_Descriptor cd_S2353C8;
extern VTBL_ENTRY _ZTI7S2353C8[];
extern  VTBL_ENTRY _ZTV7S2353C8[];
extern Class_Descriptor cd_S2353C2;
extern VTBL_ENTRY _ZTI7S2353C2[];
extern  VTBL_ENTRY _ZTV7S2353C2[];
static Base_Class bases_S2353C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2353C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2353C7,    ABISELECT(40,28), //bcp->offset
    27, //bcp->virtual_function_table_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_S2353C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2353C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2353C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2353C8,    ABISELECT(64,44), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2353C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2353C1[];
extern void _ZN7S2353C1D1Ev();
extern void _ZN7S2353C1D0Ev();
extern void _ZN7S2353C42v5Ev();
extern void _ZN7S2353C42v6Ev();
extern void _ZN7S2353C42v7Ev();
extern void _ZN7S2353C33v11Ev();
extern void _ZN7S2353C33v12Ev();
extern void _ZN7S2353C33v13Ev();
extern void _ZN7S2353C33v14Ev();
extern void _ZN7S2353C33v15Ev();
extern void _ZN7S2353C33v16Ev();
extern void _ZN7S2353C33v17Ev();
extern void _ZN7S2353C33v18Ev();
extern void _ZN7S2353C33v19Ev();
extern void _ZN7S2353C33v20Ev();
extern void _ZN7S2353C23v31Ev();
extern void _ZN7S2353C23v32Ev();
extern void _ZN7S2353C23v33Ev();
extern void _ZN7S2353C23v34Ev();
extern void _ZN7S2353C23v35Ev();
extern void _ZN7S2353C23v36Ev();
extern void _ZN7S2353C12v1Ev();
extern void _ZN7S2353C12v2Ev();
extern void _ZN7S2353C12v3Ev();
extern void _ZN7S2353C12v4Ev();
extern void ABISELECT(_ZThn40_N7S2353C1D1Ev,_ZThn28_N7S2353C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2353C1D0Ev,_ZThn28_N7S2353C1D0Ev)();
extern void _ZN7S2353C72v8Ev();
extern void _ZN7S2353C72v9Ev();
extern void _ZN7S2353C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2353C1D1Ev,_ZThn44_N7S2353C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S2353C1D0Ev,_ZThn44_N7S2353C1D0Ev)();
extern void _ZN8S2353C103v21Ev();
extern void _ZN8S2353C103v22Ev();
extern void _ZN8S2353C103v23Ev();
extern void _ZN7S2353C93v24Ev();
extern void _ZN7S2353C93v25Ev();
extern void _ZN7S2353C93v26Ev();
extern void _ZN7S2353C83v27Ev();
extern void _ZN7S2353C83v28Ev();
extern void _ZN7S2353C83v29Ev();
extern void _ZN7S2353C83v30Ev();
static  VTBL_ENTRY vtc_S2353C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2353C1[0]),
  (VTBL_ENTRY)&_ZN7S2353C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2353C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2353C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2353C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2353C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2353C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2353C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2353C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2353C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2353C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2353C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2353C23v36Ev,
  (VTBL_ENTRY)&_ZN7S2353C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2353C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2353C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2353C12v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2353C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2353C1D1Ev,_ZThn28_N7S2353C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2353C1D0Ev,_ZThn28_N7S2353C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2353C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2353C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2353C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2353C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2353C1D1Ev,_ZThn44_N7S2353C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2353C1D0Ev,_ZThn44_N7S2353C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2353C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2353C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2353C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2353C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2353C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2353C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2353C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2353C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2353C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2353C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2353C1[];
extern  VTBL_ENTRY _ZTV7S2353C1[];
Class_Descriptor cd_S2353C1 = {  "S2353C1", // class name
  bases_S2353C1, 7,
  &(vtc_S2353C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,196), // object size
  NSPAIRA(_ZTI7S2353C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2353C1),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2354C4  {
  ::S5166C19_nt s2354c4f0;
  int s2354c4f1[2];
  char s2354c4f2;
  virtual  ~S2354C4(); // _ZN7S2354C4D1Ev
  virtual void  v5(); // _ZN7S2354C42v5Ev
  virtual void  v6(); // _ZN7S2354C42v6Ev
  virtual void  v7(); // _ZN7S2354C42v7Ev
  S2354C4(); // tgen
};
//SIG(-1 S2354C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2354C4 ::~S2354C4(){ note_dtor("S2354C4", this);}
void  S2354C4 ::v5(){vfunc_called(this, "_ZN7S2354C42v5Ev");}
void  S2354C4 ::v6(){vfunc_called(this, "_ZN7S2354C42v6Ev");}
void  S2354C4 ::v7(){vfunc_called(this, "_ZN7S2354C42v7Ev");}
S2354C4 ::S2354C4(){ note_ctor("S2354C4", this);} // tgen

static void Test_S2354C4()
{
  extern Class_Descriptor cd_S2354C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2354C4, buf);
    S2354C4 *dp, &lv = *(dp=new (buf) S2354C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2354C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2354C4)");
    check_field_offset(lv, s2354c4f0, ABISELECT(8,4), "S2354C4.s2354c4f0");
    check_field_offset(lv, s2354c4f1, ABISELECT(24,16), "S2354C4.s2354c4f1");
    check_field_offset(lv, s2354c4f2, ABISELECT(32,24), "S2354C4.s2354c4f2");
    test_class_info(&lv, &cd_S2354C4);
    dp->~S2354C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2354C4(Test_S2354C4, "S2354C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2354C4C1Ev();
extern void _ZN7S2354C4D1Ev();
Name_Map name_map_S2354C4[] = {
  NSPAIR(_ZN7S2354C4C1Ev),
  NSPAIR(_ZN7S2354C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2354C4[];
extern void _ZN7S2354C4D1Ev();
extern void _ZN7S2354C4D0Ev();
extern void _ZN7S2354C42v5Ev();
extern void _ZN7S2354C42v6Ev();
extern void _ZN7S2354C42v7Ev();
static  VTBL_ENTRY vtc_S2354C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2354C4[0]),
  (VTBL_ENTRY)&_ZN7S2354C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2354C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2354C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2354C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2354C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S2354C4[];
extern  VTBL_ENTRY _ZTV7S2354C4[];
Class_Descriptor cd_S2354C4 = {  "S2354C4", // class name
  0,0,//no base classes
  &(vtc_S2354C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2354C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2354C4),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  S2354C7  {
  virtual  ~S2354C7(); // _ZN7S2354C7D1Ev
  virtual void  v8(); // _ZN7S2354C72v8Ev
  virtual void  v9(); // _ZN7S2354C72v9Ev
  virtual void  v10(); // _ZN7S2354C73v10Ev
  S2354C7(); // tgen
};
//SIG(-1 S2354C7) C1{ vd v1 v2 v3}


 S2354C7 ::~S2354C7(){ note_dtor("S2354C7", this);}
void  S2354C7 ::v8(){vfunc_called(this, "_ZN7S2354C72v8Ev");}
void  S2354C7 ::v9(){vfunc_called(this, "_ZN7S2354C72v9Ev");}
void  S2354C7 ::v10(){vfunc_called(this, "_ZN7S2354C73v10Ev");}
S2354C7 ::S2354C7(){ note_ctor("S2354C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2354C7C1Ev();
extern void _ZN7S2354C7D1Ev();
Name_Map name_map_S2354C7[] = {
  NSPAIR(_ZN7S2354C7C1Ev),
  NSPAIR(_ZN7S2354C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2354C7[];
extern void _ZN7S2354C7D1Ev();
extern void _ZN7S2354C7D0Ev();
extern void _ZN7S2354C72v8Ev();
extern void _ZN7S2354C72v9Ev();
extern void _ZN7S2354C73v10Ev();
static  VTBL_ENTRY vtc_S2354C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2354C7[0]),
  (VTBL_ENTRY)&_ZN7S2354C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2354C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2354C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2354C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2354C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2354C7[];
extern  VTBL_ENTRY _ZTV7S2354C7[];
Class_Descriptor cd_S2354C7 = {  "S2354C7", // class name
  0,0,//no base classes
  &(vtc_S2354C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2354C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2354C7),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  S2354C3  : S2354C4 , S2354C7 {
  void *s2354c3f0;
  char s2354c3f1;
  int s2354c3f2;
  virtual  ~S2354C3(); // _ZN7S2354C3D1Ev
  virtual void  v11(); // _ZN7S2354C33v11Ev
  virtual void  v12(); // _ZN7S2354C33v12Ev
  virtual void  v13(); // _ZN7S2354C33v13Ev
  virtual void  v14(); // _ZN7S2354C33v14Ev
  virtual void  v15(); // _ZN7S2354C33v15Ev
  virtual void  v16(); // _ZN7S2354C33v16Ev
  virtual void  v17(); // _ZN7S2354C33v17Ev
  virtual void  v18(); // _ZN7S2354C33v18Ev
  virtual void  v19(); // _ZN7S2354C33v19Ev
  virtual void  v20(); // _ZN7S2354C33v20Ev
  S2354C3(); // tgen
};
//SIG(-1 S2354C3) C1{ BC2{ vd v11 v12 v13 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fc Fi}


 S2354C3 ::~S2354C3(){ note_dtor("S2354C3", this);}
void  S2354C3 ::v11(){vfunc_called(this, "_ZN7S2354C33v11Ev");}
void  S2354C3 ::v12(){vfunc_called(this, "_ZN7S2354C33v12Ev");}
void  S2354C3 ::v13(){vfunc_called(this, "_ZN7S2354C33v13Ev");}
void  S2354C3 ::v14(){vfunc_called(this, "_ZN7S2354C33v14Ev");}
void  S2354C3 ::v15(){vfunc_called(this, "_ZN7S2354C33v15Ev");}
void  S2354C3 ::v16(){vfunc_called(this, "_ZN7S2354C33v16Ev");}
void  S2354C3 ::v17(){vfunc_called(this, "_ZN7S2354C33v17Ev");}
void  S2354C3 ::v18(){vfunc_called(this, "_ZN7S2354C33v18Ev");}
void  S2354C3 ::v19(){vfunc_called(this, "_ZN7S2354C33v19Ev");}
void  S2354C3 ::v20(){vfunc_called(this, "_ZN7S2354C33v20Ev");}
S2354C3 ::S2354C3(){ note_ctor("S2354C3", this);} // tgen

static void Test_S2354C3()
{
  extern Class_Descriptor cd_S2354C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S2354C3, buf);
    S2354C3 *dp, &lv = *(dp=new (buf) S2354C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S2354C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2354C3)");
    check_base_class_offset(lv, (S2354C4*), 0, "S2354C3");
    check_base_class_offset(lv, (S2354C7*), ABISELECT(40,28), "S2354C3");
    check_field_offset(lv, s2354c3f0, ABISELECT(48,32), "S2354C3.s2354c3f0");
    check_field_offset(lv, s2354c3f1, ABISELECT(56,36), "S2354C3.s2354c3f1");
    check_field_offset(lv, s2354c3f2, ABISELECT(60,40), "S2354C3.s2354c3f2");
    test_class_info(&lv, &cd_S2354C3);
    dp->~S2354C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2354C3(Test_S2354C3, "S2354C3", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S2354C3C1Ev();
extern void _ZN7S2354C3D1Ev();
Name_Map name_map_S2354C3[] = {
  NSPAIR(_ZN7S2354C3C1Ev),
  NSPAIR(_ZN7S2354C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2354C4;
extern VTBL_ENTRY _ZTI7S2354C4[];
extern  VTBL_ENTRY _ZTV7S2354C4[];
extern Class_Descriptor cd_S2354C7;
extern VTBL_ENTRY _ZTI7S2354C7[];
extern  VTBL_ENTRY _ZTV7S2354C7[];
static Base_Class bases_S2354C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2354C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2354C7,    ABISELECT(40,28), //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2354C3[];
extern void _ZN7S2354C3D1Ev();
extern void _ZN7S2354C3D0Ev();
extern void _ZN7S2354C42v5Ev();
extern void _ZN7S2354C42v6Ev();
extern void _ZN7S2354C42v7Ev();
extern void _ZN7S2354C33v11Ev();
extern void _ZN7S2354C33v12Ev();
extern void _ZN7S2354C33v13Ev();
extern void _ZN7S2354C33v14Ev();
extern void _ZN7S2354C33v15Ev();
extern void _ZN7S2354C33v16Ev();
extern void _ZN7S2354C33v17Ev();
extern void _ZN7S2354C33v18Ev();
extern void _ZN7S2354C33v19Ev();
extern void _ZN7S2354C33v20Ev();
extern void ABISELECT(_ZThn40_N7S2354C3D1Ev,_ZThn28_N7S2354C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2354C3D0Ev,_ZThn28_N7S2354C3D0Ev)();
extern void _ZN7S2354C72v8Ev();
extern void _ZN7S2354C72v9Ev();
extern void _ZN7S2354C73v10Ev();
static  VTBL_ENTRY vtc_S2354C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2354C3[0]),
  (VTBL_ENTRY)&_ZN7S2354C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2354C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2354C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2354C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2354C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v20Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2354C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2354C3D1Ev,_ZThn28_N7S2354C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2354C3D0Ev,_ZThn28_N7S2354C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2354C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2354C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2354C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2354C3[];
extern  VTBL_ENTRY _ZTV7S2354C3[];
Class_Descriptor cd_S2354C3 = {  "S2354C3", // class name
  bases_S2354C3, 2,
  &(vtc_S2354C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S2354C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2354C3),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  S2354C10  {
  virtual  ~S2354C10(); // _ZN8S2354C10D1Ev
  virtual void  v21(); // _ZN8S2354C103v21Ev
  virtual void  v22(); // _ZN8S2354C103v22Ev
  virtual void  v23(); // _ZN8S2354C103v23Ev
  S2354C10(); // tgen
};
//SIG(-1 S2354C10) C1{ vd v1 v2 v3}


 S2354C10 ::~S2354C10(){ note_dtor("S2354C10", this);}
void  S2354C10 ::v21(){vfunc_called(this, "_ZN8S2354C103v21Ev");}
void  S2354C10 ::v22(){vfunc_called(this, "_ZN8S2354C103v22Ev");}
void  S2354C10 ::v23(){vfunc_called(this, "_ZN8S2354C103v23Ev");}
S2354C10 ::S2354C10(){ note_ctor("S2354C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2354C10C1Ev();
extern void _ZN8S2354C10D1Ev();
Name_Map name_map_S2354C10[] = {
  NSPAIR(_ZN8S2354C10C1Ev),
  NSPAIR(_ZN8S2354C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2354C10[];
extern void _ZN8S2354C10D1Ev();
extern void _ZN8S2354C10D0Ev();
extern void _ZN8S2354C103v21Ev();
extern void _ZN8S2354C103v22Ev();
extern void _ZN8S2354C103v23Ev();
static  VTBL_ENTRY vtc_S2354C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2354C10[0]),
  (VTBL_ENTRY)&_ZN8S2354C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2354C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2354C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2354C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2354C103v23Ev,
};
extern VTBL_ENTRY _ZTI8S2354C10[];
extern  VTBL_ENTRY _ZTV8S2354C10[];
Class_Descriptor cd_S2354C10 = {  "S2354C10", // class name
  0,0,//no base classes
  &(vtc_S2354C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2354C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2354C10),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  S2354C9  : S2354C10 {
  ::S5166C36 s2354c9f0;
  ::S2355C13_nt s2354c9f1;
  char s2354c9f2;
  virtual  ~S2354C9(); // _ZN7S2354C9D1Ev
  virtual void  v24(); // _ZN7S2354C93v24Ev
  virtual void  v25(); // _ZN7S2354C93v25Ev
  virtual void  v26(); // _ZN7S2354C93v26Ev
  S2354C9(); // tgen
};
//SIG(-1 S2354C9) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2354C9 ::~S2354C9(){ note_dtor("S2354C9", this);}
void  S2354C9 ::v24(){vfunc_called(this, "_ZN7S2354C93v24Ev");}
void  S2354C9 ::v25(){vfunc_called(this, "_ZN7S2354C93v25Ev");}
void  S2354C9 ::v26(){vfunc_called(this, "_ZN7S2354C93v26Ev");}
S2354C9 ::S2354C9(){ note_ctor("S2354C9", this);} // tgen

static void Test_S2354C9()
{
  extern Class_Descriptor cd_S2354C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2354C9, buf);
    S2354C9 *dp, &lv = *(dp=new (buf) S2354C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2354C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2354C9)");
    check_base_class_offset(lv, (S2354C10*), 0, "S2354C9");
    check_field_offset(lv, s2354c9f0, ABISELECT(8,4), "S2354C9.s2354c9f0");
    check_field_offset(lv, s2354c9f1, ABISELECT(32,20), "S2354C9.s2354c9f1");
    check_field_offset(lv, s2354c9f2, ABISELECT(64,52), "S2354C9.s2354c9f2");
    test_class_info(&lv, &cd_S2354C9);
    dp->~S2354C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2354C9(Test_S2354C9, "S2354C9", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2354C9C1Ev();
extern void _ZN7S2354C9D1Ev();
Name_Map name_map_S2354C9[] = {
  NSPAIR(_ZN7S2354C9C1Ev),
  NSPAIR(_ZN7S2354C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2354C10;
extern VTBL_ENTRY _ZTI8S2354C10[];
extern  VTBL_ENTRY _ZTV8S2354C10[];
static Base_Class bases_S2354C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2354C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2354C9[];
extern void _ZN7S2354C9D1Ev();
extern void _ZN7S2354C9D0Ev();
extern void _ZN8S2354C103v21Ev();
extern void _ZN8S2354C103v22Ev();
extern void _ZN8S2354C103v23Ev();
extern void _ZN7S2354C93v24Ev();
extern void _ZN7S2354C93v25Ev();
extern void _ZN7S2354C93v26Ev();
static  VTBL_ENTRY vtc_S2354C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2354C9[0]),
  (VTBL_ENTRY)&_ZN7S2354C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2354C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2354C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2354C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2354C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2354C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2354C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2354C93v26Ev,
};
extern VTBL_ENTRY _ZTI7S2354C9[];
extern  VTBL_ENTRY _ZTV7S2354C9[];
Class_Descriptor cd_S2354C9 = {  "S2354C9", // class name
  bases_S2354C9, 1,
  &(vtc_S2354C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2354C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2354C9),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  S2354C8  : S2354C9 {
  virtual  ~S2354C8(); // _ZN7S2354C8D1Ev
  virtual void  v27(); // _ZN7S2354C83v27Ev
  virtual void  v28(); // _ZN7S2354C83v28Ev
  virtual void  v29(); // _ZN7S2354C83v29Ev
  virtual void  v30(); // _ZN7S2354C83v30Ev
  S2354C8(); // tgen
};
//SIG(-1 S2354C8) C1{ BC2{ BC3{ vd v5 v6 v7} vd v8 v9 v10 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4}


 S2354C8 ::~S2354C8(){ note_dtor("S2354C8", this);}
void  S2354C8 ::v27(){vfunc_called(this, "_ZN7S2354C83v27Ev");}
void  S2354C8 ::v28(){vfunc_called(this, "_ZN7S2354C83v28Ev");}
void  S2354C8 ::v29(){vfunc_called(this, "_ZN7S2354C83v29Ev");}
void  S2354C8 ::v30(){vfunc_called(this, "_ZN7S2354C83v30Ev");}
S2354C8 ::S2354C8(){ note_ctor("S2354C8", this);} // tgen

static void Test_S2354C8()
{
  extern Class_Descriptor cd_S2354C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2354C8, buf);
    S2354C8 *dp, &lv = *(dp=new (buf) S2354C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2354C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2354C8)");
    check_base_class_offset(lv, (S2354C10*)(S2354C9*), 0, "S2354C8");
    check_base_class_offset(lv, (S2354C9*), 0, "S2354C8");
    test_class_info(&lv, &cd_S2354C8);
    dp->~S2354C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2354C8(Test_S2354C8, "S2354C8", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2354C8C1Ev();
extern void _ZN7S2354C8D1Ev();
Name_Map name_map_S2354C8[] = {
  NSPAIR(_ZN7S2354C8C1Ev),
  NSPAIR(_ZN7S2354C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2354C10;
extern VTBL_ENTRY _ZTI8S2354C10[];
extern  VTBL_ENTRY _ZTV8S2354C10[];
extern Class_Descriptor cd_S2354C9;
extern VTBL_ENTRY _ZTI7S2354C9[];
extern  VTBL_ENTRY _ZTV7S2354C9[];
static Base_Class bases_S2354C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2354C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2354C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2354C8[];
extern void _ZN7S2354C8D1Ev();
extern void _ZN7S2354C8D0Ev();
extern void _ZN8S2354C103v21Ev();
extern void _ZN8S2354C103v22Ev();
extern void _ZN8S2354C103v23Ev();
extern void _ZN7S2354C93v24Ev();
extern void _ZN7S2354C93v25Ev();
extern void _ZN7S2354C93v26Ev();
extern void _ZN7S2354C83v27Ev();
extern void _ZN7S2354C83v28Ev();
extern void _ZN7S2354C83v29Ev();
extern void _ZN7S2354C83v30Ev();
static  VTBL_ENTRY vtc_S2354C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2354C8[0]),
  (VTBL_ENTRY)&_ZN7S2354C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2354C8D0Ev,
  (VTBL_ENTRY)&_ZN8S2354C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2354C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2354C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2354C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2354C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2354C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2354C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2354C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2354C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2354C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2354C8[];
extern  VTBL_ENTRY _ZTV7S2354C8[];
Class_Descriptor cd_S2354C8 = {  "S2354C8", // class name
  bases_S2354C8, 2,
  &(vtc_S2354C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2354C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2354C8),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2354C2  : S2354C3 , S2354C8 {
  int s2354c2f0[3];
  char s2354c2f1;
  ::S5166C24 s2354c2f2;
  virtual  ~S2354C2(); // _ZN7S2354C2D1Ev
  virtual void  v31(); // _ZN7S2354C23v31Ev
  virtual void  v32(); // _ZN7S2354C23v32Ev
  virtual void  v33(); // _ZN7S2354C23v33Ev
  virtual void  v34(); // _ZN7S2354C23v34Ev
  virtual void  v35(); // _ZN7S2354C23v35Ev
  virtual void  v36(); // _ZN7S2354C23v36Ev
  S2354C2(); // tgen
};
//SIG(-1 S2354C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd v10 v11 v12} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp Fc Fi} BC7{ BC8{ BC9{ vd v23 v24 v25} vd v26 v27 v28 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m FL[4]} Fc} vd v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 Fi[3] Fc FC13{ BC14{ m Fp Fi FC15{ m} FC16{ m}}}}


 S2354C2 ::~S2354C2(){ note_dtor("S2354C2", this);}
void  S2354C2 ::v31(){vfunc_called(this, "_ZN7S2354C23v31Ev");}
void  S2354C2 ::v32(){vfunc_called(this, "_ZN7S2354C23v32Ev");}
void  S2354C2 ::v33(){vfunc_called(this, "_ZN7S2354C23v33Ev");}
void  S2354C2 ::v34(){vfunc_called(this, "_ZN7S2354C23v34Ev");}
void  S2354C2 ::v35(){vfunc_called(this, "_ZN7S2354C23v35Ev");}
void  S2354C2 ::v36(){vfunc_called(this, "_ZN7S2354C23v36Ev");}
S2354C2 ::S2354C2(){ note_ctor("S2354C2", this);} // tgen

static void Test_S2354C2()
{
  extern Class_Descriptor cd_S2354C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,33)];
    init_test(&cd_S2354C2, buf);
    S2354C2 *dp, &lv = *(dp=new (buf) S2354C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,128), "sizeof(S2354C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2354C2)");
    check_base_class_offset(lv, (S2354C4*)(S2354C3*), 0, "S2354C2");
    check_base_class_offset(lv, (S2354C7*)(S2354C3*), ABISELECT(40,28), "S2354C2");
    check_base_class_offset(lv, (S2354C3*), 0, "S2354C2");
    check_base_class_offset(lv, (S2354C10*)(S2354C9*)(S2354C8*), ABISELECT(64,44), "S2354C2");
    check_base_class_offset(lv, (S2354C9*)(S2354C8*), ABISELECT(64,44), "S2354C2");
    check_base_class_offset(lv, (S2354C8*), ABISELECT(64,44), "S2354C2");
    check_field_offset(lv, s2354c2f0, ABISELECT(132,100), "S2354C2.s2354c2f0");
    check_field_offset(lv, s2354c2f1, ABISELECT(144,112), "S2354C2.s2354c2f1");
    check_field_offset(lv, s2354c2f2, ABISELECT(152,116), "S2354C2.s2354c2f2");
    test_class_info(&lv, &cd_S2354C2);
    dp->~S2354C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2354C2(Test_S2354C2, "S2354C2", ABISELECT(168,128));

#else // __cplusplus

extern void _ZN7S2354C2C1Ev();
extern void _ZN7S2354C2D1Ev();
Name_Map name_map_S2354C2[] = {
  NSPAIR(_ZN7S2354C2C1Ev),
  NSPAIR(_ZN7S2354C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2354C4;
extern VTBL_ENTRY _ZTI7S2354C4[];
extern  VTBL_ENTRY _ZTV7S2354C4[];
extern Class_Descriptor cd_S2354C7;
extern VTBL_ENTRY _ZTI7S2354C7[];
extern  VTBL_ENTRY _ZTV7S2354C7[];
extern Class_Descriptor cd_S2354C3;
extern VTBL_ENTRY _ZTI7S2354C3[];
extern  VTBL_ENTRY _ZTV7S2354C3[];
extern Class_Descriptor cd_S2354C10;
extern VTBL_ENTRY _ZTI8S2354C10[];
extern  VTBL_ENTRY _ZTV8S2354C10[];
extern Class_Descriptor cd_S2354C9;
extern VTBL_ENTRY _ZTI7S2354C9[];
extern  VTBL_ENTRY _ZTV7S2354C9[];
extern Class_Descriptor cd_S2354C8;
extern VTBL_ENTRY _ZTI7S2354C8[];
extern  VTBL_ENTRY _ZTV7S2354C8[];
static Base_Class bases_S2354C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2354C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2354C7,    ABISELECT(40,28), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2354C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2354C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2354C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2354C8,    ABISELECT(64,44), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2354C2[];
extern void _ZN7S2354C2D1Ev();
extern void _ZN7S2354C2D0Ev();
extern void _ZN7S2354C42v5Ev();
extern void _ZN7S2354C42v6Ev();
extern void _ZN7S2354C42v7Ev();
extern void _ZN7S2354C33v11Ev();
extern void _ZN7S2354C33v12Ev();
extern void _ZN7S2354C33v13Ev();
extern void _ZN7S2354C33v14Ev();
extern void _ZN7S2354C33v15Ev();
extern void _ZN7S2354C33v16Ev();
extern void _ZN7S2354C33v17Ev();
extern void _ZN7S2354C33v18Ev();
extern void _ZN7S2354C33v19Ev();
extern void _ZN7S2354C33v20Ev();
extern void _ZN7S2354C23v31Ev();
extern void _ZN7S2354C23v32Ev();
extern void _ZN7S2354C23v33Ev();
extern void _ZN7S2354C23v34Ev();
extern void _ZN7S2354C23v35Ev();
extern void _ZN7S2354C23v36Ev();
extern void ABISELECT(_ZThn40_N7S2354C2D1Ev,_ZThn28_N7S2354C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2354C2D0Ev,_ZThn28_N7S2354C2D0Ev)();
extern void _ZN7S2354C72v8Ev();
extern void _ZN7S2354C72v9Ev();
extern void _ZN7S2354C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2354C2D1Ev,_ZThn44_N7S2354C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S2354C2D0Ev,_ZThn44_N7S2354C2D0Ev)();
extern void _ZN8S2354C103v21Ev();
extern void _ZN8S2354C103v22Ev();
extern void _ZN8S2354C103v23Ev();
extern void _ZN7S2354C93v24Ev();
extern void _ZN7S2354C93v25Ev();
extern void _ZN7S2354C93v26Ev();
extern void _ZN7S2354C83v27Ev();
extern void _ZN7S2354C83v28Ev();
extern void _ZN7S2354C83v29Ev();
extern void _ZN7S2354C83v30Ev();
static  VTBL_ENTRY vtc_S2354C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2354C2[0]),
  (VTBL_ENTRY)&_ZN7S2354C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2354C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2354C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2354C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2354C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2354C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2354C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2354C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2354C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2354C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2354C23v36Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2354C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2354C2D1Ev,_ZThn28_N7S2354C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2354C2D0Ev,_ZThn28_N7S2354C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2354C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2354C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2354C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2354C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2354C2D1Ev,_ZThn44_N7S2354C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2354C2D0Ev,_ZThn44_N7S2354C2D0Ev),
  (VTBL_ENTRY)&_ZN8S2354C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2354C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2354C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2354C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2354C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2354C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2354C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2354C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2354C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2354C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2354C2[];
extern  VTBL_ENTRY _ZTV7S2354C2[];
Class_Descriptor cd_S2354C2 = {  "S2354C2", // class name
  bases_S2354C2, 6,
  &(vtc_S2354C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,128), // object size
  NSPAIRA(_ZTI7S2354C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2354C2),44, //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  S2354C1  : S2354C2 {
  ::S2355C18_nt s2354c1f0;
  ::S2355C19_nt s2354c1f1;
  int s2354c1f2[2];
  virtual  ~S2354C1(); // _ZN7S2354C1D1Ev
  virtual void  v1(); // _ZN7S2354C12v1Ev
  virtual void  v2(); // _ZN7S2354C12v2Ev
  virtual void  v3(); // _ZN7S2354C12v3Ev
  virtual void  v4(); // _ZN7S2354C12v4Ev
  S2354C1(); // tgen
};
//SIG(1 S2354C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd v8 v9 v10} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp Fc Fi} BC8{ BC9{ BC10{ vd v21 v22 v23} vd v24 v25 v26 FC11{ m Fp Fi[2] FC12{ m}} FC13{ m FL[4]} Fc} vd v27 v28 v29 v30} vd v31 v32 v33 v34 v35 v36 Fi[3] Fc FC14{ BC15{ m Fp Fi FC16{ m} FC17{ m}}}} vd v1 v2 v3 v4 FC18{ vd v37 v38 v39 v40 Fp} FC19{ BC20{ vd v42 FC21{ m FC15} Fp[3] Fc} v41 Fp} Fi[2]}


 S2354C1 ::~S2354C1(){ note_dtor("S2354C1", this);}
void  S2354C1 ::v1(){vfunc_called(this, "_ZN7S2354C12v1Ev");}
void  S2354C1 ::v2(){vfunc_called(this, "_ZN7S2354C12v2Ev");}
void  S2354C1 ::v3(){vfunc_called(this, "_ZN7S2354C12v3Ev");}
void  S2354C1 ::v4(){vfunc_called(this, "_ZN7S2354C12v4Ev");}
S2354C1 ::S2354C1(){ note_ctor("S2354C1", this);} // tgen

static void Test_S2354C1()
{
  extern Class_Descriptor cd_S2354C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,46)];
    init_test(&cd_S2354C1, buf);
    S2354C1 *dp, &lv = *(dp=new (buf) S2354C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,180), "sizeof(S2354C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2354C1)");
    check_base_class_offset(lv, (S2354C4*)(S2354C3*)(S2354C2*), 0, "S2354C1");
    check_base_class_offset(lv, (S2354C7*)(S2354C3*)(S2354C2*), ABISELECT(40,28), "S2354C1");
    check_base_class_offset(lv, (S2354C3*)(S2354C2*), 0, "S2354C1");
    check_base_class_offset(lv, (S2354C10*)(S2354C9*)(S2354C8*)(S2354C2*), ABISELECT(64,44), "S2354C1");
    check_base_class_offset(lv, (S2354C9*)(S2354C8*)(S2354C2*), ABISELECT(64,44), "S2354C1");
    check_base_class_offset(lv, (S2354C8*)(S2354C2*), ABISELECT(64,44), "S2354C1");
    check_base_class_offset(lv, (S2354C2*), 0, "S2354C1");
    check_field_offset(lv, s2354c1f0, ABISELECT(168,128), "S2354C1.s2354c1f0");
    check_field_offset(lv, s2354c1f1, ABISELECT(184,136), "S2354C1.s2354c1f1");
    check_field_offset(lv, s2354c1f2, ABISELECT(248,172), "S2354C1.s2354c1f2");
    test_class_info(&lv, &cd_S2354C1);
    dp->~S2354C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2354C1(Test_S2354C1, "S2354C1", ABISELECT(256,180));

#else // __cplusplus

extern void _ZN7S2354C1C1Ev();
extern void _ZN7S2354C1D1Ev();
Name_Map name_map_S2354C1[] = {
  NSPAIR(_ZN7S2354C1C1Ev),
  NSPAIR(_ZN7S2354C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2354C4;
extern VTBL_ENTRY _ZTI7S2354C4[];
extern  VTBL_ENTRY _ZTV7S2354C4[];
extern Class_Descriptor cd_S2354C7;
extern VTBL_ENTRY _ZTI7S2354C7[];
extern  VTBL_ENTRY _ZTV7S2354C7[];
extern Class_Descriptor cd_S2354C3;
extern VTBL_ENTRY _ZTI7S2354C3[];
extern  VTBL_ENTRY _ZTV7S2354C3[];
extern Class_Descriptor cd_S2354C10;
extern VTBL_ENTRY _ZTI8S2354C10[];
extern  VTBL_ENTRY _ZTV8S2354C10[];
extern Class_Descriptor cd_S2354C9;
extern VTBL_ENTRY _ZTI7S2354C9[];
extern  VTBL_ENTRY _ZTV7S2354C9[];
extern Class_Descriptor cd_S2354C8;
extern VTBL_ENTRY _ZTI7S2354C8[];
extern  VTBL_ENTRY _ZTV7S2354C8[];
extern Class_Descriptor cd_S2354C2;
extern VTBL_ENTRY _ZTI7S2354C2[];
extern  VTBL_ENTRY _ZTV7S2354C2[];
static Base_Class bases_S2354C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2354C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2354C7,    ABISELECT(40,28), //bcp->offset
    27, //bcp->virtual_function_table_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_S2354C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2354C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2354C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2354C8,    ABISELECT(64,44), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2354C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2354C1[];
extern void _ZN7S2354C1D1Ev();
extern void _ZN7S2354C1D0Ev();
extern void _ZN7S2354C42v5Ev();
extern void _ZN7S2354C42v6Ev();
extern void _ZN7S2354C42v7Ev();
extern void _ZN7S2354C33v11Ev();
extern void _ZN7S2354C33v12Ev();
extern void _ZN7S2354C33v13Ev();
extern void _ZN7S2354C33v14Ev();
extern void _ZN7S2354C33v15Ev();
extern void _ZN7S2354C33v16Ev();
extern void _ZN7S2354C33v17Ev();
extern void _ZN7S2354C33v18Ev();
extern void _ZN7S2354C33v19Ev();
extern void _ZN7S2354C33v20Ev();
extern void _ZN7S2354C23v31Ev();
extern void _ZN7S2354C23v32Ev();
extern void _ZN7S2354C23v33Ev();
extern void _ZN7S2354C23v34Ev();
extern void _ZN7S2354C23v35Ev();
extern void _ZN7S2354C23v36Ev();
extern void _ZN7S2354C12v1Ev();
extern void _ZN7S2354C12v2Ev();
extern void _ZN7S2354C12v3Ev();
extern void _ZN7S2354C12v4Ev();
extern void ABISELECT(_ZThn40_N7S2354C1D1Ev,_ZThn28_N7S2354C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2354C1D0Ev,_ZThn28_N7S2354C1D0Ev)();
extern void _ZN7S2354C72v8Ev();
extern void _ZN7S2354C72v9Ev();
extern void _ZN7S2354C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2354C1D1Ev,_ZThn44_N7S2354C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S2354C1D0Ev,_ZThn44_N7S2354C1D0Ev)();
extern void _ZN8S2354C103v21Ev();
extern void _ZN8S2354C103v22Ev();
extern void _ZN8S2354C103v23Ev();
extern void _ZN7S2354C93v24Ev();
extern void _ZN7S2354C93v25Ev();
extern void _ZN7S2354C93v26Ev();
extern void _ZN7S2354C83v27Ev();
extern void _ZN7S2354C83v28Ev();
extern void _ZN7S2354C83v29Ev();
extern void _ZN7S2354C83v30Ev();
static  VTBL_ENTRY vtc_S2354C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2354C1[0]),
  (VTBL_ENTRY)&_ZN7S2354C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2354C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2354C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2354C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2354C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2354C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2354C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2354C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2354C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2354C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2354C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2354C23v36Ev,
  (VTBL_ENTRY)&_ZN7S2354C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2354C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2354C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2354C12v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2354C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2354C1D1Ev,_ZThn28_N7S2354C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2354C1D0Ev,_ZThn28_N7S2354C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2354C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2354C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2354C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2354C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2354C1D1Ev,_ZThn44_N7S2354C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2354C1D0Ev,_ZThn44_N7S2354C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2354C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2354C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2354C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2354C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2354C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2354C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2354C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2354C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2354C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2354C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2354C1[];
extern  VTBL_ENTRY _ZTV7S2354C1[];
Class_Descriptor cd_S2354C1 = {  "S2354C1", // class name
  bases_S2354C1, 7,
  &(vtc_S2354C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,180), // object size
  NSPAIRA(_ZTI7S2354C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2354C1),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2357C4  {
  ::S5166C19_nt s2357c4f0;
  int s2357c4f1[2];
  char s2357c4f2;
  virtual  ~S2357C4(); // _ZN7S2357C4D1Ev
  virtual void  v5(); // _ZN7S2357C42v5Ev
  virtual void  v6(); // _ZN7S2357C42v6Ev
  virtual void  v7(); // _ZN7S2357C42v7Ev
  S2357C4(); // tgen
};
//SIG(-1 S2357C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2357C4 ::~S2357C4(){ note_dtor("S2357C4", this);}
void  S2357C4 ::v5(){vfunc_called(this, "_ZN7S2357C42v5Ev");}
void  S2357C4 ::v6(){vfunc_called(this, "_ZN7S2357C42v6Ev");}
void  S2357C4 ::v7(){vfunc_called(this, "_ZN7S2357C42v7Ev");}
S2357C4 ::S2357C4(){ note_ctor("S2357C4", this);} // tgen

static void Test_S2357C4()
{
  extern Class_Descriptor cd_S2357C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2357C4, buf);
    S2357C4 *dp, &lv = *(dp=new (buf) S2357C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2357C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2357C4)");
    check_field_offset(lv, s2357c4f0, ABISELECT(8,4), "S2357C4.s2357c4f0");
    check_field_offset(lv, s2357c4f1, ABISELECT(24,16), "S2357C4.s2357c4f1");
    check_field_offset(lv, s2357c4f2, ABISELECT(32,24), "S2357C4.s2357c4f2");
    test_class_info(&lv, &cd_S2357C4);
    dp->~S2357C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2357C4(Test_S2357C4, "S2357C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2357C4C1Ev();
extern void _ZN7S2357C4D1Ev();
Name_Map name_map_S2357C4[] = {
  NSPAIR(_ZN7S2357C4C1Ev),
  NSPAIR(_ZN7S2357C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2357C4[];
extern void _ZN7S2357C4D1Ev();
extern void _ZN7S2357C4D0Ev();
extern void _ZN7S2357C42v5Ev();
extern void _ZN7S2357C42v6Ev();
extern void _ZN7S2357C42v7Ev();
static  VTBL_ENTRY vtc_S2357C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2357C4[0]),
  (VTBL_ENTRY)&_ZN7S2357C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2357C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2357C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2357C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2357C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S2357C4[];
extern  VTBL_ENTRY _ZTV7S2357C4[];
Class_Descriptor cd_S2357C4 = {  "S2357C4", // class name
  0,0,//no base classes
  &(vtc_S2357C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2357C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2357C4),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  S2357C7  {
  virtual  ~S2357C7(); // _ZN7S2357C7D1Ev
  virtual void  v8(); // _ZN7S2357C72v8Ev
  virtual void  v9(); // _ZN7S2357C72v9Ev
  virtual void  v10(); // _ZN7S2357C73v10Ev
  S2357C7(); // tgen
};
//SIG(-1 S2357C7) C1{ vd v1 v2 v3}


 S2357C7 ::~S2357C7(){ note_dtor("S2357C7", this);}
void  S2357C7 ::v8(){vfunc_called(this, "_ZN7S2357C72v8Ev");}
void  S2357C7 ::v9(){vfunc_called(this, "_ZN7S2357C72v9Ev");}
void  S2357C7 ::v10(){vfunc_called(this, "_ZN7S2357C73v10Ev");}
S2357C7 ::S2357C7(){ note_ctor("S2357C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2357C7C1Ev();
extern void _ZN7S2357C7D1Ev();
Name_Map name_map_S2357C7[] = {
  NSPAIR(_ZN7S2357C7C1Ev),
  NSPAIR(_ZN7S2357C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2357C7[];
extern void _ZN7S2357C7D1Ev();
extern void _ZN7S2357C7D0Ev();
extern void _ZN7S2357C72v8Ev();
extern void _ZN7S2357C72v9Ev();
extern void _ZN7S2357C73v10Ev();
static  VTBL_ENTRY vtc_S2357C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2357C7[0]),
  (VTBL_ENTRY)&_ZN7S2357C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2357C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2357C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2357C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2357C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2357C7[];
extern  VTBL_ENTRY _ZTV7S2357C7[];
Class_Descriptor cd_S2357C7 = {  "S2357C7", // class name
  0,0,//no base classes
  &(vtc_S2357C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2357C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2357C7),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  S2357C3  : S2357C4 , S2357C7 {
  void *s2357c3f0;
  char s2357c3f1;
  int s2357c3f2;
  virtual  ~S2357C3(); // _ZN7S2357C3D1Ev
  virtual void  v11(); // _ZN7S2357C33v11Ev
  virtual void  v12(); // _ZN7S2357C33v12Ev
  virtual void  v13(); // _ZN7S2357C33v13Ev
  virtual void  v14(); // _ZN7S2357C33v14Ev
  virtual void  v15(); // _ZN7S2357C33v15Ev
  virtual void  v16(); // _ZN7S2357C33v16Ev
  virtual void  v17(); // _ZN7S2357C33v17Ev
  virtual void  v18(); // _ZN7S2357C33v18Ev
  virtual void  v19(); // _ZN7S2357C33v19Ev
  virtual void  v20(); // _ZN7S2357C33v20Ev
  S2357C3(); // tgen
};
//SIG(-1 S2357C3) C1{ BC2{ vd v11 v12 v13 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fc Fi}


 S2357C3 ::~S2357C3(){ note_dtor("S2357C3", this);}
void  S2357C3 ::v11(){vfunc_called(this, "_ZN7S2357C33v11Ev");}
void  S2357C3 ::v12(){vfunc_called(this, "_ZN7S2357C33v12Ev");}
void  S2357C3 ::v13(){vfunc_called(this, "_ZN7S2357C33v13Ev");}
void  S2357C3 ::v14(){vfunc_called(this, "_ZN7S2357C33v14Ev");}
void  S2357C3 ::v15(){vfunc_called(this, "_ZN7S2357C33v15Ev");}
void  S2357C3 ::v16(){vfunc_called(this, "_ZN7S2357C33v16Ev");}
void  S2357C3 ::v17(){vfunc_called(this, "_ZN7S2357C33v17Ev");}
void  S2357C3 ::v18(){vfunc_called(this, "_ZN7S2357C33v18Ev");}
void  S2357C3 ::v19(){vfunc_called(this, "_ZN7S2357C33v19Ev");}
void  S2357C3 ::v20(){vfunc_called(this, "_ZN7S2357C33v20Ev");}
S2357C3 ::S2357C3(){ note_ctor("S2357C3", this);} // tgen

static void Test_S2357C3()
{
  extern Class_Descriptor cd_S2357C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S2357C3, buf);
    S2357C3 *dp, &lv = *(dp=new (buf) S2357C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S2357C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2357C3)");
    check_base_class_offset(lv, (S2357C4*), 0, "S2357C3");
    check_base_class_offset(lv, (S2357C7*), ABISELECT(40,28), "S2357C3");
    check_field_offset(lv, s2357c3f0, ABISELECT(48,32), "S2357C3.s2357c3f0");
    check_field_offset(lv, s2357c3f1, ABISELECT(56,36), "S2357C3.s2357c3f1");
    check_field_offset(lv, s2357c3f2, ABISELECT(60,40), "S2357C3.s2357c3f2");
    test_class_info(&lv, &cd_S2357C3);
    dp->~S2357C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2357C3(Test_S2357C3, "S2357C3", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S2357C3C1Ev();
extern void _ZN7S2357C3D1Ev();
Name_Map name_map_S2357C3[] = {
  NSPAIR(_ZN7S2357C3C1Ev),
  NSPAIR(_ZN7S2357C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2357C4;
extern VTBL_ENTRY _ZTI7S2357C4[];
extern  VTBL_ENTRY _ZTV7S2357C4[];
extern Class_Descriptor cd_S2357C7;
extern VTBL_ENTRY _ZTI7S2357C7[];
extern  VTBL_ENTRY _ZTV7S2357C7[];
static Base_Class bases_S2357C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2357C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2357C7,    ABISELECT(40,28), //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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2357C3[];
extern void _ZN7S2357C3D1Ev();
extern void _ZN7S2357C3D0Ev();
extern void _ZN7S2357C42v5Ev();
extern void _ZN7S2357C42v6Ev();
extern void _ZN7S2357C42v7Ev();
extern void _ZN7S2357C33v11Ev();
extern void _ZN7S2357C33v12Ev();
extern void _ZN7S2357C33v13Ev();
extern void _ZN7S2357C33v14Ev();
extern void _ZN7S2357C33v15Ev();
extern void _ZN7S2357C33v16Ev();
extern void _ZN7S2357C33v17Ev();
extern void _ZN7S2357C33v18Ev();
extern void _ZN7S2357C33v19Ev();
extern void _ZN7S2357C33v20Ev();
extern void ABISELECT(_ZThn40_N7S2357C3D1Ev,_ZThn28_N7S2357C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2357C3D0Ev,_ZThn28_N7S2357C3D0Ev)();
extern void _ZN7S2357C72v8Ev();
extern void _ZN7S2357C72v9Ev();
extern void _ZN7S2357C73v10Ev();
static  VTBL_ENTRY vtc_S2357C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2357C3[0]),
  (VTBL_ENTRY)&_ZN7S2357C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2357C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2357C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2357C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2357C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v20Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2357C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2357C3D1Ev,_ZThn28_N7S2357C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2357C3D0Ev,_ZThn28_N7S2357C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2357C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2357C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2357C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2357C3[];
extern  VTBL_ENTRY _ZTV7S2357C3[];
Class_Descriptor cd_S2357C3 = {  "S2357C3", // class name
  bases_S2357C3, 2,
  &(vtc_S2357C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S2357C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2357C3),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  S2357C10  {
  virtual  ~S2357C10(); // _ZN8S2357C10D1Ev
  virtual void  v21(); // _ZN8S2357C103v21Ev
  virtual void  v22(); // _ZN8S2357C103v22Ev
  virtual void  v23(); // _ZN8S2357C103v23Ev
  S2357C10(); // tgen
};
//SIG(-1 S2357C10) C1{ vd v1 v2 v3}


 S2357C10 ::~S2357C10(){ note_dtor("S2357C10", this);}
void  S2357C10 ::v21(){vfunc_called(this, "_ZN8S2357C103v21Ev");}
void  S2357C10 ::v22(){vfunc_called(this, "_ZN8S2357C103v22Ev");}
void  S2357C10 ::v23(){vfunc_called(this, "_ZN8S2357C103v23Ev");}
S2357C10 ::S2357C10(){ note_ctor("S2357C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2357C10C1Ev();
extern void _ZN8S2357C10D1Ev();
Name_Map name_map_S2357C10[] = {
  NSPAIR(_ZN8S2357C10C1Ev),
  NSPAIR(_ZN8S2357C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2357C10[];
extern void _ZN8S2357C10D1Ev();
extern void _ZN8S2357C10D0Ev();
extern void _ZN8S2357C103v21Ev();
extern void _ZN8S2357C103v22Ev();
extern void _ZN8S2357C103v23Ev();
static  VTBL_ENTRY vtc_S2357C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2357C10[0]),
  (VTBL_ENTRY)&_ZN8S2357C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2357C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2357C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2357C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2357C103v23Ev,
};
extern VTBL_ENTRY _ZTI8S2357C10[];
extern  VTBL_ENTRY _ZTV8S2357C10[];
Class_Descriptor cd_S2357C10 = {  "S2357C10", // class name
  0,0,//no base classes
  &(vtc_S2357C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2357C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2357C10),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  S2357C9  : S2357C10 {
  ::S5166C36 s2357c9f0;
  ::S2355C13_nt s2357c9f1;
  char s2357c9f2;
  virtual  ~S2357C9(); // _ZN7S2357C9D1Ev
  virtual void  v24(); // _ZN7S2357C93v24Ev
  virtual void  v25(); // _ZN7S2357C93v25Ev
  virtual void  v26(); // _ZN7S2357C93v26Ev
  S2357C9(); // tgen
};
//SIG(-1 S2357C9) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2357C9 ::~S2357C9(){ note_dtor("S2357C9", this);}
void  S2357C9 ::v24(){vfunc_called(this, "_ZN7S2357C93v24Ev");}
void  S2357C9 ::v25(){vfunc_called(this, "_ZN7S2357C93v25Ev");}
void  S2357C9 ::v26(){vfunc_called(this, "_ZN7S2357C93v26Ev");}
S2357C9 ::S2357C9(){ note_ctor("S2357C9", this);} // tgen

static void Test_S2357C9()
{
  extern Class_Descriptor cd_S2357C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2357C9, buf);
    S2357C9 *dp, &lv = *(dp=new (buf) S2357C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2357C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2357C9)");
    check_base_class_offset(lv, (S2357C10*), 0, "S2357C9");
    check_field_offset(lv, s2357c9f0, ABISELECT(8,4), "S2357C9.s2357c9f0");
    check_field_offset(lv, s2357c9f1, ABISELECT(32,20), "S2357C9.s2357c9f1");
    check_field_offset(lv, s2357c9f2, ABISELECT(64,52), "S2357C9.s2357c9f2");
    test_class_info(&lv, &cd_S2357C9);
    dp->~S2357C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2357C9(Test_S2357C9, "S2357C9", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2357C9C1Ev();
extern void _ZN7S2357C9D1Ev();
Name_Map name_map_S2357C9[] = {
  NSPAIR(_ZN7S2357C9C1Ev),
  NSPAIR(_ZN7S2357C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2357C10;
extern VTBL_ENTRY _ZTI8S2357C10[];
extern  VTBL_ENTRY _ZTV8S2357C10[];
static Base_Class bases_S2357C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2357C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2357C9[];
extern void _ZN7S2357C9D1Ev();
extern void _ZN7S2357C9D0Ev();
extern void _ZN8S2357C103v21Ev();
extern void _ZN8S2357C103v22Ev();
extern void _ZN8S2357C103v23Ev();
extern void _ZN7S2357C93v24Ev();
extern void _ZN7S2357C93v25Ev();
extern void _ZN7S2357C93v26Ev();
static  VTBL_ENTRY vtc_S2357C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2357C9[0]),
  (VTBL_ENTRY)&_ZN7S2357C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2357C9D0Ev,
  (VTBL_ENTRY)&_ZN8S2357C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2357C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2357C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2357C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2357C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2357C93v26Ev,
};
extern VTBL_ENTRY _ZTI7S2357C9[];
extern  VTBL_ENTRY _ZTV7S2357C9[];
Class_Descriptor cd_S2357C9 = {  "S2357C9", // class name
  bases_S2357C9, 1,
  &(vtc_S2357C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2357C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2357C9),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  S2357C8  : S2357C9 {
  virtual  ~S2357C8(); // _ZN7S2357C8D1Ev
  virtual void  v27(); // _ZN7S2357C83v27Ev
  virtual void  v28(); // _ZN7S2357C83v28Ev
  virtual void  v29(); // _ZN7S2357C83v29Ev
  virtual void  v30(); // _ZN7S2357C83v30Ev
  S2357C8(); // tgen
};
//SIG(-1 S2357C8) C1{ BC2{ BC3{ vd v5 v6 v7} vd v8 v9 v10 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4}


 S2357C8 ::~S2357C8(){ note_dtor("S2357C8", this);}
void  S2357C8 ::v27(){vfunc_called(this, "_ZN7S2357C83v27Ev");}
void  S2357C8 ::v28(){vfunc_called(this, "_ZN7S2357C83v28Ev");}
void  S2357C8 ::v29(){vfunc_called(this, "_ZN7S2357C83v29Ev");}
void  S2357C8 ::v30(){vfunc_called(this, "_ZN7S2357C83v30Ev");}
S2357C8 ::S2357C8(){ note_ctor("S2357C8", this);} // tgen

static void Test_S2357C8()
{
  extern Class_Descriptor cd_S2357C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2357C8, buf);
    S2357C8 *dp, &lv = *(dp=new (buf) S2357C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2357C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2357C8)");
    check_base_class_offset(lv, (S2357C10*)(S2357C9*), 0, "S2357C8");
    check_base_class_offset(lv, (S2357C9*), 0, "S2357C8");
    test_class_info(&lv, &cd_S2357C8);
    dp->~S2357C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2357C8(Test_S2357C8, "S2357C8", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2357C8C1Ev();
extern void _ZN7S2357C8D1Ev();
Name_Map name_map_S2357C8[] = {
  NSPAIR(_ZN7S2357C8C1Ev),
  NSPAIR(_ZN7S2357C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2357C10;
extern VTBL_ENTRY _ZTI8S2357C10[];
extern  VTBL_ENTRY _ZTV8S2357C10[];
extern Class_Descriptor cd_S2357C9;
extern VTBL_ENTRY _ZTI7S2357C9[];
extern  VTBL_ENTRY _ZTV7S2357C9[];
static Base_Class bases_S2357C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2357C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2357C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2357C8[];
extern void _ZN7S2357C8D1Ev();
extern void _ZN7S2357C8D0Ev();
extern void _ZN8S2357C103v21Ev();
extern void _ZN8S2357C103v22Ev();
extern void _ZN8S2357C103v23Ev();
extern void _ZN7S2357C93v24Ev();
extern void _ZN7S2357C93v25Ev();
extern void _ZN7S2357C93v26Ev();
extern void _ZN7S2357C83v27Ev();
extern void _ZN7S2357C83v28Ev();
extern void _ZN7S2357C83v29Ev();
extern void _ZN7S2357C83v30Ev();
static  VTBL_ENTRY vtc_S2357C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2357C8[0]),
  (VTBL_ENTRY)&_ZN7S2357C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2357C8D0Ev,
  (VTBL_ENTRY)&_ZN8S2357C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2357C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2357C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2357C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2357C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2357C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2357C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2357C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2357C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2357C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2357C8[];
extern  VTBL_ENTRY _ZTV7S2357C8[];
Class_Descriptor cd_S2357C8 = {  "S2357C8", // class name
  bases_S2357C8, 2,
  &(vtc_S2357C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2357C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2357C8),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2357C2  : S2357C3 , S2357C8 {
  int s2357c2f0[3];
  char s2357c2f1;
  ::S5166C24 s2357c2f2;
  virtual  ~S2357C2(); // _ZN7S2357C2D1Ev
  virtual void  v31(); // _ZN7S2357C23v31Ev
  virtual void  v32(); // _ZN7S2357C23v32Ev
  virtual void  v33(); // _ZN7S2357C23v33Ev
  virtual void  v34(); // _ZN7S2357C23v34Ev
  virtual void  v35(); // _ZN7S2357C23v35Ev
  virtual void  v36(); // _ZN7S2357C23v36Ev
  S2357C2(); // tgen
};
//SIG(-1 S2357C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd v10 v11 v12} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp Fc Fi} BC7{ BC8{ BC9{ vd v23 v24 v25} vd v26 v27 v28 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m FL[4]} Fc} vd v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 Fi[3] Fc FC13{ BC14{ m Fp Fi FC15{ m} FC16{ m}}}}


 S2357C2 ::~S2357C2(){ note_dtor("S2357C2", this);}
void  S2357C2 ::v31(){vfunc_called(this, "_ZN7S2357C23v31Ev");}
void  S2357C2 ::v32(){vfunc_called(this, "_ZN7S2357C23v32Ev");}
void  S2357C2 ::v33(){vfunc_called(this, "_ZN7S2357C23v33Ev");}
void  S2357C2 ::v34(){vfunc_called(this, "_ZN7S2357C23v34Ev");}
void  S2357C2 ::v35(){vfunc_called(this, "_ZN7S2357C23v35Ev");}
void  S2357C2 ::v36(){vfunc_called(this, "_ZN7S2357C23v36Ev");}
S2357C2 ::S2357C2(){ note_ctor("S2357C2", this);} // tgen

static void Test_S2357C2()
{
  extern Class_Descriptor cd_S2357C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,33)];
    init_test(&cd_S2357C2, buf);
    S2357C2 *dp, &lv = *(dp=new (buf) S2357C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,128), "sizeof(S2357C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2357C2)");
    check_base_class_offset(lv, (S2357C4*)(S2357C3*), 0, "S2357C2");
    check_base_class_offset(lv, (S2357C7*)(S2357C3*), ABISELECT(40,28), "S2357C2");
    check_base_class_offset(lv, (S2357C3*), 0, "S2357C2");
    check_base_class_offset(lv, (S2357C10*)(S2357C9*)(S2357C8*), ABISELECT(64,44), "S2357C2");
    check_base_class_offset(lv, (S2357C9*)(S2357C8*), ABISELECT(64,44), "S2357C2");
    check_base_class_offset(lv, (S2357C8*), ABISELECT(64,44), "S2357C2");
    check_field_offset(lv, s2357c2f0, ABISELECT(132,100), "S2357C2.s2357c2f0");
    check_field_offset(lv, s2357c2f1, ABISELECT(144,112), "S2357C2.s2357c2f1");
    check_field_offset(lv, s2357c2f2, ABISELECT(152,116), "S2357C2.s2357c2f2");
    test_class_info(&lv, &cd_S2357C2);
    dp->~S2357C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2357C2(Test_S2357C2, "S2357C2", ABISELECT(168,128));

#else // __cplusplus

extern void _ZN7S2357C2C1Ev();
extern void _ZN7S2357C2D1Ev();
Name_Map name_map_S2357C2[] = {
  NSPAIR(_ZN7S2357C2C1Ev),
  NSPAIR(_ZN7S2357C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2357C4;
extern VTBL_ENTRY _ZTI7S2357C4[];
extern  VTBL_ENTRY _ZTV7S2357C4[];
extern Class_Descriptor cd_S2357C7;
extern VTBL_ENTRY _ZTI7S2357C7[];
extern  VTBL_ENTRY _ZTV7S2357C7[];
extern Class_Descriptor cd_S2357C3;
extern VTBL_ENTRY _ZTI7S2357C3[];
extern  VTBL_ENTRY _ZTV7S2357C3[];
extern Class_Descriptor cd_S2357C10;
extern VTBL_ENTRY _ZTI8S2357C10[];
extern  VTBL_ENTRY _ZTV8S2357C10[];
extern Class_Descriptor cd_S2357C9;
extern VTBL_ENTRY _ZTI7S2357C9[];
extern  VTBL_ENTRY _ZTV7S2357C9[];
extern Class_Descriptor cd_S2357C8;
extern VTBL_ENTRY _ZTI7S2357C8[];
extern  VTBL_ENTRY _ZTV7S2357C8[];
static Base_Class bases_S2357C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2357C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2357C7,    ABISELECT(40,28), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2357C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2357C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2357C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2357C8,    ABISELECT(64,44), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2357C2[];
extern void _ZN7S2357C2D1Ev();
extern void _ZN7S2357C2D0Ev();
extern void _ZN7S2357C42v5Ev();
extern void _ZN7S2357C42v6Ev();
extern void _ZN7S2357C42v7Ev();
extern void _ZN7S2357C33v11Ev();
extern void _ZN7S2357C33v12Ev();
extern void _ZN7S2357C33v13Ev();
extern void _ZN7S2357C33v14Ev();
extern void _ZN7S2357C33v15Ev();
extern void _ZN7S2357C33v16Ev();
extern void _ZN7S2357C33v17Ev();
extern void _ZN7S2357C33v18Ev();
extern void _ZN7S2357C33v19Ev();
extern void _ZN7S2357C33v20Ev();
extern void _ZN7S2357C23v31Ev();
extern void _ZN7S2357C23v32Ev();
extern void _ZN7S2357C23v33Ev();
extern void _ZN7S2357C23v34Ev();
extern void _ZN7S2357C23v35Ev();
extern void _ZN7S2357C23v36Ev();
extern void ABISELECT(_ZThn40_N7S2357C2D1Ev,_ZThn28_N7S2357C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S2357C2D0Ev,_ZThn28_N7S2357C2D0Ev)();
extern void _ZN7S2357C72v8Ev();
extern void _ZN7S2357C72v9Ev();
extern void _ZN7S2357C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2357C2D1Ev,_ZThn44_N7S2357C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S2357C2D0Ev,_ZThn44_N7S2357C2D0Ev)();
extern void _ZN8S2357C103v21Ev();
extern void _ZN8S2357C103v22Ev();
extern void _ZN8S2357C103v23Ev();
extern void _ZN7S2357C93v24Ev();
extern void _ZN7S2357C93v25Ev();
extern void _ZN7S2357C93v26Ev();
extern void _ZN7S2357C83v27Ev();
extern void _ZN7S2357C83v28Ev();
extern void _ZN7S2357C83v29Ev();
extern void _ZN7S2357C83v30Ev();
static  VTBL_ENTRY vtc_S2357C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2357C2[0]),
  (VTBL_ENTRY)&_ZN7S2357C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2357C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2357C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2357C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2357C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2357C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2357C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2357C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2357C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2357C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2357C23v36Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2357C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2357C2D1Ev,_ZThn28_N7S2357C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2357C2D0Ev,_ZThn28_N7S2357C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2357C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2357C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2357C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2357C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2357C2D1Ev,_ZThn44_N7S2357C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2357C2D0Ev,_ZThn44_N7S2357C2D0Ev),
  (VTBL_ENTRY)&_ZN8S2357C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2357C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2357C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2357C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2357C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2357C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2357C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2357C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2357C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2357C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2357C2[];
extern  VTBL_ENTRY _ZTV7S2357C2[];
Class_Descriptor cd_S2357C2 = {  "S2357C2", // class name
  bases_S2357C2, 6,
  &(vtc_S2357C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,128), // object size
  NSPAIRA(_ZTI7S2357C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2357C2),44, //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  S2357C1  : S2357C2 {
  ::S2355C18_nt s2357c1f0;
  ::S2355C19_nt s2357c1f1;
  int s2357c1f2;
  virtual  ~S2357C1(); // _ZN7S2357C1D1Ev
  virtual void  v1(); // _ZN7S2357C12v1Ev
  virtual void  v2(); // _ZN7S2357C12v2Ev
  virtual void  v3(); // _ZN7S2357C12v3Ev
  virtual void  v4(); // _ZN7S2357C12v4Ev
  S2357C1(); // tgen
};
//SIG(1 S2357C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd v8 v9 v10} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp Fc Fi} BC8{ BC9{ BC10{ vd v21 v22 v23} vd v24 v25 v26 FC11{ m Fp Fi[2] FC12{ m}} FC13{ m FL[4]} Fc} vd v27 v28 v29 v30} vd v31 v32 v33 v34 v35 v36 Fi[3] Fc FC14{ BC15{ m Fp Fi FC16{ m} FC17{ m}}}} vd v1 v2 v3 v4 FC18{ vd v37 v38 v39 v40 Fp} FC19{ BC20{ vd v42 FC21{ m FC15} Fp[3] Fc} v41 Fp} Fi}


 S2357C1 ::~S2357C1(){ note_dtor("S2357C1", this);}
void  S2357C1 ::v1(){vfunc_called(this, "_ZN7S2357C12v1Ev");}
void  S2357C1 ::v2(){vfunc_called(this, "_ZN7S2357C12v2Ev");}
void  S2357C1 ::v3(){vfunc_called(this, "_ZN7S2357C12v3Ev");}
void  S2357C1 ::v4(){vfunc_called(this, "_ZN7S2357C12v4Ev");}
S2357C1 ::S2357C1(){ note_ctor("S2357C1", this);} // tgen

static void Test_S2357C1()
{
  extern Class_Descriptor cd_S2357C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,45)];
    init_test(&cd_S2357C1, buf);
    S2357C1 *dp, &lv = *(dp=new (buf) S2357C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,176), "sizeof(S2357C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2357C1)");
    check_base_class_offset(lv, (S2357C4*)(S2357C3*)(S2357C2*), 0, "S2357C1");
    check_base_class_offset(lv, (S2357C7*)(S2357C3*)(S2357C2*), ABISELECT(40,28), "S2357C1");
    check_base_class_offset(lv, (S2357C3*)(S2357C2*), 0, "S2357C1");
    check_base_class_offset(lv, (S2357C10*)(S2357C9*)(S2357C8*)(S2357C2*), ABISELECT(64,44), "S2357C1");
    check_base_class_offset(lv, (S2357C9*)(S2357C8*)(S2357C2*), ABISELECT(64,44), "S2357C1");
    check_base_class_offset(lv, (S2357C8*)(S2357C2*), ABISELECT(64,44), "S2357C1");
    check_base_class_offset(lv, (S2357C2*), 0, "S2357C1");
    check_field_offset(lv, s2357c1f0, ABISELECT(168,128), "S2357C1.s2357c1f0");
    check_field_offset(lv, s2357c1f1, ABISELECT(184,136), "S2357C1.s2357c1f1");
    check_field_offset(lv, s2357c1f2, ABISELECT(248,172), "S2357C1.s2357c1f2");
    test_class_info(&lv, &cd_S2357C1);
    dp->~S2357C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2357C1(Test_S2357C1, "S2357C1", ABISELECT(256,176));

#else // __cplusplus

extern void _ZN7S2357C1C1Ev();
extern void _ZN7S2357C1D1Ev();
Name_Map name_map_S2357C1[] = {
  NSPAIR(_ZN7S2357C1C1Ev),
  NSPAIR(_ZN7S2357C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2357C4;
extern VTBL_ENTRY _ZTI7S2357C4[];
extern  VTBL_ENTRY _ZTV7S2357C4[];
extern Class_Descriptor cd_S2357C7;
extern VTBL_ENTRY _ZTI7S2357C7[];
extern  VTBL_ENTRY _ZTV7S2357C7[];
extern Class_Descriptor cd_S2357C3;
extern VTBL_ENTRY _ZTI7S2357C3[];
extern  VTBL_ENTRY _ZTV7S2357C3[];
extern Class_Descriptor cd_S2357C10;
extern VTBL_ENTRY _ZTI8S2357C10[];
extern  VTBL_ENTRY _ZTV8S2357C10[];
extern Class_Descriptor cd_S2357C9;
extern VTBL_ENTRY _ZTI7S2357C9[];
extern  VTBL_ENTRY _ZTV7S2357C9[];
extern Class_Descriptor cd_S2357C8;
extern VTBL_ENTRY _ZTI7S2357C8[];
extern  VTBL_ENTRY _ZTV7S2357C8[];
extern Class_Descriptor cd_S2357C2;
extern VTBL_ENTRY _ZTI7S2357C2[];
extern  VTBL_ENTRY _ZTV7S2357C2[];
static Base_Class bases_S2357C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2357C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2357C7,    ABISELECT(40,28), //bcp->offset
    27, //bcp->virtual_function_table_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_S2357C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2357C10,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2357C9,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2357C8,    ABISELECT(64,44), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2357C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2357C1[];
extern void _ZN7S2357C1D1Ev();
extern void _ZN7S2357C1D0Ev();
extern void _ZN7S2357C42v5Ev();
extern void _ZN7S2357C42v6Ev();
extern void _ZN7S2357C42v7Ev();
extern void _ZN7S2357C33v11Ev();
extern void _ZN7S2357C33v12Ev();
extern void _ZN7S2357C33v13Ev();
extern void _ZN7S2357C33v14Ev();
extern void _ZN7S2357C33v15Ev();
extern void _ZN7S2357C33v16Ev();
extern void _ZN7S2357C33v17Ev();
extern void _ZN7S2357C33v18Ev();
extern void _ZN7S2357C33v19Ev();
extern void _ZN7S2357C33v20Ev();
extern void _ZN7S2357C23v31Ev();
extern void _ZN7S2357C23v32Ev();
extern void _ZN7S2357C23v33Ev();
extern void _ZN7S2357C23v34Ev();
extern void _ZN7S2357C23v35Ev();
extern void _ZN7S2357C23v36Ev();
extern void _ZN7S2357C12v1Ev();
extern void _ZN7S2357C12v2Ev();
extern void _ZN7S2357C12v3Ev();
extern void _ZN7S2357C12v4Ev();
extern void ABISELECT(_ZThn40_N7S2357C1D1Ev,_ZThn28_N7S2357C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2357C1D0Ev,_ZThn28_N7S2357C1D0Ev)();
extern void _ZN7S2357C72v8Ev();
extern void _ZN7S2357C72v9Ev();
extern void _ZN7S2357C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2357C1D1Ev,_ZThn44_N7S2357C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S2357C1D0Ev,_ZThn44_N7S2357C1D0Ev)();
extern void _ZN8S2357C103v21Ev();
extern void _ZN8S2357C103v22Ev();
extern void _ZN8S2357C103v23Ev();
extern void _ZN7S2357C93v24Ev();
extern void _ZN7S2357C93v25Ev();
extern void _ZN7S2357C93v26Ev();
extern void _ZN7S2357C83v27Ev();
extern void _ZN7S2357C83v28Ev();
extern void _ZN7S2357C83v29Ev();
extern void _ZN7S2357C83v30Ev();
static  VTBL_ENTRY vtc_S2357C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2357C1[0]),
  (VTBL_ENTRY)&_ZN7S2357C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2357C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2357C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2357C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2357C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2357C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2357C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2357C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2357C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2357C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2357C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2357C23v36Ev,
  (VTBL_ENTRY)&_ZN7S2357C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2357C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2357C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2357C12v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2357C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2357C1D1Ev,_ZThn28_N7S2357C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2357C1D0Ev,_ZThn28_N7S2357C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2357C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2357C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2357C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2357C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2357C1D1Ev,_ZThn44_N7S2357C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2357C1D0Ev,_ZThn44_N7S2357C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2357C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2357C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2357C103v23Ev,
  (VTBL_ENTRY)&_ZN7S2357C93v24Ev,
  (VTBL_ENTRY)&_ZN7S2357C93v25Ev,
  (VTBL_ENTRY)&_ZN7S2357C93v26Ev,
  (VTBL_ENTRY)&_ZN7S2357C83v27Ev,
  (VTBL_ENTRY)&_ZN7S2357C83v28Ev,
  (VTBL_ENTRY)&_ZN7S2357C83v29Ev,
  (VTBL_ENTRY)&_ZN7S2357C83v30Ev,
};
extern VTBL_ENTRY _ZTI7S2357C1[];
extern  VTBL_ENTRY _ZTV7S2357C1[];
Class_Descriptor cd_S2357C1 = {  "S2357C1", // class name
  bases_S2357C1, 7,
  &(vtc_S2357C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,176), // object size
  NSPAIRA(_ZTI7S2357C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2357C1),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21198C5  : S19917C5 {
  int s21198c5f0;
  void *s21198c5f1[4];
  long double s21198c5f2[5];
  void *s21198c5f3[2];
  ::S19917C5 s21198c5f4;
  long s21198c5f5[3];
  virtual  ~S21198C5(); // _ZN8S21198C5D1Ev
  virtual void  v6(); // _ZN8S21198C52v6Ev
  virtual void  v7(); // _ZN8S21198C52v7Ev
  S21198C5(); // tgen
};
//SIG(-1 S21198C5) C1{ BC2{ vd m Fp FD Fi Fp} vd v1 v2 Fi Fp[4] FD[5] Fp[2] FC2 Fl[3]}


 S21198C5 ::~S21198C5(){ note_dtor("S21198C5", this);}
void  S21198C5 ::v6(){vfunc_called(this, "_ZN8S21198C52v6Ev");}
void  S21198C5 ::v7(){vfunc_called(this, "_ZN8S21198C52v7Ev");}
S21198C5 ::S21198C5(){ note_ctor("S21198C5", this);} // tgen

static void Test_S21198C5()
{
  extern Class_Descriptor cd_S21198C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,40)];
    init_test(&cd_S21198C5, buf);
    S21198C5 *dp, &lv = *(dp=new (buf) S21198C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,156), "sizeof(S21198C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21198C5)");
    check_base_class_offset(lv, (S19917C5*), 0, "S21198C5");
    check_field_offset(lv, s21198c5f0, ABISELECT(48,28), "S21198C5.s21198c5f0");
    check_field_offset(lv, s21198c5f1, ABISELECT(56,32), "S21198C5.s21198c5f1");
    check_field_offset(lv, s21198c5f2, ABISELECT(96,48), "S21198C5.s21198c5f2");
    check_field_offset(lv, s21198c5f3, ABISELECT(176,108), "S21198C5.s21198c5f3");
    check_field_offset(lv, s21198c5f4, ABISELECT(192,116), "S21198C5.s21198c5f4");
    check_field_offset(lv, s21198c5f5, ABISELECT(240,144), "S21198C5.s21198c5f5");
    test_class_info(&lv, &cd_S21198C5);
    dp->~S21198C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21198C5(Test_S21198C5, "S21198C5", ABISELECT(272,156));

#else // __cplusplus

extern void _ZN8S21198C5C1Ev();
extern void _ZN8S21198C5D1Ev();
Name_Map name_map_S21198C5[] = {
  NSPAIR(_ZN8S21198C5C1Ev),
  NSPAIR(_ZN8S21198C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
static Base_Class bases_S21198C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S21198C5[];
extern void _ZN8S21198C5D1Ev();
extern void _ZN8S21198C5D0Ev();
extern void _ZN8S21198C52v6Ev();
extern void _ZN8S21198C52v7Ev();
static  VTBL_ENTRY vtc_S21198C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21198C5[0]),
  (VTBL_ENTRY)&_ZN8S21198C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21198C5D0Ev,
  (VTBL_ENTRY)&_ZN8S21198C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21198C52v7Ev,
};
extern VTBL_ENTRY _ZTI8S21198C5[];
extern  VTBL_ENTRY _ZTV8S21198C5[];
Class_Descriptor cd_S21198C5 = {  "S21198C5", // class name
  bases_S21198C5, 1,
  &(vtc_S21198C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,156), // object size
  NSPAIRA(_ZTI8S21198C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S21198C5),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  S21198C4  : S19917C5 {
  __tsi64 s21198c4f0[2];
  ::S19917C5 s21198c4f1;
  int s21198c4f2[3];
  void *s21198c4f3[4];
  ::S21198C5 s21198c4f4;
  char s21198c4f5:5;
  virtual void  v2(); // _ZN8S21198C42v2Ev
  virtual void  v3(); // _ZN8S21198C42v3Ev
  ~S21198C4(); // tgen
  S21198C4(); // tgen
};
//SIG(-1 S21198C4) C1{ BC2{ vd m Fp FD Fi Fp} v1 v2 FL[2] FC2 Fi[3] Fp[4] FC3{ BC2 vd v3 v4 Fi Fp[4] FD[5] Fp[2] FC2 Fl[3]} Fc:5}


void  S21198C4 ::v2(){vfunc_called(this, "_ZN8S21198C42v2Ev");}
void  S21198C4 ::v3(){vfunc_called(this, "_ZN8S21198C42v3Ev");}
S21198C4 ::~S21198C4(){ note_dtor("S21198C4", this);} // tgen
S21198C4 ::S21198C4(){ note_ctor("S21198C4", this);} // tgen

static void Test_S21198C4()
{
  extern Class_Descriptor cd_S21198C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(29,66)];
    init_test(&cd_S21198C4, buf);
    S21198C4 *dp, &lv = *(dp=new (buf) S21198C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,260), "sizeof(S21198C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21198C4)");
    check_base_class_offset(lv, (S19917C5*), 0, "S21198C4");
    check_field_offset(lv, s21198c4f0, ABISELECT(48,28), "S21198C4.s21198c4f0");
    check_field_offset(lv, s21198c4f1, ABISELECT(64,44), "S21198C4.s21198c4f1");
    check_field_offset(lv, s21198c4f2, ABISELECT(112,72), "S21198C4.s21198c4f2");
    check_field_offset(lv, s21198c4f3, ABISELECT(128,84), "S21198C4.s21198c4f3");
    check_field_offset(lv, s21198c4f4, ABISELECT(160,100), "S21198C4.s21198c4f4");
    set_bf_and_test(lv, s21198c4f5, ABISELECT(432,256), 0, 5, 1, "S21198C4");
    set_bf_and_test(lv, s21198c4f5, ABISELECT(432,256), 0, 5, hide_sll(1LL<<4), "S21198C4");
    test_class_info(&lv, &cd_S21198C4);
    dp->~S21198C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21198C4(Test_S21198C4, "S21198C4", ABISELECT(448,260));

#else // __cplusplus

extern void _ZN8S21198C4C1Ev();
extern void _ZN8S21198C4D1Ev();
Name_Map name_map_S21198C4[] = {
  NSPAIR(_ZN8S21198C4C1Ev),
  NSPAIR(_ZN8S21198C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
static Base_Class bases_S21198C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S21198C4[];
extern void _ZN8S21198C4D1Ev();
extern void _ZN8S21198C4D0Ev();
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
static  VTBL_ENTRY vtc_S21198C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21198C4[0]),
  (VTBL_ENTRY)&_ZN8S21198C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21198C4D0Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
};
extern VTBL_ENTRY _ZTI8S21198C4[];
extern  VTBL_ENTRY _ZTV8S21198C4[];
Class_Descriptor cd_S21198C4 = {  "S21198C4", // class name
  bases_S21198C4, 1,
  &(vtc_S21198C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,260), // object size
  NSPAIRA(_ZTI8S21198C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S21198C4),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  S21198C3  : virtual S21198C4 , virtual S19917C5 , S19917C3 {
  ::S19917C12_nt s21198c3f0;
  void *s21198c3f1;
  long double s21198c3f2[3];
  ::S19917C3 s21198c3f3;
  ::S21198C5 s21198c3f4;
  ~S21198C3(); // tgen
  S21198C3(); // tgen
};
//SIG(-1 S21198C3) C1{ VBC2{ BC3{ vd m Fp FD Fi Fp} v1 v2 FL[2] FC3 Fi[3] Fp[4] FC4{ BC3 vd v5 v6 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} Fc:5} VBC3 BC5{ vd m FC6{ BC3 vd v3 v4 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} FD[3] Fp} FC7{} Fp FD[3] FC5 FC4}


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

static void Test_S21198C3()
{
  extern Class_Descriptor cd_S21198C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(97,223)];
    init_test(&cd_S21198C3, buf);
    S21198C3 *dp, &lv = *(dp=new (buf) S21198C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1536,888), "sizeof(S21198C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21198C3)");
    check_base_class_offset(lv, (S19917C5*)(S21198C4*), ABISELECT(1040,600), "S21198C3");
    check_base_class_offset(lv, (S21198C4*), ABISELECT(1040,600), "S21198C3");
    /*is_ambiguous_... S21198C3::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*), ABISELECT(1488,860), "S21198C3");
    check_base_class_offset(lv, (S19917C3*), 0, "S21198C3");
    check_field_offset(lv, s21198c3f0, ABISELECT(344,200), "S21198C3.s21198c3f0");
    check_field_offset(lv, s21198c3f1, ABISELECT(352,204), "S21198C3.s21198c3f1");
    check_field_offset(lv, s21198c3f2, ABISELECT(368,208), "S21198C3.s21198c3f2");
    check_field_offset(lv, s21198c3f3, ABISELECT(416,244), "S21198C3.s21198c3f3");
    check_field_offset(lv, s21198c3f4, ABISELECT(768,444), "S21198C3.s21198c3f4");
    test_class_info(&lv, &cd_S21198C3);
    dp->~S21198C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21198C3(Test_S21198C3, "S21198C3", ABISELECT(1536,888));

#else // __cplusplus

extern void _ZN8S21198C3C1Ev();
extern void _ZN8S21198C3D1Ev();
Name_Map name_map_S21198C3[] = {
  NSPAIR(_ZN8S21198C3C1Ev),
  NSPAIR(_ZN8S21198C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21198C4;
extern VTBL_ENTRY _ZTI8S21198C4[];
extern  VTBL_ENTRY _ZTV8S21198C4[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
static Base_Class bases_S21198C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    ABISELECT(1040,600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S21198C4,    ABISELECT(1040,600), //bcp->offset
    6, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C5,    ABISELECT(1488,860), //bcp->offset
    15, //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},
  {&cd_S19917C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S21198C3[];
extern void _ZN8S21198C3D1Ev();
extern void _ZN8S21198C3D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21198C3D1Ev,_ZTv0_n12_N8S21198C3D1Ev)();
extern void ABISELECT(_ZThn1040_N8S21198C3D1Ev,_ZThn600_N8S21198C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C3D0Ev,_ZTv0_n12_N8S21198C3D0Ev)();
extern void ABISELECT(_ZThn1040_N8S21198C3D0Ev,_ZThn600_N8S21198C3D0Ev)() __attribute__((weak));
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21198C3D1Ev,_ZTv0_n12_N8S21198C3D1Ev)();
extern void ABISELECT(_ZThn1488_N8S21198C3D1Ev,_ZThn860_N8S21198C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C3D0Ev,_ZTv0_n12_N8S21198C3D0Ev)();
extern void ABISELECT(_ZThn1488_N8S21198C3D0Ev,_ZThn860_N8S21198C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21198C3[] = {
  ABISELECT(1488,860),
  ABISELECT(1040,600),
  0,
  (VTBL_ENTRY)&(_ZTI8S21198C3[0]),
  (VTBL_ENTRY)&_ZN8S21198C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21198C3D0Ev,
  0,
  0,
  ABISELECT(-1040,-600),
  ABISELECT(-1040,-600),
  (VTBL_ENTRY)&(_ZTI8S21198C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C3D1Ev,_ZTv0_n12_N8S21198C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C3D0Ev,_ZTv0_n12_N8S21198C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
  ABISELECT(-1488,-860),
  ABISELECT(-1488,-860),
  (VTBL_ENTRY)&(_ZTI8S21198C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C3D1Ev,_ZTv0_n12_N8S21198C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C3D0Ev,_ZTv0_n12_N8S21198C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S21198C3[];
static  VTT_ENTRY vtt_S21198C3[] = {
  {&(_ZTV8S21198C3[4]),  4,20},
  {&(_ZTV8S21198C3[11]),  11,20},
  {&(_ZTV8S21198C3[18]),  18,20},
};
extern VTBL_ENTRY _ZTI8S21198C3[];
extern  VTBL_ENTRY _ZTV8S21198C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21198C3[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21198C3D0Ev,_ZTv0_n12_N8S21198C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N8S21198C3D0Ev,_ZThn860_N8S21198C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1040_N8S21198C3D0Ev,_ZThn600_N8S21198C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21198C3D1Ev,_ZTv0_n12_N8S21198C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N8S21198C3D1Ev,_ZThn860_N8S21198C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1040_N8S21198C3D1Ev,_ZThn600_N8S21198C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21198C3 = {  "S21198C3", // class name
  bases_S21198C3, 4,
  &(vtc_S21198C3[0]), // expected_vtbl_contents
  &(vtt_S21198C3[0]), // expected_vtt_contents
  ABISELECT(1536,888), // object size
  NSPAIRA(_ZTI8S21198C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21198C3),20, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21198C3),3, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21198C8  : virtual S21198C4 , S19917C5 {
  int s21198c8f0;
  virtual  ~S21198C8(); // _ZN8S21198C8D2Ev
  virtual void  v4(); // _ZN8S21198C82v4Ev
  S21198C8(); // tgen
};
//SIG(-1 S21198C8) C1{ VBC2{ BC3{ vd m Fp FD Fi Fp} v2 v3 FL[2] FC3 Fi[3] Fp[4] FC4{ BC3 vd v4 v5 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} Fc:5} BC3 vd v1 Fi}


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

static void Test_S21198C8()
{
  extern Class_Descriptor cd_S21198C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,74)];
    init_test(&cd_S21198C8, buf);
    S21198C8 *dp, &lv = *(dp=new (buf) S21198C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,292), "sizeof(S21198C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21198C8)");
    check_base_class_offset(lv, (S19917C5*)(S21198C4*), ABISELECT(64,32), "S21198C8");
    check_base_class_offset(lv, (S21198C4*), ABISELECT(64,32), "S21198C8");
    /*is_ambiguous_... S21198C8::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*), 0, "S21198C8");
    check_field_offset(lv, s21198c8f0, ABISELECT(48,28), "S21198C8.s21198c8f0");
    test_class_info(&lv, &cd_S21198C8);
    dp->~S21198C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21198C8(Test_S21198C8, "S21198C8", ABISELECT(512,292));

#else // __cplusplus

extern void _ZN8S21198C8C1Ev();
extern void _ZN8S21198C8D2Ev();
Name_Map name_map_S21198C8[] = {
  NSPAIR(_ZN8S21198C8C1Ev),
  NSPAIR(_ZN8S21198C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21198C4;
extern VTBL_ENTRY _ZTI8S21198C4[];
extern  VTBL_ENTRY _ZTV8S21198C4[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
static Base_Class bases_S21198C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    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
    1, //immediately_derived
  0, 0},
  {&cd_S21198C4,    ABISELECT(64,32), //bcp->offset
    6, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S21198C8[];
extern void _ZN8S21198C8D1Ev();
extern void _ZN8S21198C8D0Ev();
extern void _ZN8S21198C82v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21198C8D1Ev,_ZThn32_N8S21198C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S21198C8D0Ev,_ZThn32_N8S21198C8D0Ev)() __attribute__((weak));
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
static  VTBL_ENTRY vtc_S21198C8[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21198C8[0]),
  (VTBL_ENTRY)&_ZN8S21198C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21198C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21198C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S21198C8[];
static  VTT_ENTRY vtt_S21198C8[] = {
  {&(_ZTV8S21198C8[3]),  3,15},
  {&(_ZTV8S21198C8[11]),  11,15},
};
extern VTBL_ENTRY _ZTI8S21198C8[];
extern  VTBL_ENTRY _ZTV8S21198C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21198C8[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21198C8D0Ev,_ZThn32_N8S21198C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21198C8D1Ev,_ZThn32_N8S21198C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21198C8 = {  "S21198C8", // class name
  bases_S21198C8, 3,
  &(vtc_S21198C8[0]), // expected_vtbl_contents
  &(vtt_S21198C8[0]), // expected_vtt_contents
  ABISELECT(512,292), // object size
  NSPAIRA(_ZTI8S21198C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21198C8),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21198C8),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21198C12  {
  __tsi64 s21198c12f0;
  int s21198c12f1;
  ::S21198C5 s21198c12f2;
  int s21198c12f3;
  ::S19917C5 s21198c12f4;
  void *s21198c12f5;
  int s21198c12f6;
  ::S21198C5 s21198c12f7;
  long double s21198c12f8;
  virtual  ~S21198C12(); // _ZN9S21198C12D1Ev
  virtual void  v5(); // _ZN9S21198C122v5Ev
  S21198C12(); // tgen
};
//SIG(-1 S21198C12) C1{ vd v1 FL Fi FC2{ BC3{ vd m Fp FD Fi Fp} vd v2 v3 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} Fi FC3 Fp Fi FC2 FD}


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

static void Test_S21198C12()
{
  extern Class_Descriptor cd_S21198C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(43,96)];
    init_test(&cd_S21198C12, buf);
    S21198C12 *dp, &lv = *(dp=new (buf) S21198C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(672,380), "sizeof(S21198C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21198C12)");
    check_field_offset(lv, s21198c12f0, ABISELECT(8,4), "S21198C12.s21198c12f0");
    check_field_offset(lv, s21198c12f1, ABISELECT(16,12), "S21198C12.s21198c12f1");
    check_field_offset(lv, s21198c12f2, ABISELECT(32,16), "S21198C12.s21198c12f2");
    check_field_offset(lv, s21198c12f3, ABISELECT(304,172), "S21198C12.s21198c12f3");
    check_field_offset(lv, s21198c12f4, ABISELECT(320,176), "S21198C12.s21198c12f4");
    check_field_offset(lv, s21198c12f5, ABISELECT(368,204), "S21198C12.s21198c12f5");
    check_field_offset(lv, s21198c12f6, ABISELECT(376,208), "S21198C12.s21198c12f6");
    check_field_offset(lv, s21198c12f7, ABISELECT(384,212), "S21198C12.s21198c12f7");
    check_field_offset(lv, s21198c12f8, ABISELECT(656,368), "S21198C12.s21198c12f8");
    test_class_info(&lv, &cd_S21198C12);
    dp->~S21198C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21198C12(Test_S21198C12, "S21198C12", ABISELECT(672,380));

#else // __cplusplus

extern void _ZN9S21198C12C1Ev();
extern void _ZN9S21198C12D1Ev();
Name_Map name_map_S21198C12[] = {
  NSPAIR(_ZN9S21198C12C1Ev),
  NSPAIR(_ZN9S21198C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S21198C12[];
extern void _ZN9S21198C12D1Ev();
extern void _ZN9S21198C12D0Ev();
extern void _ZN9S21198C122v5Ev();
static  VTBL_ENTRY vtc_S21198C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21198C12[0]),
  (VTBL_ENTRY)&_ZN9S21198C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21198C12D0Ev,
  (VTBL_ENTRY)&_ZN9S21198C122v5Ev,
};
extern VTBL_ENTRY _ZTI9S21198C12[];
extern  VTBL_ENTRY _ZTV9S21198C12[];
Class_Descriptor cd_S21198C12 = {  "S21198C12", // class name
  0,0,//no base classes
  &(vtc_S21198C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(672,380), // object size
  NSPAIRA(_ZTI9S21198C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S21198C12),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21198C11  : virtual S21198C4 , S21198C8 , S21198C12 , virtual S19917C3 {
  ::S19917C12_nt s21198c11f0;
  long double s21198c11f1[10];
  ::S21198C8 s21198c11f2;
  ::S21198C12 s21198c11f3;
  int s21198c11f4;
  virtual  ~S21198C11(); // _ZN9S21198C11D2Ev
  S21198C11(); // tgen
};
//SIG(-1 S21198C11) C1{ VBC2{ BC3{ vd m Fp FD Fi Fp} v1 v2 FL[2] FC3 Fi[3] Fp[4] FC4{ BC3 vd v5 v6 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} Fc:5} BC5{ VBC2 BC3 vd v3 Fi} BC6{ vd v4 FL Fi FC4 Fi FC3 Fp Fi FC4 FD} VBC7{ vd m FC8{ BC3 vd v7 v8 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} FD[3] Fp} vd FC9{} FD[10] FC5 FC6 Fi}


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

static void Test_S21198C11()
{
  extern Class_Descriptor cd_S21198C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(183,419)];
    init_test(&cd_S21198C11, buf);
    S21198C11 *dp, &lv = *(dp=new (buf) S21198C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2912,1672), "sizeof(S21198C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21198C11)");
    check_base_class_offset(lv, (S19917C5*)(S21198C4*), ABISELECT(2112,1212), "S21198C11");
    check_base_class_offset(lv, (S21198C4*), ABISELECT(2112,1212), "S21198C11");
    check_base_class_offset(lv, (S21198C4*)(S21198C8*), ABISELECT(2112,1212), "S21198C11");
    /*is_ambiguous_... S21198C8::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S21198C8*), 0, "S21198C11");
    check_base_class_offset(lv, (S21198C8*), 0, "S21198C11");
    check_base_class_offset(lv, (S21198C12*), ABISELECT(64,32), "S21198C11");
    check_base_class_offset(lv, (S19917C3*), ABISELECT(2560,1472), "S21198C11");
    check_field_offset(lv, s21198c11f0, ABISELECT(736,412), "S21198C11.s21198c11f0");
    check_field_offset(lv, s21198c11f1, ABISELECT(752,416), "S21198C11.s21198c11f1");
    check_field_offset(lv, s21198c11f2, ABISELECT(912,536), "S21198C11.s21198c11f2");
    check_field_offset(lv, s21198c11f3, ABISELECT(1424,828), "S21198C11.s21198c11f3");
    check_field_offset(lv, s21198c11f4, ABISELECT(2096,1208), "S21198C11.s21198c11f4");
    test_class_info(&lv, &cd_S21198C11);
    dp->~S21198C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21198C11(Test_S21198C11, "S21198C11", ABISELECT(2912,1672));

#else // __cplusplus

extern void _ZN9S21198C11C1Ev();
extern void _ZN9S21198C11D2Ev();
Name_Map name_map_S21198C11[] = {
  NSPAIR(_ZN9S21198C11C1Ev),
  NSPAIR(_ZN9S21198C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21198C4;
extern VTBL_ENTRY _ZTI8S21198C4[];
extern  VTBL_ENTRY _ZTV8S21198C4[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21198C8;
extern VTBL_ENTRY _ZTI8S21198C8[];
extern  VTBL_ENTRY _ZTV8S21198C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21198C8[];
extern Class_Descriptor cd_S21198C12;
extern VTBL_ENTRY _ZTI9S21198C12[];
extern  VTBL_ENTRY _ZTV9S21198C12[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
static Base_Class bases_S21198C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    ABISELECT(2112,1212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S21198C4,    ABISELECT(2112,1212), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //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_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S21198C8,    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},
  {&cd_S21198C12,    ABISELECT(64,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19917C3,    ABISELECT(2560,1472), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21198C11[];
extern void _ZN9S21198C11D1Ev();
extern void _ZN9S21198C11D0Ev();
extern void _ZN8S21198C82v4Ev();
extern void ABISELECT(_ZThn64_N9S21198C11D1Ev,_ZThn32_N9S21198C11D1Ev)();
extern void ABISELECT(_ZThn64_N9S21198C11D0Ev,_ZThn32_N9S21198C11D0Ev)();
extern void _ZN9S21198C122v5Ev();
extern void ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev)();
extern void ABISELECT(_ZThn2112_N9S21198C11D1Ev,_ZThn1212_N9S21198C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev)();
extern void ABISELECT(_ZThn2112_N9S21198C11D0Ev,_ZThn1212_N9S21198C11D0Ev)() __attribute__((weak));
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev)();
extern void ABISELECT(_ZThn2560_N9S21198C11D1Ev,_ZThn1472_N9S21198C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev)();
extern void ABISELECT(_ZThn2560_N9S21198C11D0Ev,_ZThn1472_N9S21198C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21198C11[] = {
  ABISELECT(2560,1472),
  ABISELECT(2112,1212),
  0,
  (VTBL_ENTRY)&(_ZTI9S21198C11[0]),
  (VTBL_ENTRY)&_ZN9S21198C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21198C11D0Ev,
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S21198C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S21198C11D1Ev,_ZThn32_N9S21198C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S21198C11D0Ev,_ZThn32_N9S21198C11D0Ev),
  (VTBL_ENTRY)&_ZN9S21198C122v5Ev,
  0,
  0,
  ABISELECT(-2112,-1212),
  ABISELECT(-2112,-1212),
  (VTBL_ENTRY)&(_ZTI9S21198C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
  ABISELECT(-2560,-1472),
  ABISELECT(-2560,-1472),
  (VTBL_ENTRY)&(_ZTI9S21198C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S21198C11[];
extern void _ZN8S21198C8D1Ev();
extern void _ZN8S21198C8D0Ev();
extern void _ZN8S21198C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C8__9S21198C11[] = {
  ABISELECT(2112,1212),
  0,
  (VTBL_ENTRY)&(_ZTI8S21198C8[0]),
  (VTBL_ENTRY)&_ZN8S21198C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21198C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev)();
extern void ABISELECT(_ZThn2112_N8S21198C8D1Ev,_ZThn1212_N8S21198C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev)();
extern void ABISELECT(_ZThn2112_N8S21198C8D0Ev,_ZThn1212_N8S21198C8D0Ev)() __attribute__((weak));
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C4__8S21198C8__9S21198C11[] = {
  0,
  0,
  ABISELECT(-2112,-1212),
  ABISELECT(-2112,-1212),
  (VTBL_ENTRY)&(_ZTI8S21198C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
};
static  VTT_ENTRY vtt_S21198C11[] = {
  {&(_ZTV9S21198C11[4]),  4,26},
  {&(_tg__ZTV8S21198C8__9S21198C11[3]),  3,6},
  {&(_tg__ZTV8S21198C4__8S21198C8__9S21198C11[5]),  5,9},
  {&(_ZTV9S21198C11[17]),  17,26},
  {&(_ZTV9S21198C11[24]),  24,26},
};
extern VTBL_ENTRY _ZTI9S21198C11[];
extern  VTBL_ENTRY _ZTV9S21198C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21198C11[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S21198C8D0Ev,_ZThn1212_N8S21198C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S21198C8D1Ev,_ZThn1212_N8S21198C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N9S21198C11D0Ev,_ZThn1472_N9S21198C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N9S21198C11D0Ev,_ZThn1212_N9S21198C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N9S21198C11D1Ev,_ZThn1472_N9S21198C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N9S21198C11D1Ev,_ZThn1212_N9S21198C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21198C11 = {  "S21198C11", // class name
  bases_S21198C11, 6,
  &(vtc_S21198C11[0]), // expected_vtbl_contents
  &(vtt_S21198C11[0]), // expected_vtt_contents
  ABISELECT(2912,1672), // object size
  NSPAIRA(_ZTI9S21198C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S21198C11),26, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21198C11),5, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21198C10  : virtual S19917C3 , virtual S21198C8 , S21198C11 , virtual S21198C12 , virtual S21198C5 {
  int s21198c10f0;
  char s21198c10f1;
  char s21198c10f2:8;
  long double s21198c10f3[8];
  int s21198c10f4;
  char s21198c10f5;
  void *s21198c10f6;
  virtual  ~S21198C10(); // _ZN9S21198C10D2Ev
  S21198C10(); // tgen
};
//SIG(-1 S21198C10) C1{ VBC2{ vd m FC3{ BC4{ vd m Fp FD Fi Fp} vd v7 v8 Fi Fp[4] FD[5] Fp[2] FC4 Fl[3]} FD[3] Fp} VBC5{ VBC6{ BC4 v1 v2 FL[2] FC4 Fi[3] Fp[4] FC7{ BC4 vd v5 v6 Fi Fp[4] FD[5] Fp[2] FC4 Fl[3]} Fc:5} BC4 vd v3 Fi} BC8{ VBC6 BC5 BC9{ vd v4 FL Fi FC7 Fi FC4 Fp Fi FC7 FD} VBC2 vd FC10{} FD[10] FC5 FC9 Fi} VBC9 VBC7 vd Fi Fc Fc:8 FD[8] Fi Fc Fp}


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

static void Test_S21198C10()
{
  extern Class_Descriptor cd_S21198C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(255,590)];
    init_test(&cd_S21198C10, buf);
    S21198C10 *dp, &lv = *(dp=new (buf) S21198C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4064,2356), "sizeof(S21198C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21198C10)");
    check_base_class_offset(lv, (S19917C3*), ABISELECT(2256,1328), "S21198C10");
    check_base_class_offset(lv, (S19917C3*)(S21198C11*), ABISELECT(2256,1328), "S21198C10");
    check_base_class_offset(lv, (S19917C5*)(S21198C4*), ABISELECT(2672,1560), "S21198C10");
    /*is_ambiguous_... S21198C10::S21198C8 */ AMB_check_base_class_offset(lv, (S21198C4*)(S21198C8*), ABISELECT(2672,1560), "S21198C10");
    check_base_class_offset(lv, (S21198C4*)(S21198C11*), ABISELECT(2672,1560), "S21198C10");
    check_base_class_offset(lv, (S21198C4*)(S21198C8*)(S21198C11*), ABISELECT(2672,1560), "S21198C10");
    /*is_ambiguous_... S21198C10::S21198C8 */ AMB_check_base_class_offset(lv, (S19917C5*)(S21198C8*), ABISELECT(2608,1528), "S21198C10");
    /*is_ambiguous_... S21198C10::S21198C8 */ AMB_check_base_class_offset(lv, (S21198C8*), ABISELECT(2608,1528), "S21198C10");
    /*is_ambiguous_... S21198C8::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S21198C8*)(S21198C11*), 0, "S21198C10");
    check_base_class_offset(lv, (S21198C8*)(S21198C11*), 0, "S21198C10");
    check_base_class_offset(lv, (S21198C12*)(S21198C11*), ABISELECT(64,32), "S21198C10");
    check_base_class_offset(lv, (S21198C11*), 0, "S21198C10");
    /*is_ambiguous_... S21198C10::S21198C12 */ AMB_check_base_class_offset(lv, (S21198C12*), ABISELECT(3120,1820), "S21198C10");
    check_base_class_offset(lv, (S19917C5*)(S21198C5*), ABISELECT(3792,2200), "S21198C10");
    check_base_class_offset(lv, (S21198C5*), ABISELECT(3792,2200), "S21198C10");
    check_field_offset(lv, s21198c10f0, ABISELECT(2100,1212), "S21198C10.s21198c10f0");
    check_field_offset(lv, s21198c10f1, ABISELECT(2104,1216), "S21198C10.s21198c10f1");
    set_bf_and_test(lv, s21198c10f2, ABISELECT(2105,1217), 0, 8, 1, "S21198C10");
    set_bf_and_test(lv, s21198c10f2, ABISELECT(2105,1217), 0, 8, hide_sll(1LL<<7), "S21198C10");
    check_field_offset(lv, s21198c10f3, ABISELECT(2112,1220), "S21198C10.s21198c10f3");
    check_field_offset(lv, s21198c10f4, ABISELECT(2240,1316), "S21198C10.s21198c10f4");
    check_field_offset(lv, s21198c10f5, ABISELECT(2244,1320), "S21198C10.s21198c10f5");
    check_field_offset(lv, s21198c10f6, ABISELECT(2248,1324), "S21198C10.s21198c10f6");
    test_class_info(&lv, &cd_S21198C10);
    dp->~S21198C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21198C10(Test_S21198C10, "S21198C10", ABISELECT(4064,2356));

#else // __cplusplus

extern void _ZN9S21198C10C1Ev();
extern void _ZN9S21198C10D2Ev();
Name_Map name_map_S21198C10[] = {
  NSPAIR(_ZN9S21198C10C1Ev),
  NSPAIR(_ZN9S21198C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21198C4;
extern VTBL_ENTRY _ZTI8S21198C4[];
extern  VTBL_ENTRY _ZTV8S21198C4[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21198C8;
extern VTBL_ENTRY _ZTI8S21198C8[];
extern  VTBL_ENTRY _ZTV8S21198C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21198C8[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21198C8;
extern VTBL_ENTRY _ZTI8S21198C8[];
extern  VTBL_ENTRY _ZTV8S21198C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21198C8[];
extern Class_Descriptor cd_S21198C12;
extern VTBL_ENTRY _ZTI9S21198C12[];
extern  VTBL_ENTRY _ZTV9S21198C12[];
extern Class_Descriptor cd_S21198C11;
extern VTBL_ENTRY _ZTI9S21198C11[];
extern  VTBL_ENTRY _ZTV9S21198C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21198C11[];
extern Class_Descriptor cd_S21198C12;
extern VTBL_ENTRY _ZTI9S21198C12[];
extern  VTBL_ENTRY _ZTV9S21198C12[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21198C5;
extern VTBL_ENTRY _ZTI8S21198C5[];
extern  VTBL_ENTRY _ZTV8S21198C5[];
static Base_Class bases_S21198C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C3,    ABISELECT(2256,1328), //bcp->offset
    15, //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
  1, 1},
  {&cd_S19917C5,    ABISELECT(2672,1560), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21198C4,    ABISELECT(2672,1560), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(2608,1528), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21198C8,    ABISELECT(2608,1528), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21198C8,    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
    10, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21198C12,    ABISELECT(64,32), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21198C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21198C12,    ABISELECT(3120,1820), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C5,    ABISELECT(3792,2200), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21198C5,    ABISELECT(3792,2200), //bcp->offset
    44, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21198C10[];
extern void _ZN9S21198C10D1Ev();
extern void _ZN9S21198C10D0Ev();
extern void _ZN8S21198C82v4Ev();
extern void ABISELECT(_ZThn64_N9S21198C10D1Ev,_ZThn32_N9S21198C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S21198C10D0Ev,_ZThn32_N9S21198C10D0Ev)();
extern void _ZN9S21198C122v5Ev();
extern void ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev)();
extern void ABISELECT(_ZThn2256_N9S21198C10D1Ev,_ZThn1328_N9S21198C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev)();
extern void ABISELECT(_ZThn2256_N9S21198C10D0Ev,_ZThn1328_N9S21198C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21198C10D1Ev,_ZTv0_n16_N9S21198C10D1Ev)();
extern void ABISELECT(_ZThn2608_N9S21198C10D1Ev,_ZThn1528_N9S21198C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21198C10D0Ev,_ZTv0_n16_N9S21198C10D0Ev)();
extern void ABISELECT(_ZThn2608_N9S21198C10D0Ev,_ZThn1528_N9S21198C10D0Ev)() __attribute__((weak));
extern void _ZN8S21198C82v4Ev();
extern void ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev)();
extern void ABISELECT(_ZThn2672_N9S21198C10D1Ev,_ZThn1560_N9S21198C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev)();
extern void ABISELECT(_ZThn2672_N9S21198C10D0Ev,_ZThn1560_N9S21198C10D0Ev)() __attribute__((weak));
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev)();
extern void ABISELECT(_ZThn3120_N9S21198C10D1Ev,_ZThn1820_N9S21198C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev)();
extern void ABISELECT(_ZThn3120_N9S21198C10D0Ev,_ZThn1820_N9S21198C10D0Ev)() __attribute__((weak));
extern void _ZN9S21198C122v5Ev();
extern void ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev)();
extern void ABISELECT(_ZThn3792_N9S21198C10D1Ev,_ZThn2200_N9S21198C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev)();
extern void ABISELECT(_ZThn3792_N9S21198C10D0Ev,_ZThn2200_N9S21198C10D0Ev)() __attribute__((weak));
extern void _ZN8S21198C52v6Ev();
extern void _ZN8S21198C52v7Ev();
static  VTBL_ENTRY vtc_S21198C10[] = {
  ABISELECT(3792,2200),
  ABISELECT(3120,1820),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&_ZN9S21198C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21198C10D0Ev,
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S21198C10D1Ev,_ZThn32_N9S21198C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S21198C10D0Ev,_ZThn32_N9S21198C10D0Ev),
  (VTBL_ENTRY)&_ZN9S21198C122v5Ev,
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev),
  0,
  ABISELECT(-2608,-1528),
  ABISELECT(64,32),
  ABISELECT(-2608,-1528),
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21198C10D1Ev,_ZTv0_n16_N9S21198C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21198C10D0Ev,_ZTv0_n16_N9S21198C10D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
  0,
  ABISELECT(-3120,-1820),
  ABISELECT(-3120,-1820),
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev),
  (VTBL_ENTRY)&_ZN9S21198C122v5Ev,
  0,
  0,
  ABISELECT(-3792,-2200),
  ABISELECT(-3792,-2200),
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21198C52v7Ev,
};
extern VTBL_ENTRY _ZTV9S21198C10[];
extern void _ZN9S21198C11D1Ev();
extern void _ZN9S21198C11D0Ev();
extern void _ZN8S21198C82v4Ev();
static  VTBL_ENTRY _tg__ZTV9S21198C11__9S21198C10[] = {
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI9S21198C11[0]),
  (VTBL_ENTRY)&_ZN9S21198C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21198C11D0Ev,
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
};
extern void _ZN8S21198C8D1Ev();
extern void _ZN8S21198C8D0Ev();
extern void _ZN8S21198C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C89S21198C11__A1__9S21198C10[] = {
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI8S21198C8[0]),
  (VTBL_ENTRY)&_ZN8S21198C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21198C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev)();
extern void ABISELECT(_ZThn2672_N8S21198C8D1Ev,_ZThn1560_N8S21198C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev)();
extern void ABISELECT(_ZThn2672_N8S21198C8D0Ev,_ZThn1560_N8S21198C8D0Ev)() __attribute__((weak));
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C4__8S21198C89S21198C11__A1__9S21198C10[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI8S21198C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev)();
extern void ABISELECT(_ZThn2672_N9S21198C11D1Ev,_ZThn1560_N9S21198C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev)();
extern void ABISELECT(_ZThn2672_N9S21198C11D0Ev,_ZThn1560_N9S21198C11D0Ev)() __attribute__((weak));
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C4__9S21198C11__9S21198C10[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI9S21198C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev)();
extern void ABISELECT(_ZThn2256_N9S21198C11D1Ev,_ZThn1328_N9S21198C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev)();
extern void ABISELECT(_ZThn2256_N9S21198C11D0Ev,_ZThn1328_N9S21198C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__9S21198C11__9S21198C10[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI9S21198C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev),
};
extern void _ZN8S21198C8D1Ev();
extern void _ZN8S21198C8D0Ev();
extern void _ZN8S21198C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C8__9S21198C10[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21198C8[0]),
  (VTBL_ENTRY)&_ZN8S21198C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21198C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21198C8D1Ev,_ZThn32_N8S21198C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S21198C8D0Ev,_ZThn32_N8S21198C8D0Ev)() __attribute__((weak));
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C4__8S21198C8__9S21198C10[] = {
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21198C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
};
static  VTT_ENTRY vtt_S21198C10[] = {
  {&(_ZTV9S21198C10[7]),  7,53},
  {&(_tg__ZTV9S21198C11__9S21198C10[4]),  4,7},
  {&(_tg__ZTV8S21198C89S21198C11__A1__9S21198C10[3]),  3,6},
  {&(_tg__ZTV8S21198C4__8S21198C89S21198C11__A1__9S21198C10[5]),  5,9},
  {&(_tg__ZTV8S21198C4__9S21198C11__9S21198C10[5]),  5,9},
  {&(_tg__ZTV8S19917C3__9S21198C11__9S21198C10[3]),  3,5},
  {&(_ZTV9S21198C10[18]),  18,53},
  {&(_ZTV9S21198C10[25]),  25,53},
  {&(_ZTV9S21198C10[33]),  33,53},
  {&(_ZTV9S21198C10[41]),  41,53},
  {&(_ZTV9S21198C10[49]),  49,53},
  {&(_tg__ZTV8S21198C8__9S21198C10[3]),  3,6},
  {&(_tg__ZTV8S21198C4__8S21198C8__9S21198C10[5]),  5,9},
};
extern VTBL_ENTRY _ZTI9S21198C10[];
extern  VTBL_ENTRY _ZTV9S21198C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21198C10[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S21198C11D0Ev,_ZThn1328_N9S21198C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S21198C11D0Ev,_ZThn1560_N9S21198C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S21198C11D1Ev,_ZThn1328_N9S21198C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S21198C11D1Ev,_ZThn1560_N9S21198C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21198C8D0Ev,_ZThn32_N8S21198C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S21198C8D0Ev,_ZThn1560_N8S21198C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21198C8D1Ev,_ZThn32_N8S21198C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S21198C8D1Ev,_ZThn1560_N8S21198C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21198C10D0Ev,_ZTv0_n16_N9S21198C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N9S21198C10D0Ev,_ZThn1528_N9S21198C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21198C10D1Ev,_ZTv0_n16_N9S21198C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N9S21198C10D1Ev,_ZThn1528_N9S21198C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3792_N9S21198C10D0Ev,_ZThn2200_N9S21198C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N9S21198C10D0Ev,_ZThn1820_N9S21198C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S21198C10D0Ev,_ZThn1560_N9S21198C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S21198C10D0Ev,_ZThn1328_N9S21198C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3792_N9S21198C10D1Ev,_ZThn2200_N9S21198C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N9S21198C10D1Ev,_ZThn1820_N9S21198C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S21198C10D1Ev,_ZThn1560_N9S21198C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S21198C10D1Ev,_ZThn1328_N9S21198C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21198C10 = {  "S21198C10", // class name
  bases_S21198C10, 12,
  &(vtc_S21198C10[0]), // expected_vtbl_contents
  &(vtt_S21198C10[0]), // expected_vtt_contents
  ABISELECT(4064,2356), // object size
  NSPAIRA(_ZTI9S21198C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S21198C10),53, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21198C10),13, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21198C9  : virtual S21198C4 , virtual S21198C10 {
  __tsi64 s21198c9f0[3];
  int s21198c9f1;
  virtual  ~S21198C9(); // _ZN8S21198C9D2Ev
  S21198C9(); // tgen
};
//SIG(-1 S21198C9) C1{ VBC2{ BC3{ vd m Fp FD Fi Fp} v1 v2 FL[2] FC3 Fi[3] Fp[4] FC4{ BC3 vd v5 v6 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} Fc:5} VBC5{ VBC6{ vd m FC7{ BC3 vd v7 v8 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} FD[3] Fp} VBC8{ VBC2 BC3 vd v3 Fi} BC9{ VBC2 BC8 BC10{ vd v4 FL Fi FC4 Fi FC3 Fp Fi FC4 FD} VBC6 vd FC11{} FD[10] FC8 FC10 Fi} VBC10 VBC4 vd Fi Fc Fc:8 FD[8] Fi Fc Fp} vd FL[3] Fi}


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

static void Test_S21198C9()
{
  extern Class_Descriptor cd_S21198C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(258,598)];
    init_test(&cd_S21198C9, buf);
    S21198C9 *dp, &lv = *(dp=new (buf) S21198C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4112,2388), "sizeof(S21198C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21198C9)");
    check_base_class_offset(lv, (S19917C5*)(S21198C4*), ABISELECT(48,32), "S21198C9");
    check_base_class_offset(lv, (S21198C4*), ABISELECT(48,32), "S21198C9");
    /*is_ambiguous_... S21198C9::S21198C8 */ AMB_check_base_class_offset(lv, (S21198C4*)(S21198C8*), ABISELECT(48,32), "S21198C9");
    check_base_class_offset(lv, (S21198C4*)(S21198C11*)(S21198C10*), ABISELECT(48,32), "S21198C9");
    check_base_class_offset(lv, (S21198C4*)(S21198C8*)(S21198C11*)(S21198C10*), ABISELECT(48,32), "S21198C9");
    check_base_class_offset(lv, (S19917C3*)(S21198C10*), ABISELECT(2752,1620), "S21198C9");
    check_base_class_offset(lv, (S19917C3*)(S21198C11*)(S21198C10*), ABISELECT(2752,1620), "S21198C9");
    /*is_ambiguous_... S21198C9::S21198C8 */ AMB_check_base_class_offset(lv, (S19917C5*)(S21198C8*), ABISELECT(3104,1820), "S21198C9");
    /*is_ambiguous_... S21198C10::S21198C8 */ AMB_check_base_class_offset(lv, (S21198C8*)(S21198C10*), ABISELECT(3104,1820), "S21198C9");
    /*is_ambiguous_... S21198C8::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S21198C8*)(S21198C11*)(S21198C10*), ABISELECT(496,292), "S21198C9");
    check_base_class_offset(lv, (S21198C8*)(S21198C11*)(S21198C10*), ABISELECT(496,292), "S21198C9");
    check_base_class_offset(lv, (S21198C12*)(S21198C11*)(S21198C10*), ABISELECT(560,324), "S21198C9");
    check_base_class_offset(lv, (S21198C11*)(S21198C10*), ABISELECT(496,292), "S21198C9");
    /*is_ambiguous_... S21198C10::S21198C12 */ AMB_check_base_class_offset(lv, (S21198C12*)(S21198C10*), ABISELECT(3168,1852), "S21198C9");
    check_base_class_offset(lv, (S19917C5*)(S21198C5*), ABISELECT(3840,2232), "S21198C9");
    check_base_class_offset(lv, (S21198C5*)(S21198C10*), ABISELECT(3840,2232), "S21198C9");
    check_base_class_offset(lv, (S21198C10*), ABISELECT(496,292), "S21198C9");
    check_field_offset(lv, s21198c9f0, ABISELECT(8,4), "S21198C9.s21198c9f0");
    check_field_offset(lv, s21198c9f1, ABISELECT(32,28), "S21198C9.s21198c9f1");
    test_class_info(&lv, &cd_S21198C9);
    dp->~S21198C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21198C9(Test_S21198C9, "S21198C9", ABISELECT(4112,2388));

#else // __cplusplus

extern void _ZN8S21198C9C1Ev();
extern void _ZN8S21198C9D2Ev();
Name_Map name_map_S21198C9[] = {
  NSPAIR(_ZN8S21198C9C1Ev),
  NSPAIR(_ZN8S21198C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21198C4;
extern VTBL_ENTRY _ZTI8S21198C4[];
extern  VTBL_ENTRY _ZTV8S21198C4[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21198C8;
extern VTBL_ENTRY _ZTI8S21198C8[];
extern  VTBL_ENTRY _ZTV8S21198C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21198C8[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21198C8;
extern VTBL_ENTRY _ZTI8S21198C8[];
extern  VTBL_ENTRY _ZTV8S21198C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21198C8[];
extern Class_Descriptor cd_S21198C12;
extern VTBL_ENTRY _ZTI9S21198C12[];
extern  VTBL_ENTRY _ZTV9S21198C12[];
extern Class_Descriptor cd_S21198C11;
extern VTBL_ENTRY _ZTI9S21198C11[];
extern  VTBL_ENTRY _ZTV9S21198C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21198C11[];
extern Class_Descriptor cd_S21198C12;
extern VTBL_ENTRY _ZTI9S21198C12[];
extern  VTBL_ENTRY _ZTV9S21198C12[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21198C5;
extern VTBL_ENTRY _ZTI8S21198C5[];
extern  VTBL_ENTRY _ZTV8S21198C5[];
extern Class_Descriptor cd_S21198C10;
extern VTBL_ENTRY _ZTI9S21198C10[];
extern  VTBL_ENTRY _ZTV9S21198C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21198C10[];
static Base_Class bases_S21198C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    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
    1, //immediately_derived
  0, 0},
  {&cd_S21198C4,    ABISELECT(48,32), //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C3,    ABISELECT(2752,1620), //bcp->offset
    37, //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
    8, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(3104,1820), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21198C8,    ABISELECT(3104,1820), //bcp->offset
    42, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(496,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
    9, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21198C8,    ABISELECT(496,292), //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
    10, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21198C12,    ABISELECT(560,324), //bcp->offset
    32, //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
    11, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21198C11,    ABISELECT(496,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S21198C12,    ABISELECT(3168,1852), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(3840,2232), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21198C5,    ABISELECT(3840,2232), //bcp->offset
    57, //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
    8, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S21198C10,    ABISELECT(496,292), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21198C9[];
extern void _ZN8S21198C9D1Ev();
extern void _ZN8S21198C9D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21198C9D1Ev,_ZTv0_n12_N8S21198C9D1Ev)();
extern void ABISELECT(_ZThn48_N8S21198C9D1Ev,_ZThn32_N8S21198C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C9D0Ev,_ZTv0_n12_N8S21198C9D0Ev)();
extern void ABISELECT(_ZThn48_N8S21198C9D0Ev,_ZThn32_N8S21198C9D0Ev)() __attribute__((weak));
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S21198C9D1Ev,_ZTv0_n32_N8S21198C9D1Ev)();
extern void ABISELECT(_ZThn496_N8S21198C9D1Ev,_ZThn292_N8S21198C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S21198C9D0Ev,_ZTv0_n32_N8S21198C9D0Ev)();
extern void ABISELECT(_ZThn496_N8S21198C9D0Ev,_ZThn292_N8S21198C9D0Ev)() __attribute__((weak));
extern void _ZN8S21198C82v4Ev();
extern void ABISELECT(_ZTvn64_n64_N8S21198C9D1Ev,_ZTvn32_n32_N8S21198C9D1Ev)();
extern void ABISELECT(_ZTvn64_n64_N8S21198C9D0Ev,_ZTvn32_n32_N8S21198C9D0Ev)();
extern void _ZN9S21198C122v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S21198C9D1Ev,_ZTv0_n12_N8S21198C9D1Ev)();
extern void ABISELECT(_ZThn2752_N8S21198C9D1Ev,_ZThn1620_N8S21198C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C9D0Ev,_ZTv0_n12_N8S21198C9D0Ev)();
extern void ABISELECT(_ZThn2752_N8S21198C9D0Ev,_ZThn1620_N8S21198C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21198C9D1Ev,_ZTv0_n16_N8S21198C9D1Ev)();
extern void ABISELECT(_ZThn3104_N8S21198C9D1Ev,_ZThn1820_N8S21198C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21198C9D0Ev,_ZTv0_n16_N8S21198C9D0Ev)();
extern void ABISELECT(_ZThn3104_N8S21198C9D0Ev,_ZThn1820_N8S21198C9D0Ev)() __attribute__((weak));
extern void _ZN8S21198C82v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S21198C9D1Ev,_ZTv0_n12_N8S21198C9D1Ev)();
extern void ABISELECT(_ZThn3168_N8S21198C9D1Ev,_ZThn1852_N8S21198C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C9D0Ev,_ZTv0_n12_N8S21198C9D0Ev)();
extern void ABISELECT(_ZThn3168_N8S21198C9D0Ev,_ZThn1852_N8S21198C9D0Ev)() __attribute__((weak));
extern void _ZN9S21198C122v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S21198C9D1Ev,_ZTv0_n12_N8S21198C9D1Ev)();
extern void ABISELECT(_ZThn3840_N8S21198C9D1Ev,_ZThn2232_N8S21198C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C9D0Ev,_ZTv0_n12_N8S21198C9D0Ev)();
extern void ABISELECT(_ZThn3840_N8S21198C9D0Ev,_ZThn2232_N8S21198C9D0Ev)() __attribute__((weak));
extern void _ZN8S21198C52v6Ev();
extern void _ZN8S21198C52v7Ev();
static  VTBL_ENTRY vtc_S21198C9[] = {
  ABISELECT(3840,2232),
  ABISELECT(3168,1852),
  ABISELECT(3104,1820),
  ABISELECT(2752,1620),
  ABISELECT(496,292),
  ABISELECT(48,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21198C9[0]),
  (VTBL_ENTRY)&_ZN8S21198C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21198C9D0Ev,
  0,
  0,
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S21198C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C9D1Ev,_ZTv0_n12_N8S21198C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C9D0Ev,_ZTv0_n12_N8S21198C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
  ABISELECT(64,32),
  0,
  ABISELECT(-496,-292),
  ABISELECT(3344,1940),
  ABISELECT(2672,1560),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(-448,-260),
  ABISELECT(-496,-292),
  (VTBL_ENTRY)&(_ZTI8S21198C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21198C9D1Ev,_ZTv0_n32_N8S21198C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21198C9D0Ev,_ZTv0_n32_N8S21198C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
  ABISELECT(-560,-324),
  (VTBL_ENTRY)&(_ZTI8S21198C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S21198C9D1Ev,_ZTvn32_n32_N8S21198C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S21198C9D0Ev,_ZTvn32_n32_N8S21198C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21198C122v5Ev,
  ABISELECT(-2752,-1620),
  ABISELECT(-2752,-1620),
  (VTBL_ENTRY)&(_ZTI8S21198C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C9D1Ev,_ZTv0_n12_N8S21198C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C9D0Ev,_ZTv0_n12_N8S21198C9D0Ev),
  0,
  ABISELECT(-3104,-1820),
  ABISELECT(-3056,-1788),
  ABISELECT(-3104,-1820),
  (VTBL_ENTRY)&(_ZTI8S21198C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21198C9D1Ev,_ZTv0_n16_N8S21198C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21198C9D0Ev,_ZTv0_n16_N8S21198C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
  0,
  ABISELECT(-3168,-1852),
  ABISELECT(-3168,-1852),
  (VTBL_ENTRY)&(_ZTI8S21198C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C9D1Ev,_ZTv0_n12_N8S21198C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C9D0Ev,_ZTv0_n12_N8S21198C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21198C122v5Ev,
  0,
  0,
  ABISELECT(-3840,-2232),
  ABISELECT(-3840,-2232),
  (VTBL_ENTRY)&(_ZTI8S21198C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C9D1Ev,_ZTv0_n12_N8S21198C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C9D0Ev,_ZTv0_n12_N8S21198C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21198C52v7Ev,
};
extern VTBL_ENTRY _ZTV8S21198C9[];
extern void _ZN9S21198C10D1Ev();
extern void _ZN9S21198C10D0Ev();
extern void _ZN8S21198C82v4Ev();
static  VTBL_ENTRY _tg__ZTV9S21198C10__8S21198C9[] = {
  ABISELECT(3344,1940),
  ABISELECT(2672,1560),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(-448,-260),
  0,
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&_ZN9S21198C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21198C10D0Ev,
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
};
extern void _ZN9S21198C11D1Ev();
extern void _ZN9S21198C11D0Ev();
extern void _ZN8S21198C82v4Ev();
static  VTBL_ENTRY _tg__ZTV9S21198C119S21198C10__8S21198C9[] = {
  ABISELECT(2256,1328),
  ABISELECT(-448,-260),
  0,
  (VTBL_ENTRY)&(_ZTI9S21198C11[0]),
  (VTBL_ENTRY)&_ZN9S21198C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21198C11D0Ev,
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
};
extern void _ZN8S21198C8D1Ev();
extern void _ZN8S21198C8D0Ev();
extern void _ZN8S21198C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C89S21198C119S21198C10__A1__8S21198C9[] = {
  ABISELECT(-448,-260),
  0,
  (VTBL_ENTRY)&(_ZTI8S21198C8[0]),
  (VTBL_ENTRY)&_ZN8S21198C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21198C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev)();
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C4__8S21198C89S21198C119S21198C10__A1__8S21198C9[] = {
  0,
  0,
  ABISELECT(448,260),
  ABISELECT(448,260),
  (VTBL_ENTRY)&(_ZTI8S21198C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev)();
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C4__9S21198C119S21198C10__8S21198C9[] = {
  0,
  0,
  ABISELECT(448,260),
  ABISELECT(448,260),
  (VTBL_ENTRY)&(_ZTI9S21198C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev)();
extern void ABISELECT(_ZThn2256_N9S21198C11D1Ev,_ZThn1328_N9S21198C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev)();
extern void ABISELECT(_ZThn2256_N9S21198C11D0Ev,_ZThn1328_N9S21198C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__9S21198C119S21198C10__8S21198C9[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI9S21198C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev)();
extern void ABISELECT(_ZThn2256_N9S21198C10D1Ev,_ZThn1328_N9S21198C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev)();
extern void ABISELECT(_ZThn2256_N9S21198C10D0Ev,_ZThn1328_N9S21198C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__9S21198C10__8S21198C9[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21198C10D1Ev,_ZTv0_n16_N9S21198C10D1Ev)();
extern void ABISELECT(_ZThn2608_N9S21198C10D1Ev,_ZThn1528_N9S21198C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21198C10D0Ev,_ZTv0_n16_N9S21198C10D0Ev)();
extern void ABISELECT(_ZThn2608_N9S21198C10D0Ev,_ZThn1528_N9S21198C10D0Ev)() __attribute__((weak));
extern void _ZN8S21198C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C8__9S21198C10__8S21198C9[] = {
  0,
  ABISELECT(-2608,-1528),
  ABISELECT(-3056,-1788),
  ABISELECT(-2608,-1528),
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21198C10D1Ev,_ZTv0_n16_N9S21198C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21198C10D0Ev,_ZTv0_n16_N9S21198C10D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev)();
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C4__9S21198C10__8S21198C9[] = {
  0,
  0,
  ABISELECT(448,260),
  ABISELECT(448,260),
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev)();
extern void ABISELECT(_ZThn2672_N9S21198C10D1Ev,_ZThn1560_N9S21198C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev)();
extern void ABISELECT(_ZThn2672_N9S21198C10D0Ev,_ZThn1560_N9S21198C10D0Ev)() __attribute__((weak));
extern void _ZN9S21198C122v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21198C12__A1__9S21198C10__8S21198C9[] = {
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev),
  (VTBL_ENTRY)&_ZN9S21198C122v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev)();
extern void ABISELECT(_ZThn3344_N9S21198C10D1Ev,_ZThn1940_N9S21198C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev)();
extern void ABISELECT(_ZThn3344_N9S21198C10D0Ev,_ZThn1940_N9S21198C10D0Ev)() __attribute__((weak));
extern void _ZN8S21198C52v6Ev();
extern void _ZN8S21198C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C5__9S21198C10__8S21198C9[] = {
  0,
  0,
  ABISELECT(-3344,-1940),
  ABISELECT(-3344,-1940),
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21198C52v7Ev,
};
extern void _ZN8S21198C8D1Ev();
extern void _ZN8S21198C8D0Ev();
extern void _ZN8S21198C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C8__8S21198C9[] = {
  ABISELECT(-3056,-1788),
  0,
  (VTBL_ENTRY)&(_ZTI8S21198C8[0]),
  (VTBL_ENTRY)&_ZN8S21198C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21198C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev)();
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C4__8S21198C8__8S21198C9[] = {
  0,
  0,
  ABISELECT(3056,1788),
  ABISELECT(3056,1788),
  (VTBL_ENTRY)&(_ZTI8S21198C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
};
static  VTT_ENTRY vtt_S21198C9[] = {
  {&(_ZTV8S21198C9[8]),  8,66},
  {&(_ZTV8S21198C9[15]),  15,66},
  {&(_ZTV8S21198C9[29]),  29,66},
  {&(_ZTV8S21198C9[40]),  40,66},
  {&(_ZTV8S21198C9[47]),  47,66},
  {&(_ZTV8S21198C9[34]),  34,66},
  {&(_ZTV8S21198C9[54]),  54,66},
  {&(_ZTV8S21198C9[62]),  62,66},
  {&(_tg__ZTV9S21198C10__8S21198C9[7]),  7,10},
  {&(_tg__ZTV9S21198C119S21198C10__8S21198C9[4]),  4,7},
  {&(_tg__ZTV8S21198C89S21198C119S21198C10__A1__8S21198C9[3]),  3,6},
  {&(_tg__ZTV8S21198C4__8S21198C89S21198C119S21198C10__A1__8S21198C9[5]),  5,9},
  {&(_tg__ZTV8S21198C4__9S21198C119S21198C10__8S21198C9[5]),  5,9},
  {&(_tg__ZTV8S19917C3__9S21198C119S21198C10__8S21198C9[3]),  3,5},
  {&(_tg__ZTV8S19917C3__9S21198C10__8S21198C9[3]),  3,5},
  {&(_tg__ZTV8S21198C8__9S21198C10__8S21198C9[5]),  5,8},
  {&(_tg__ZTV8S21198C4__9S21198C10__8S21198C9[5]),  5,9},
  {&(_tg__ZTV9S21198C12__A1__9S21198C10__8S21198C9[4]),  4,7},
  {&(_tg__ZTV8S21198C5__9S21198C10__8S21198C9[5]),  5,9},
  {&(_tg__ZTV8S21198C8__8S21198C9[3]),  3,6},
  {&(_tg__ZTV8S21198C4__8S21198C8__8S21198C9[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S21198C9[];
extern  VTBL_ENTRY _ZTV8S21198C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21198C9[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21198C10D0Ev,_ZTv0_n16_N9S21198C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N9S21198C10D0Ev,_ZThn1528_N9S21198C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21198C10D1Ev,_ZTv0_n16_N9S21198C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N9S21198C10D1Ev,_ZThn1528_N9S21198C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3344_N9S21198C10D0Ev,_ZThn1940_N9S21198C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S21198C10D0Ev,_ZThn1560_N9S21198C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S21198C10D0Ev,_ZThn1328_N9S21198C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3344_N9S21198C10D1Ev,_ZThn1940_N9S21198C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S21198C10D1Ev,_ZThn1560_N9S21198C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S21198C10D1Ev,_ZThn1328_N9S21198C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S21198C11D0Ev,_ZThn1328_N9S21198C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S21198C11D1Ev,_ZThn1328_N9S21198C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21198C9D0Ev,_ZTv0_n16_N8S21198C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3104_N8S21198C9D0Ev,_ZThn1820_N8S21198C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21198C9D1Ev,_ZTv0_n16_N8S21198C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3104_N8S21198C9D1Ev,_ZThn1820_N8S21198C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21198C9D0Ev,_ZTv0_n32_N8S21198C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S21198C9D0Ev,_ZThn292_N8S21198C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21198C9D1Ev,_ZTv0_n32_N8S21198C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S21198C9D1Ev,_ZThn292_N8S21198C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21198C9D0Ev,_ZTv0_n12_N8S21198C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3840_N8S21198C9D0Ev,_ZThn2232_N8S21198C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N8S21198C9D0Ev,_ZThn1852_N8S21198C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N8S21198C9D0Ev,_ZThn1620_N8S21198C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21198C9D0Ev,_ZThn32_N8S21198C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21198C9D1Ev,_ZTv0_n12_N8S21198C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3840_N8S21198C9D1Ev,_ZThn2232_N8S21198C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3168_N8S21198C9D1Ev,_ZThn1852_N8S21198C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N8S21198C9D1Ev,_ZThn1620_N8S21198C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21198C9D1Ev,_ZThn32_N8S21198C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21198C9 = {  "S21198C9", // class name
  bases_S21198C9, 13,
  &(vtc_S21198C9[0]), // expected_vtbl_contents
  &(vtt_S21198C9[0]), // expected_vtt_contents
  ABISELECT(4112,2388), // object size
  NSPAIRA(_ZTI8S21198C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21198C9),66, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21198C9),21, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21198C1  : virtual S19917C5 , virtual S21198C3 , virtual S21198C8 , virtual S21198C9 , S19917C3 {
  void *s21198c1f0[8];
  long double s21198c1f1;
  ::S19917C12_nt s21198c1f2;
  __tsi64 s21198c1f3;
  int s21198c1f4[5];
  __tsi64 s21198c1f5;
  ::S21198C10 s21198c1f6;
  virtual void  v1(); // _ZN8S21198C12v1Ev
  ~S21198C1(); // tgen
  S21198C1(); // tgen
};
//SIG(1 S21198C1) C1{ VBC2{ vd m Fp FD Fi Fp} VBC3{ VBC4{ BC2 v2 v3 FL[2] FC2 Fi[3] Fp[4] FC5{ BC2 vd v6 v7 Fi Fp[4] FD[5] Fp[2] FC2 Fl[3]} Fc:5} VBC2 BC6{ vd m FC7{ BC2 vd v8 v9 Fi Fp[4] FD[5] Fp[2] FC2 Fl[3]} FD[3] Fp} FC8{} Fp FD[3] FC6 FC5} VBC9{ VBC4 BC2 vd v4 Fi} VBC10{ VBC4 VBC11{ VBC6 VBC9 BC12{ VBC4 BC9 BC13{ vd v5 FL Fi FC5 Fi FC2 Fp Fi FC5 FD} VBC6 vd FC8 FD[10] FC9 FC13 Fi} VBC13 VBC5 vd Fi Fc Fc:8 FD[8] Fi Fc Fp} vd FL[3] Fi} BC6 v1 Fp[8] FD FC8 FL Fi[5] FL FC11}


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

static void Test_S21198C1()
{
  extern Class_Descriptor cd_S21198C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(609,1415)];
    init_test(&cd_S21198C1, buf);
    S21198C1 *dp, &lv = *(dp=new (buf) S21198C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9728,5656), "sizeof(S21198C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21198C1)");
    /*is_ambiguous_... S21198C1::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*), ABISELECT(4544,2640), "S21198C1");
    /*is_ambiguous_... S21198C3::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S21198C3*), ABISELECT(4544,2640), "S21198C1");
    check_base_class_offset(lv, (S19917C5*)(S21198C4*), ABISELECT(5632,3268), "S21198C1");
    check_base_class_offset(lv, (S21198C4*)(S21198C3*), ABISELECT(5632,3268), "S21198C1");
    /*is_ambiguous_... S21198C1::S21198C8 */ AMB_check_base_class_offset(lv, (S21198C4*)(S21198C8*), ABISELECT(5632,3268), "S21198C1");
    check_base_class_offset(lv, (S21198C4*)(S21198C9*), ABISELECT(5632,3268), "S21198C1");
    check_base_class_offset(lv, (S21198C4*)(S21198C11*)(S21198C10*), ABISELECT(5632,3268), "S21198C1");
    check_base_class_offset(lv, (S21198C4*)(S21198C8*)(S21198C11*)(S21198C10*), ABISELECT(5632,3268), "S21198C1");
    check_base_class_offset(lv, (S19917C3*)(S21198C3*), ABISELECT(4592,2668), "S21198C1");
    check_base_class_offset(lv, (S21198C3*), ABISELECT(4592,2668), "S21198C1");
    /*is_ambiguous_... S21198C1::S21198C8 */ AMB_check_base_class_offset(lv, (S19917C5*)(S21198C8*), ABISELECT(6080,3528), "S21198C1");
    /*is_ambiguous_... S21198C1::S21198C8 */ AMB_check_base_class_offset(lv, (S21198C8*), ABISELECT(6080,3528), "S21198C1");
    /*is_ambiguous_... S21198C10::S21198C8 */ AMB_check_base_class_offset(lv, (S21198C8*)(S21198C10*), ABISELECT(6080,3528), "S21198C1");
    check_base_class_offset(lv, (S19917C3*)(S21198C10*), ABISELECT(8432,4920), "S21198C1");
    check_base_class_offset(lv, (S19917C3*)(S21198C11*)(S21198C10*), ABISELECT(8432,4920), "S21198C1");
    /*is_ambiguous_... S21198C8::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S21198C8*)(S21198C11*)(S21198C10*), ABISELECT(6176,3592), "S21198C1");
    check_base_class_offset(lv, (S21198C8*)(S21198C11*)(S21198C10*), ABISELECT(6176,3592), "S21198C1");
    check_base_class_offset(lv, (S21198C12*)(S21198C11*)(S21198C10*), ABISELECT(6240,3624), "S21198C1");
    check_base_class_offset(lv, (S21198C11*)(S21198C10*), ABISELECT(6176,3592), "S21198C1");
    /*is_ambiguous_... S21198C10::S21198C12 */ AMB_check_base_class_offset(lv, (S21198C12*)(S21198C10*), ABISELECT(8784,5120), "S21198C1");
    check_base_class_offset(lv, (S19917C5*)(S21198C5*), ABISELECT(9456,5500), "S21198C1");
    check_base_class_offset(lv, (S21198C5*)(S21198C10*), ABISELECT(9456,5500), "S21198C1");
    check_base_class_offset(lv, (S21198C10*)(S21198C9*), ABISELECT(6176,3592), "S21198C1");
    check_base_class_offset(lv, (S21198C9*), ABISELECT(6136,3560), "S21198C1");
    /*is_ambiguous_... S21198C1::S19917C3 */ AMB_check_base_class_offset(lv, (S19917C3*), 0, "S21198C1");
    check_field_offset(lv, s21198c1f0, ABISELECT(344,200), "S21198C1.s21198c1f0");
    check_field_offset(lv, s21198c1f1, ABISELECT(416,232), "S21198C1.s21198c1f1");
    check_field_offset(lv, s21198c1f2, ABISELECT(432,244), "S21198C1.s21198c1f2");
    check_field_offset(lv, s21198c1f3, ABISELECT(440,248), "S21198C1.s21198c1f3");
    check_field_offset(lv, s21198c1f4, ABISELECT(448,256), "S21198C1.s21198c1f4");
    check_field_offset(lv, s21198c1f5, ABISELECT(472,276), "S21198C1.s21198c1f5");
    check_field_offset(lv, s21198c1f6, ABISELECT(480,284), "S21198C1.s21198c1f6");
    test_class_info(&lv, &cd_S21198C1);
    dp->~S21198C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21198C1(Test_S21198C1, "S21198C1", ABISELECT(9728,5656));

#else // __cplusplus

extern void _ZN8S21198C1C1Ev();
extern void _ZN8S21198C1D1Ev();
Name_Map name_map_S21198C1[] = {
  NSPAIR(_ZN8S21198C1C1Ev),
  NSPAIR(_ZN8S21198C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21198C4;
extern VTBL_ENTRY _ZTI8S21198C4[];
extern  VTBL_ENTRY _ZTV8S21198C4[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
extern Class_Descriptor cd_S21198C3;
extern VTBL_ENTRY _ZTI8S21198C3[];
extern  VTBL_ENTRY _ZTV8S21198C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21198C3[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21198C8;
extern VTBL_ENTRY _ZTI8S21198C8[];
extern  VTBL_ENTRY _ZTV8S21198C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21198C8[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21198C8;
extern VTBL_ENTRY _ZTI8S21198C8[];
extern  VTBL_ENTRY _ZTV8S21198C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21198C8[];
extern Class_Descriptor cd_S21198C12;
extern VTBL_ENTRY _ZTI9S21198C12[];
extern  VTBL_ENTRY _ZTV9S21198C12[];
extern Class_Descriptor cd_S21198C11;
extern VTBL_ENTRY _ZTI9S21198C11[];
extern  VTBL_ENTRY _ZTV9S21198C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21198C11[];
extern Class_Descriptor cd_S21198C12;
extern VTBL_ENTRY _ZTI9S21198C12[];
extern  VTBL_ENTRY _ZTV9S21198C12[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21198C5;
extern VTBL_ENTRY _ZTI8S21198C5[];
extern  VTBL_ENTRY _ZTV8S21198C5[];
extern Class_Descriptor cd_S21198C10;
extern VTBL_ENTRY _ZTI9S21198C10[];
extern  VTBL_ENTRY _ZTV9S21198C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21198C10[];
extern Class_Descriptor cd_S21198C9;
extern VTBL_ENTRY _ZTI8S21198C9[];
extern  VTBL_ENTRY _ZTV8S21198C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21198C9[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
static Base_Class bases_S21198C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    ABISELECT(4544,2640), //bcp->offset
    14, //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_S19917C5,    ABISELECT(5632,3268), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21198C4,    ABISELECT(5632,3268), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19917C3,    ABISELECT(4592,2668), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21198C3,    ABISELECT(4592,2668), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C5,    ABISELECT(6080,3528), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21198C8,    ABISELECT(6080,3528), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C3,    ABISELECT(8432,4920), //bcp->offset
    72, //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
    11, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(6176,3592), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S21198C8,    ABISELECT(6176,3592), //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
    13, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S21198C12,    ABISELECT(6240,3624), //bcp->offset
    67, //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
    14, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S21198C11,    ABISELECT(6176,3592), //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
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S21198C12,    ABISELECT(8784,5120), //bcp->offset
    77, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(9456,5500), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21198C5,    ABISELECT(9456,5500), //bcp->offset
    84, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S21198C10,    ABISELECT(6176,3592), //bcp->offset
    54, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S21198C9,    ABISELECT(6136,3560), //bcp->offset
    43, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21198C1[];
extern void _ZN8S21198C1D1Ev();
extern void _ZN8S21198C1D0Ev();
extern void _ZN8S21198C12v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S21198C1D1Ev,_ZTv0_n12_N8S21198C1D1Ev)();
extern void ABISELECT(_ZThn4544_N8S21198C1D1Ev,_ZThn2640_N8S21198C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C1D0Ev,_ZTv0_n12_N8S21198C1D0Ev)();
extern void ABISELECT(_ZThn4544_N8S21198C1D0Ev,_ZThn2640_N8S21198C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21198C1D1Ev,_ZTv0_n20_N8S21198C1D1Ev)();
extern void ABISELECT(_ZThn4592_N8S21198C1D1Ev,_ZThn2668_N8S21198C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21198C1D0Ev,_ZTv0_n20_N8S21198C1D0Ev)();
extern void ABISELECT(_ZThn4592_N8S21198C1D0Ev,_ZThn2668_N8S21198C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C1D1Ev,_ZTv0_n12_N8S21198C1D1Ev)();
extern void ABISELECT(_ZThn5632_N8S21198C1D1Ev,_ZThn3268_N8S21198C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C1D0Ev,_ZTv0_n12_N8S21198C1D0Ev)();
extern void ABISELECT(_ZThn5632_N8S21198C1D0Ev,_ZThn3268_N8S21198C1D0Ev)() __attribute__((weak));
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S21198C1D1Ev,_ZTv0_n16_N8S21198C1D1Ev)();
extern void ABISELECT(_ZThn6080_N8S21198C1D1Ev,_ZThn3528_N8S21198C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21198C1D0Ev,_ZTv0_n16_N8S21198C1D0Ev)();
extern void ABISELECT(_ZThn6080_N8S21198C1D0Ev,_ZThn3528_N8S21198C1D0Ev)() __attribute__((weak));
extern void _ZN8S21198C82v4Ev();
extern void ABISELECT(_ZTv0_n72_N8S21198C1D1Ev,_ZTv0_n36_N8S21198C1D1Ev)();
extern void ABISELECT(_ZThn6136_N8S21198C1D1Ev,_ZThn3560_N8S21198C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S21198C1D0Ev,_ZTv0_n36_N8S21198C1D0Ev)();
extern void ABISELECT(_ZThn6136_N8S21198C1D0Ev,_ZThn3560_N8S21198C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S21198C1D1Ev,_ZTv0_n32_N8S21198C1D1Ev)();
extern void ABISELECT(_ZThn6176_N8S21198C1D1Ev,_ZThn3592_N8S21198C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S21198C1D0Ev,_ZTv0_n32_N8S21198C1D0Ev)();
extern void ABISELECT(_ZThn6176_N8S21198C1D0Ev,_ZThn3592_N8S21198C1D0Ev)() __attribute__((weak));
extern void _ZN8S21198C82v4Ev();
extern void ABISELECT(_ZTvn64_n64_N8S21198C1D1Ev,_ZTvn32_n32_N8S21198C1D1Ev)();
extern void ABISELECT(_ZTvn64_n64_N8S21198C1D0Ev,_ZTvn32_n32_N8S21198C1D0Ev)();
extern void _ZN9S21198C122v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S21198C1D1Ev,_ZTv0_n12_N8S21198C1D1Ev)();
extern void ABISELECT(_ZThn8432_N8S21198C1D1Ev,_ZThn4920_N8S21198C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C1D0Ev,_ZTv0_n12_N8S21198C1D0Ev)();
extern void ABISELECT(_ZThn8432_N8S21198C1D0Ev,_ZThn4920_N8S21198C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C1D1Ev,_ZTv0_n12_N8S21198C1D1Ev)();
extern void ABISELECT(_ZThn8784_N8S21198C1D1Ev,_ZThn5120_N8S21198C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C1D0Ev,_ZTv0_n12_N8S21198C1D0Ev)();
extern void ABISELECT(_ZThn8784_N8S21198C1D0Ev,_ZThn5120_N8S21198C1D0Ev)() __attribute__((weak));
extern void _ZN9S21198C122v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S21198C1D1Ev,_ZTv0_n12_N8S21198C1D1Ev)();
extern void ABISELECT(_ZThn9456_N8S21198C1D1Ev,_ZThn5500_N8S21198C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C1D0Ev,_ZTv0_n12_N8S21198C1D0Ev)();
extern void ABISELECT(_ZThn9456_N8S21198C1D0Ev,_ZThn5500_N8S21198C1D0Ev)() __attribute__((weak));
extern void _ZN8S21198C52v6Ev();
extern void _ZN8S21198C52v7Ev();
static  VTBL_ENTRY vtc_S21198C1[] = {
  ABISELECT(9456,5500),
  ABISELECT(8784,5120),
  ABISELECT(8432,4920),
  ABISELECT(6176,3592),
  ABISELECT(6136,3560),
  ABISELECT(6080,3528),
  ABISELECT(5632,3268),
  ABISELECT(4592,2668),
  ABISELECT(4544,2640),
  0,
  (VTBL_ENTRY)&(_ZTI8S21198C1[0]),
  (VTBL_ENTRY)&_ZN8S21198C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21198C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21198C12v1Ev,
  ABISELECT(-4544,-2640),
  ABISELECT(-4544,-2640),
  (VTBL_ENTRY)&(_ZTI8S21198C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C1D1Ev,_ZTv0_n12_N8S21198C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C1D0Ev,_ZTv0_n12_N8S21198C1D0Ev),
  ABISELECT(-4592,-2668),
  ABISELECT(-48,-28),
  ABISELECT(1040,600),
  ABISELECT(-4592,-2668),
  (VTBL_ENTRY)&(_ZTI8S21198C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21198C1D1Ev,_ZTv0_n20_N8S21198C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21198C1D0Ev,_ZTv0_n20_N8S21198C1D0Ev),
  0,
  0,
  ABISELECT(-5632,-3268),
  ABISELECT(-5632,-3268),
  (VTBL_ENTRY)&(_ZTI8S21198C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C1D1Ev,_ZTv0_n12_N8S21198C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C1D0Ev,_ZTv0_n12_N8S21198C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
  0,
  ABISELECT(-6080,-3528),
  ABISELECT(-448,-260),
  ABISELECT(-6080,-3528),
  (VTBL_ENTRY)&(_ZTI8S21198C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21198C1D1Ev,_ZTv0_n16_N8S21198C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21198C1D0Ev,_ZTv0_n16_N8S21198C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
  ABISELECT(-6136,-3560),
  ABISELECT(3320,1940),
  ABISELECT(2648,1560),
  ABISELECT(-56,-32),
  ABISELECT(2296,1360),
  ABISELECT(40,32),
  ABISELECT(-504,-292),
  ABISELECT(-6136,-3560),
  (VTBL_ENTRY)&(_ZTI8S21198C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21198C1D1Ev,_ZTv0_n36_N8S21198C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S21198C1D0Ev,_ZTv0_n36_N8S21198C1D0Ev),
  ABISELECT(64,32),
  0,
  ABISELECT(-6176,-3592),
  ABISELECT(3280,1908),
  ABISELECT(2608,1528),
  ABISELECT(-96,-64),
  ABISELECT(2256,1328),
  ABISELECT(-544,-324),
  ABISELECT(-6176,-3592),
  (VTBL_ENTRY)&(_ZTI8S21198C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21198C1D1Ev,_ZTv0_n32_N8S21198C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21198C1D0Ev,_ZTv0_n32_N8S21198C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
  ABISELECT(-6240,-3624),
  (VTBL_ENTRY)&(_ZTI8S21198C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S21198C1D1Ev,_ZTvn32_n32_N8S21198C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S21198C1D0Ev,_ZTvn32_n32_N8S21198C1D0Ev),
  (VTBL_ENTRY)&_ZN9S21198C122v5Ev,
  ABISELECT(-8432,-4920),
  ABISELECT(-8432,-4920),
  (VTBL_ENTRY)&(_ZTI8S21198C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C1D1Ev,_ZTv0_n12_N8S21198C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C1D0Ev,_ZTv0_n12_N8S21198C1D0Ev),
  0,
  ABISELECT(-8784,-5120),
  ABISELECT(-8784,-5120),
  (VTBL_ENTRY)&(_ZTI8S21198C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C1D1Ev,_ZTv0_n12_N8S21198C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C1D0Ev,_ZTv0_n12_N8S21198C1D0Ev),
  (VTBL_ENTRY)&_ZN9S21198C122v5Ev,
  0,
  0,
  ABISELECT(-9456,-5500),
  ABISELECT(-9456,-5500),
  (VTBL_ENTRY)&(_ZTI8S21198C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C1D1Ev,_ZTv0_n12_N8S21198C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C1D0Ev,_ZTv0_n12_N8S21198C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21198C52v7Ev,
};
extern VTBL_ENTRY _ZTV8S21198C1[];
extern void _ZN8S21198C3D1Ev();
extern void _ZN8S21198C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C3__8S21198C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(1040,600),
  0,
  (VTBL_ENTRY)&(_ZTI8S21198C3[0]),
  (VTBL_ENTRY)&_ZN8S21198C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21198C3D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21198C3D1Ev,_ZTv0_n12_N8S21198C3D1Ev)();
extern void ABISELECT(_ZThn1040_N8S21198C3D1Ev,_ZThn600_N8S21198C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C3D0Ev,_ZTv0_n12_N8S21198C3D0Ev)();
extern void ABISELECT(_ZThn1040_N8S21198C3D0Ev,_ZThn600_N8S21198C3D0Ev)() __attribute__((weak));
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C4__8S21198C3__8S21198C1[] = {
  0,
  0,
  ABISELECT(-1040,-600),
  ABISELECT(-1040,-600),
  (VTBL_ENTRY)&(_ZTI8S21198C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C3D1Ev,_ZTv0_n12_N8S21198C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C3D0Ev,_ZTv0_n12_N8S21198C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21198C3D1Ev,_ZTv0_n12_N8S21198C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21198C3D0Ev,_ZTv0_n12_N8S21198C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19917C5__A1__8S21198C3__8S21198C1[] = {
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S21198C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C3D1Ev,_ZTv0_n12_N8S21198C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C3D0Ev,_ZTv0_n12_N8S21198C3D0Ev),
};
extern void _ZN8S21198C8D1Ev();
extern void _ZN8S21198C8D0Ev();
extern void _ZN8S21198C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C8__8S21198C1[] = {
  ABISELECT(-448,-260),
  0,
  (VTBL_ENTRY)&(_ZTI8S21198C8[0]),
  (VTBL_ENTRY)&_ZN8S21198C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21198C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev)();
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C4__8S21198C8__8S21198C1[] = {
  0,
  0,
  ABISELECT(448,260),
  ABISELECT(448,260),
  (VTBL_ENTRY)&(_ZTI8S21198C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
};
extern void _ZN8S21198C9D1Ev();
extern void _ZN8S21198C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C9__8S21198C1[] = {
  ABISELECT(3320,1940),
  ABISELECT(2648,1560),
  ABISELECT(-56,-32),
  ABISELECT(2296,1360),
  ABISELECT(40,32),
  ABISELECT(-504,-292),
  0,
  (VTBL_ENTRY)&(_ZTI8S21198C9[0]),
  (VTBL_ENTRY)&_ZN8S21198C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21198C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21198C9D1Ev,_ZTv0_n12_N8S21198C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21198C9D0Ev,_ZTv0_n12_N8S21198C9D0Ev)();
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C4__8S21198C9__8S21198C1[] = {
  0,
  0,
  ABISELECT(504,292),
  ABISELECT(504,292),
  (VTBL_ENTRY)&(_ZTI8S21198C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C9D1Ev,_ZTv0_n12_N8S21198C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C9D0Ev,_ZTv0_n12_N8S21198C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S21198C9D1Ev,_ZTv0_n32_N8S21198C9D1Ev)();
extern void ABISELECT(_ZThn40_N8S21198C9D1Ev,_ZThn32_N8S21198C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S21198C9D0Ev,_ZTv0_n32_N8S21198C9D0Ev)();
extern void ABISELECT(_ZThn40_N8S21198C9D0Ev,_ZThn32_N8S21198C9D0Ev)() __attribute__((weak));
extern void _ZN8S21198C82v4Ev();
static  VTBL_ENTRY _tg__ZTV9S21198C10__8S21198C9__8S21198C1[] = {
  ABISELECT(64,32),
  0,
  ABISELECT(-40,-32),
  ABISELECT(3280,1908),
  ABISELECT(2608,1528),
  ABISELECT(-96,-64),
  ABISELECT(2256,1328),
  ABISELECT(-544,-324),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S21198C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21198C9D1Ev,_ZTv0_n32_N8S21198C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21198C9D0Ev,_ZTv0_n32_N8S21198C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21198C9D1Ev,_ZTv0_n12_N8S21198C9D1Ev)();
extern void ABISELECT(_ZThn2296_N8S21198C9D1Ev,_ZThn1360_N8S21198C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C9D0Ev,_ZTv0_n12_N8S21198C9D0Ev)();
extern void ABISELECT(_ZThn2296_N8S21198C9D0Ev,_ZThn1360_N8S21198C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__8S21198C9__8S21198C1[] = {
  ABISELECT(-2296,-1360),
  ABISELECT(-2296,-1360),
  (VTBL_ENTRY)&(_ZTI8S21198C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C9D1Ev,_ZTv0_n12_N8S21198C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C9D0Ev,_ZTv0_n12_N8S21198C9D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21198C9D1Ev,_ZTv0_n16_N8S21198C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21198C9D0Ev,_ZTv0_n16_N8S21198C9D0Ev)();
extern void _ZN8S21198C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C8__8S21198C9__8S21198C1[] = {
  0,
  ABISELECT(56,32),
  ABISELECT(-448,-260),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI8S21198C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21198C9D1Ev,_ZTv0_n16_N8S21198C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21198C9D0Ev,_ZTv0_n16_N8S21198C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
};
extern void ABISELECT(_ZTvn64_n64_N8S21198C9D1Ev,_ZTvn32_n32_N8S21198C9D1Ev)();
extern void ABISELECT(_ZTvn64_n64_N8S21198C9D0Ev,_ZTvn32_n32_N8S21198C9D0Ev)();
extern void _ZN9S21198C122v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21198C129S21198C119S21198C10__8S21198C9__8S21198C1[] = {
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI8S21198C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S21198C9D1Ev,_ZTvn32_n32_N8S21198C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S21198C9D0Ev,_ZTvn32_n32_N8S21198C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21198C122v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21198C9D1Ev,_ZTv0_n12_N8S21198C9D1Ev)();
extern void ABISELECT(_ZThn2648_N8S21198C9D1Ev,_ZThn1560_N8S21198C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C9D0Ev,_ZTv0_n12_N8S21198C9D0Ev)();
extern void ABISELECT(_ZThn2648_N8S21198C9D0Ev,_ZThn1560_N8S21198C9D0Ev)() __attribute__((weak));
extern void _ZN9S21198C122v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21198C12__A1__8S21198C9__8S21198C1[] = {
  0,
  ABISELECT(-2648,-1560),
  ABISELECT(-2648,-1560),
  (VTBL_ENTRY)&(_ZTI8S21198C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C9D1Ev,_ZTv0_n12_N8S21198C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C9D0Ev,_ZTv0_n12_N8S21198C9D0Ev),
  (VTBL_ENTRY)&_ZN9S21198C122v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21198C9D1Ev,_ZTv0_n12_N8S21198C9D1Ev)();
extern void ABISELECT(_ZThn3320_N8S21198C9D1Ev,_ZThn1940_N8S21198C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21198C9D0Ev,_ZTv0_n12_N8S21198C9D0Ev)();
extern void ABISELECT(_ZThn3320_N8S21198C9D0Ev,_ZThn1940_N8S21198C9D0Ev)() __attribute__((weak));
extern void _ZN8S21198C52v6Ev();
extern void _ZN8S21198C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C5__8S21198C9__8S21198C1[] = {
  0,
  0,
  ABISELECT(-3320,-1940),
  ABISELECT(-3320,-1940),
  (VTBL_ENTRY)&(_ZTI8S21198C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C9D1Ev,_ZTv0_n12_N8S21198C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C9D0Ev,_ZTv0_n12_N8S21198C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21198C52v7Ev,
};
extern void _ZN9S21198C10D1Ev();
extern void _ZN9S21198C10D0Ev();
extern void _ZN8S21198C82v4Ev();
static  VTBL_ENTRY _tg__ZTV9S21198C10__8S21198C1[] = {
  ABISELECT(3280,1908),
  ABISELECT(2608,1528),
  ABISELECT(-96,-64),
  ABISELECT(2256,1328),
  ABISELECT(-544,-324),
  0,
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&_ZN9S21198C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21198C10D0Ev,
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
};
extern void _ZN9S21198C11D1Ev();
extern void _ZN9S21198C11D0Ev();
extern void _ZN8S21198C82v4Ev();
static  VTBL_ENTRY _tg__ZTV9S21198C119S21198C10__8S21198C1[] = {
  ABISELECT(2256,1328),
  ABISELECT(-544,-324),
  0,
  (VTBL_ENTRY)&(_ZTI9S21198C11[0]),
  (VTBL_ENTRY)&_ZN9S21198C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21198C11D0Ev,
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
};
extern void _ZN8S21198C8D1Ev();
extern void _ZN8S21198C8D0Ev();
extern void _ZN8S21198C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C89S21198C119S21198C10__A1__8S21198C1[] = {
  ABISELECT(-544,-324),
  0,
  (VTBL_ENTRY)&(_ZTI8S21198C8[0]),
  (VTBL_ENTRY)&_ZN8S21198C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21198C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev)();
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C4__8S21198C89S21198C119S21198C10__A1__8S21198C1[] = {
  0,
  0,
  ABISELECT(544,324),
  ABISELECT(544,324),
  (VTBL_ENTRY)&(_ZTI8S21198C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C8D1Ev,_ZTv0_n12_N8S21198C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21198C8D0Ev,_ZTv0_n12_N8S21198C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev)();
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C4__9S21198C119S21198C10__8S21198C1[] = {
  0,
  0,
  ABISELECT(544,324),
  ABISELECT(544,324),
  (VTBL_ENTRY)&(_ZTI9S21198C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev)();
extern void ABISELECT(_ZThn2256_N9S21198C11D1Ev,_ZThn1328_N9S21198C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev)();
extern void ABISELECT(_ZThn2256_N9S21198C11D0Ev,_ZThn1328_N9S21198C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__9S21198C119S21198C10__8S21198C1[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI9S21198C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev)();
extern void ABISELECT(_ZThn2256_N9S21198C10D1Ev,_ZThn1328_N9S21198C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev)();
extern void ABISELECT(_ZThn2256_N9S21198C10D0Ev,_ZThn1328_N9S21198C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__9S21198C10__8S21198C1[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21198C10D1Ev,_ZTv0_n16_N9S21198C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S21198C10D0Ev,_ZTv0_n16_N9S21198C10D0Ev)();
extern void _ZN8S21198C82v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C8__9S21198C10__8S21198C1[] = {
  0,
  ABISELECT(96,64),
  ABISELECT(-448,-260),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21198C10D1Ev,_ZTv0_n16_N9S21198C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21198C10D0Ev,_ZTv0_n16_N9S21198C10D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C82v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev)();
extern void _ZN8S21198C42v2Ev();
extern void _ZN8S21198C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C4__9S21198C10__8S21198C1[] = {
  0,
  0,
  ABISELECT(544,324),
  ABISELECT(544,324),
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21198C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev)();
extern void ABISELECT(_ZThn2608_N9S21198C10D1Ev,_ZThn1528_N9S21198C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev)();
extern void ABISELECT(_ZThn2608_N9S21198C10D0Ev,_ZThn1528_N9S21198C10D0Ev)() __attribute__((weak));
extern void _ZN9S21198C122v5Ev();
static  VTBL_ENTRY _tg__ZTV9S21198C12__A1__9S21198C10__8S21198C1[] = {
  0,
  ABISELECT(-2608,-1528),
  ABISELECT(-2608,-1528),
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev),
  (VTBL_ENTRY)&_ZN9S21198C122v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev)();
extern void ABISELECT(_ZThn3280_N9S21198C10D1Ev,_ZThn1908_N9S21198C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev)();
extern void ABISELECT(_ZThn3280_N9S21198C10D0Ev,_ZThn1908_N9S21198C10D0Ev)() __attribute__((weak));
extern void _ZN8S21198C52v6Ev();
extern void _ZN8S21198C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S21198C5__9S21198C10__8S21198C1[] = {
  0,
  0,
  ABISELECT(-3280,-1908),
  ABISELECT(-3280,-1908),
  (VTBL_ENTRY)&(_ZTI9S21198C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev),
  (VTBL_ENTRY)&_ZN8S21198C52v6Ev,
  (VTBL_ENTRY)&_ZN8S21198C52v7Ev,
};
static  VTT_ENTRY vtt_S21198C1[] = {
  {&(_ZTV8S21198C1[11]),  11,93},
  {&(_ZTV8S21198C1[17]),  17,93},
  {&(_ZTV8S21198C1[24]),  24,93},
  {&(_ZTV8S21198C1[31]),  31,93},
  {&(_ZTV8S21198C1[40]),  40,93},
  {&(_ZTV8S21198C1[52]),  52,93},
  {&(_ZTV8S21198C1[64]),  64,93},
  {&(_ZTV8S21198C1[75]),  75,93},
  {&(_ZTV8S21198C1[69]),  69,93},
  {&(_ZTV8S21198C1[81]),  81,93},
  {&(_ZTV8S21198C1[89]),  89,93},
  {&(_tg__ZTV8S21198C3__8S21198C1[4]),  4,6},
  {&(_tg__ZTV8S21198C4__8S21198C3__8S21198C1[5]),  5,9},
  {&(_tg__ZTV8S19917C5__A1__8S21198C3__8S21198C1[3]),  3,5},
  {&(_tg__ZTV8S21198C8__8S21198C1[3]),  3,6},
  {&(_tg__ZTV8S21198C4__8S21198C8__8S21198C1[5]),  5,9},
  {&(_tg__ZTV8S21198C9__8S21198C1[8]),  8,10},
  {&(_tg__ZTV8S21198C4__8S21198C9__8S21198C1[5]),  5,9},
  {&(_tg__ZTV9S21198C10__8S21198C9__8S21198C1[10]),  10,13},
  {&(_tg__ZTV8S19917C3__8S21198C9__8S21198C1[3]),  3,5},
  {&(_tg__ZTV8S21198C8__8S21198C9__8S21198C1[5]),  5,8},
  {&(_tg__ZTV9S21198C129S21198C119S21198C10__8S21198C9__8S21198C1[2]),  2,5},
  {&(_tg__ZTV9S21198C12__A1__8S21198C9__8S21198C1[4]),  4,7},
  {&(_tg__ZTV8S21198C5__8S21198C9__8S21198C1[5]),  5,9},
  {&(_tg__ZTV9S21198C10__8S21198C1[7]),  7,10},
  {&(_tg__ZTV9S21198C119S21198C10__8S21198C1[4]),  4,7},
  {&(_tg__ZTV8S21198C89S21198C119S21198C10__A1__8S21198C1[3]),  3,6},
  {&(_tg__ZTV8S21198C4__8S21198C89S21198C119S21198C10__A1__8S21198C1[5]),  5,9},
  {&(_tg__ZTV8S21198C4__9S21198C119S21198C10__8S21198C1[5]),  5,9},
  {&(_tg__ZTV8S19917C3__9S21198C119S21198C10__8S21198C1[3]),  3,5},
  {&(_tg__ZTV8S19917C3__9S21198C10__8S21198C1[3]),  3,5},
  {&(_tg__ZTV8S21198C8__9S21198C10__8S21198C1[5]),  5,8},
  {&(_tg__ZTV8S21198C4__9S21198C10__8S21198C1[5]),  5,9},
  {&(_tg__ZTV9S21198C12__A1__9S21198C10__8S21198C1[4]),  4,7},
  {&(_tg__ZTV8S21198C5__9S21198C10__8S21198C1[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S21198C1[];
extern  VTBL_ENTRY _ZTV8S21198C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21198C1[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21198C10D0Ev,_ZTv0_n12_N9S21198C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N9S21198C10D0Ev,_ZThn1908_N9S21198C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N9S21198C10D0Ev,_ZThn1528_N9S21198C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S21198C10D0Ev,_ZThn1328_N9S21198C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21198C10D1Ev,_ZTv0_n12_N9S21198C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3280_N9S21198C10D1Ev,_ZThn1908_N9S21198C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N9S21198C10D1Ev,_ZThn1528_N9S21198C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S21198C10D1Ev,_ZThn1328_N9S21198C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21198C11D0Ev,_ZTv0_n12_N9S21198C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S21198C11D0Ev,_ZThn1328_N9S21198C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21198C11D1Ev,_ZTv0_n12_N9S21198C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S21198C11D1Ev,_ZThn1328_N9S21198C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21198C9D0Ev,_ZTv0_n12_N8S21198C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3320_N8S21198C9D0Ev,_ZThn1940_N8S21198C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2648_N8S21198C9D0Ev,_ZThn1560_N8S21198C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2296_N8S21198C9D0Ev,_ZThn1360_N8S21198C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21198C9D1Ev,_ZTv0_n12_N8S21198C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3320_N8S21198C9D1Ev,_ZThn1940_N8S21198C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2648_N8S21198C9D1Ev,_ZThn1560_N8S21198C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2296_N8S21198C9D1Ev,_ZThn1360_N8S21198C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21198C9D0Ev,_ZTv0_n32_N8S21198C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21198C9D0Ev,_ZThn32_N8S21198C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21198C9D1Ev,_ZTv0_n32_N8S21198C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21198C9D1Ev,_ZThn32_N8S21198C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21198C3D0Ev,_ZTv0_n12_N8S21198C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1040_N8S21198C3D0Ev,_ZThn600_N8S21198C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21198C3D1Ev,_ZTv0_n12_N8S21198C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1040_N8S21198C3D1Ev,_ZThn600_N8S21198C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21198C1D0Ev,_ZTv0_n32_N8S21198C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6176_N8S21198C1D0Ev,_ZThn3592_N8S21198C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21198C1D1Ev,_ZTv0_n32_N8S21198C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6176_N8S21198C1D1Ev,_ZThn3592_N8S21198C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21198C1D0Ev,_ZTv0_n36_N8S21198C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6136_N8S21198C1D0Ev,_ZThn3560_N8S21198C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S21198C1D1Ev,_ZTv0_n36_N8S21198C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6136_N8S21198C1D1Ev,_ZThn3560_N8S21198C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21198C1D0Ev,_ZTv0_n16_N8S21198C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6080_N8S21198C1D0Ev,_ZThn3528_N8S21198C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21198C1D1Ev,_ZTv0_n16_N8S21198C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6080_N8S21198C1D1Ev,_ZThn3528_N8S21198C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21198C1D0Ev,_ZTv0_n20_N8S21198C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4592_N8S21198C1D0Ev,_ZThn2668_N8S21198C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21198C1D1Ev,_ZTv0_n20_N8S21198C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4592_N8S21198C1D1Ev,_ZThn2668_N8S21198C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21198C1D0Ev,_ZTv0_n12_N8S21198C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9456_N8S21198C1D0Ev,_ZThn5500_N8S21198C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8784_N8S21198C1D0Ev,_ZThn5120_N8S21198C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8432_N8S21198C1D0Ev,_ZThn4920_N8S21198C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5632_N8S21198C1D0Ev,_ZThn3268_N8S21198C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N8S21198C1D0Ev,_ZThn2640_N8S21198C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21198C1D1Ev,_ZTv0_n12_N8S21198C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9456_N8S21198C1D1Ev,_ZThn5500_N8S21198C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8784_N8S21198C1D1Ev,_ZThn5120_N8S21198C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8432_N8S21198C1D1Ev,_ZThn4920_N8S21198C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5632_N8S21198C1D1Ev,_ZThn3268_N8S21198C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4544_N8S21198C1D1Ev,_ZThn2640_N8S21198C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21198C1 = {  "S21198C1", // class name
  bases_S21198C1, 18,
  &(vtc_S21198C1[0]), // expected_vtbl_contents
  &(vtt_S21198C1[0]), // expected_vtt_contents
  ABISELECT(9728,5656), // object size
  NSPAIRA(_ZTI8S21198C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21198C1),93, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21198C1),35, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21164C5  : S19917C5 {
  int s21164c5f0;
  void *s21164c5f1[4];
  long double s21164c5f2[5];
  void *s21164c5f3[2];
  ::S19917C5 s21164c5f4;
  long s21164c5f5[3];
  virtual  ~S21164C5(); // _ZN8S21164C5D1Ev
  virtual void  v5(); // _ZN8S21164C52v5Ev
  virtual void  v6(); // _ZN8S21164C52v6Ev
  S21164C5(); // tgen
};
//SIG(-1 S21164C5) C1{ BC2{ vd m Fp FD Fi Fp} vd v1 v2 Fi Fp[4] FD[5] Fp[2] FC2 Fl[3]}


 S21164C5 ::~S21164C5(){ note_dtor("S21164C5", this);}
void  S21164C5 ::v5(){vfunc_called(this, "_ZN8S21164C52v5Ev");}
void  S21164C5 ::v6(){vfunc_called(this, "_ZN8S21164C52v6Ev");}
S21164C5 ::S21164C5(){ note_ctor("S21164C5", this);} // tgen

static void Test_S21164C5()
{
  extern Class_Descriptor cd_S21164C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,40)];
    init_test(&cd_S21164C5, buf);
    S21164C5 *dp, &lv = *(dp=new (buf) S21164C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,156), "sizeof(S21164C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21164C5)");
    check_base_class_offset(lv, (S19917C5*), 0, "S21164C5");
    check_field_offset(lv, s21164c5f0, ABISELECT(48,28), "S21164C5.s21164c5f0");
    check_field_offset(lv, s21164c5f1, ABISELECT(56,32), "S21164C5.s21164c5f1");
    check_field_offset(lv, s21164c5f2, ABISELECT(96,48), "S21164C5.s21164c5f2");
    check_field_offset(lv, s21164c5f3, ABISELECT(176,108), "S21164C5.s21164c5f3");
    check_field_offset(lv, s21164c5f4, ABISELECT(192,116), "S21164C5.s21164c5f4");
    check_field_offset(lv, s21164c5f5, ABISELECT(240,144), "S21164C5.s21164c5f5");
    test_class_info(&lv, &cd_S21164C5);
    dp->~S21164C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21164C5(Test_S21164C5, "S21164C5", ABISELECT(272,156));

#else // __cplusplus

extern void _ZN8S21164C5C1Ev();
extern void _ZN8S21164C5D1Ev();
Name_Map name_map_S21164C5[] = {
  NSPAIR(_ZN8S21164C5C1Ev),
  NSPAIR(_ZN8S21164C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
static Base_Class bases_S21164C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S21164C5[];
extern void _ZN8S21164C5D1Ev();
extern void _ZN8S21164C5D0Ev();
extern void _ZN8S21164C52v5Ev();
extern void _ZN8S21164C52v6Ev();
static  VTBL_ENTRY vtc_S21164C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21164C5[0]),
  (VTBL_ENTRY)&_ZN8S21164C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21164C5D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C52v5Ev,
  (VTBL_ENTRY)&_ZN8S21164C52v6Ev,
};
extern VTBL_ENTRY _ZTI8S21164C5[];
extern  VTBL_ENTRY _ZTV8S21164C5[];
Class_Descriptor cd_S21164C5 = {  "S21164C5", // class name
  bases_S21164C5, 1,
  &(vtc_S21164C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,156), // object size
  NSPAIRA(_ZTI8S21164C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S21164C5),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  S21164C4  {
  __tsi64 s21164c4f0;
  int s21164c4f1;
  ::S21164C5 s21164c4f2;
  int s21164c4f3;
  ::S19917C5 s21164c4f4;
  void *s21164c4f5;
  int s21164c4f6;
  ::S21164C5 s21164c4f7;
  long double s21164c4f8;
  virtual  ~S21164C4(); // _ZN8S21164C4D1Ev
  virtual void  v4(); // _ZN8S21164C42v4Ev
  S21164C4(); // tgen
};
//SIG(-1 S21164C4) C1{ vd v1 FL Fi FC2{ BC3{ vd m Fp FD Fi Fp} vd v2 v3 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} Fi FC3 Fp Fi FC2 FD}


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

static void Test_S21164C4()
{
  extern Class_Descriptor cd_S21164C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(43,96)];
    init_test(&cd_S21164C4, buf);
    S21164C4 *dp, &lv = *(dp=new (buf) S21164C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(672,380), "sizeof(S21164C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21164C4)");
    check_field_offset(lv, s21164c4f0, ABISELECT(8,4), "S21164C4.s21164c4f0");
    check_field_offset(lv, s21164c4f1, ABISELECT(16,12), "S21164C4.s21164c4f1");
    check_field_offset(lv, s21164c4f2, ABISELECT(32,16), "S21164C4.s21164c4f2");
    check_field_offset(lv, s21164c4f3, ABISELECT(304,172), "S21164C4.s21164c4f3");
    check_field_offset(lv, s21164c4f4, ABISELECT(320,176), "S21164C4.s21164c4f4");
    check_field_offset(lv, s21164c4f5, ABISELECT(368,204), "S21164C4.s21164c4f5");
    check_field_offset(lv, s21164c4f6, ABISELECT(376,208), "S21164C4.s21164c4f6");
    check_field_offset(lv, s21164c4f7, ABISELECT(384,212), "S21164C4.s21164c4f7");
    check_field_offset(lv, s21164c4f8, ABISELECT(656,368), "S21164C4.s21164c4f8");
    test_class_info(&lv, &cd_S21164C4);
    dp->~S21164C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21164C4(Test_S21164C4, "S21164C4", ABISELECT(672,380));

#else // __cplusplus

extern void _ZN8S21164C4C1Ev();
extern void _ZN8S21164C4D1Ev();
Name_Map name_map_S21164C4[] = {
  NSPAIR(_ZN8S21164C4C1Ev),
  NSPAIR(_ZN8S21164C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21164C4[];
extern void _ZN8S21164C4D1Ev();
extern void _ZN8S21164C4D0Ev();
extern void _ZN8S21164C42v4Ev();
static  VTBL_ENTRY vtc_S21164C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21164C4[0]),
  (VTBL_ENTRY)&_ZN8S21164C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21164C4D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C42v4Ev,
};
extern VTBL_ENTRY _ZTI8S21164C4[];
extern  VTBL_ENTRY _ZTV8S21164C4[];
Class_Descriptor cd_S21164C4 = {  "S21164C4", // class name
  0,0,//no base classes
  &(vtc_S21164C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(672,380), // object size
  NSPAIRA(_ZTI8S21164C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21164C4),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21164C9  : S19917C5 {
  __tsi64 s21164c9f0[2];
  ::S19917C5 s21164c9f1;
  int s21164c9f2[3];
  void *s21164c9f3[4];
  ::S21164C5 s21164c9f4;
  char s21164c9f5:5;
  virtual void  v1(); // _ZN8S21164C92v1Ev
  virtual void  v2(); // _ZN8S21164C92v2Ev
  ~S21164C9(); // tgen
  S21164C9(); // tgen
};
//SIG(-1 S21164C9) C1{ BC2{ vd m Fp FD Fi Fp} v1 v2 FL[2] FC2 Fi[3] Fp[4] FC3{ BC2 vd v3 v4 Fi Fp[4] FD[5] Fp[2] FC2 Fl[3]} Fc:5}


void  S21164C9 ::v1(){vfunc_called(this, "_ZN8S21164C92v1Ev");}
void  S21164C9 ::v2(){vfunc_called(this, "_ZN8S21164C92v2Ev");}
S21164C9 ::~S21164C9(){ note_dtor("S21164C9", this);} // tgen
S21164C9 ::S21164C9(){ note_ctor("S21164C9", this);} // tgen

static void Test_S21164C9()
{
  extern Class_Descriptor cd_S21164C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(29,66)];
    init_test(&cd_S21164C9, buf);
    S21164C9 *dp, &lv = *(dp=new (buf) S21164C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,260), "sizeof(S21164C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21164C9)");
    check_base_class_offset(lv, (S19917C5*), 0, "S21164C9");
    check_field_offset(lv, s21164c9f0, ABISELECT(48,28), "S21164C9.s21164c9f0");
    check_field_offset(lv, s21164c9f1, ABISELECT(64,44), "S21164C9.s21164c9f1");
    check_field_offset(lv, s21164c9f2, ABISELECT(112,72), "S21164C9.s21164c9f2");
    check_field_offset(lv, s21164c9f3, ABISELECT(128,84), "S21164C9.s21164c9f3");
    check_field_offset(lv, s21164c9f4, ABISELECT(160,100), "S21164C9.s21164c9f4");
    set_bf_and_test(lv, s21164c9f5, ABISELECT(432,256), 0, 5, 1, "S21164C9");
    set_bf_and_test(lv, s21164c9f5, ABISELECT(432,256), 0, 5, hide_sll(1LL<<4), "S21164C9");
    test_class_info(&lv, &cd_S21164C9);
    dp->~S21164C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21164C9(Test_S21164C9, "S21164C9", ABISELECT(448,260));

#else // __cplusplus

extern void _ZN8S21164C9C1Ev();
extern void _ZN8S21164C9D1Ev();
Name_Map name_map_S21164C9[] = {
  NSPAIR(_ZN8S21164C9C1Ev),
  NSPAIR(_ZN8S21164C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
static Base_Class bases_S21164C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S21164C9[];
extern void _ZN8S21164C9D1Ev();
extern void _ZN8S21164C9D0Ev();
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
static  VTBL_ENTRY vtc_S21164C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21164C9[0]),
  (VTBL_ENTRY)&_ZN8S21164C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21164C9D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
};
extern VTBL_ENTRY _ZTI8S21164C9[];
extern  VTBL_ENTRY _ZTV8S21164C9[];
Class_Descriptor cd_S21164C9 = {  "S21164C9", // class name
  bases_S21164C9, 1,
  &(vtc_S21164C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,260), // object size
  NSPAIRA(_ZTI8S21164C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S21164C9),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  S21164C8  : virtual S21164C9 , S19917C5 {
  int s21164c8f0;
  virtual  ~S21164C8(); // _ZN8S21164C8D2Ev
  virtual void  v3(); // _ZN8S21164C82v3Ev
  S21164C8(); // tgen
};
//SIG(-1 S21164C8) C1{ VBC2{ BC3{ vd m Fp FD Fi Fp} v2 v3 FL[2] FC3 Fi[3] Fp[4] FC4{ BC3 vd v4 v5 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} Fc:5} BC3 vd v1 Fi}


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

static void Test_S21164C8()
{
  extern Class_Descriptor cd_S21164C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,74)];
    init_test(&cd_S21164C8, buf);
    S21164C8 *dp, &lv = *(dp=new (buf) S21164C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,292), "sizeof(S21164C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21164C8)");
    check_base_class_offset(lv, (S19917C5*)(S21164C9*), ABISELECT(64,32), "S21164C8");
    check_base_class_offset(lv, (S21164C9*), ABISELECT(64,32), "S21164C8");
    /*is_ambiguous_... S21164C8::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*), 0, "S21164C8");
    check_field_offset(lv, s21164c8f0, ABISELECT(48,28), "S21164C8.s21164c8f0");
    test_class_info(&lv, &cd_S21164C8);
    dp->~S21164C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21164C8(Test_S21164C8, "S21164C8", ABISELECT(512,292));

#else // __cplusplus

extern void _ZN8S21164C8C1Ev();
extern void _ZN8S21164C8D2Ev();
Name_Map name_map_S21164C8[] = {
  NSPAIR(_ZN8S21164C8C1Ev),
  NSPAIR(_ZN8S21164C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21164C9;
extern VTBL_ENTRY _ZTI8S21164C9[];
extern  VTBL_ENTRY _ZTV8S21164C9[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
static Base_Class bases_S21164C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    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
    1, //immediately_derived
  0, 0},
  {&cd_S21164C9,    ABISELECT(64,32), //bcp->offset
    6, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S21164C8[];
extern void _ZN8S21164C8D1Ev();
extern void _ZN8S21164C8D0Ev();
extern void _ZN8S21164C82v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21164C8D1Ev,_ZThn32_N8S21164C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S21164C8D0Ev,_ZThn32_N8S21164C8D0Ev)() __attribute__((weak));
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
static  VTBL_ENTRY vtc_S21164C8[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21164C8[0]),
  (VTBL_ENTRY)&_ZN8S21164C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21164C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21164C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
};
extern VTBL_ENTRY _ZTV8S21164C8[];
static  VTT_ENTRY vtt_S21164C8[] = {
  {&(_ZTV8S21164C8[3]),  3,15},
  {&(_ZTV8S21164C8[11]),  11,15},
};
extern VTBL_ENTRY _ZTI8S21164C8[];
extern  VTBL_ENTRY _ZTV8S21164C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21164C8[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21164C8D0Ev,_ZThn32_N8S21164C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21164C8D1Ev,_ZThn32_N8S21164C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21164C8 = {  "S21164C8", // class name
  bases_S21164C8, 3,
  &(vtc_S21164C8[0]), // expected_vtbl_contents
  &(vtt_S21164C8[0]), // expected_vtt_contents
  ABISELECT(512,292), // object size
  NSPAIRA(_ZTI8S21164C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21164C8),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21164C8),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21164C10  : virtual S21164C9 , S21164C8 , S21164C4 , virtual S19917C3 {
  ::S19917C12_nt s21164c10f0;
  long double s21164c10f1[10];
  ::S21164C8 s21164c10f2;
  ::S21164C4 s21164c10f3;
  int s21164c10f4;
  virtual  ~S21164C10(); // _ZN9S21164C10D2Ev
  S21164C10(); // tgen
};
//SIG(-1 S21164C10) C1{ VBC2{ BC3{ vd m Fp FD Fi Fp} v1 v2 FL[2] FC3 Fi[3] Fp[4] FC4{ BC3 vd v5 v6 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} Fc:5} BC5{ VBC2 BC3 vd v3 Fi} BC6{ vd v4 FL Fi FC4 Fi FC3 Fp Fi FC4 FD} VBC7{ vd m FC8{ BC3 vd v7 v8 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} FD[3] Fp} vd FC9{} FD[10] FC5 FC6 Fi}


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

static void Test_S21164C10()
{
  extern Class_Descriptor cd_S21164C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(183,419)];
    init_test(&cd_S21164C10, buf);
    S21164C10 *dp, &lv = *(dp=new (buf) S21164C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2912,1672), "sizeof(S21164C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21164C10)");
    check_base_class_offset(lv, (S19917C5*)(S21164C9*), ABISELECT(2112,1212), "S21164C10");
    check_base_class_offset(lv, (S21164C9*), ABISELECT(2112,1212), "S21164C10");
    check_base_class_offset(lv, (S21164C9*)(S21164C8*), ABISELECT(2112,1212), "S21164C10");
    /*is_ambiguous_... S21164C8::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S21164C8*), 0, "S21164C10");
    check_base_class_offset(lv, (S21164C8*), 0, "S21164C10");
    check_base_class_offset(lv, (S21164C4*), ABISELECT(64,32), "S21164C10");
    check_base_class_offset(lv, (S19917C3*), ABISELECT(2560,1472), "S21164C10");
    check_field_offset(lv, s21164c10f0, ABISELECT(736,412), "S21164C10.s21164c10f0");
    check_field_offset(lv, s21164c10f1, ABISELECT(752,416), "S21164C10.s21164c10f1");
    check_field_offset(lv, s21164c10f2, ABISELECT(912,536), "S21164C10.s21164c10f2");
    check_field_offset(lv, s21164c10f3, ABISELECT(1424,828), "S21164C10.s21164c10f3");
    check_field_offset(lv, s21164c10f4, ABISELECT(2096,1208), "S21164C10.s21164c10f4");
    test_class_info(&lv, &cd_S21164C10);
    dp->~S21164C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21164C10(Test_S21164C10, "S21164C10", ABISELECT(2912,1672));

#else // __cplusplus

extern void _ZN9S21164C10C1Ev();
extern void _ZN9S21164C10D2Ev();
Name_Map name_map_S21164C10[] = {
  NSPAIR(_ZN9S21164C10C1Ev),
  NSPAIR(_ZN9S21164C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21164C9;
extern VTBL_ENTRY _ZTI8S21164C9[];
extern  VTBL_ENTRY _ZTV8S21164C9[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21164C8;
extern VTBL_ENTRY _ZTI8S21164C8[];
extern  VTBL_ENTRY _ZTV8S21164C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21164C8[];
extern Class_Descriptor cd_S21164C4;
extern VTBL_ENTRY _ZTI8S21164C4[];
extern  VTBL_ENTRY _ZTV8S21164C4[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
static Base_Class bases_S21164C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    ABISELECT(2112,1212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S21164C9,    ABISELECT(2112,1212), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //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_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S21164C8,    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},
  {&cd_S21164C4,    ABISELECT(64,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19917C3,    ABISELECT(2560,1472), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21164C10[];
extern void _ZN9S21164C10D1Ev();
extern void _ZN9S21164C10D0Ev();
extern void _ZN8S21164C82v3Ev();
extern void ABISELECT(_ZThn64_N9S21164C10D1Ev,_ZThn32_N9S21164C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S21164C10D0Ev,_ZThn32_N9S21164C10D0Ev)();
extern void _ZN8S21164C42v4Ev();
extern void ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev)();
extern void ABISELECT(_ZThn2112_N9S21164C10D1Ev,_ZThn1212_N9S21164C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev)();
extern void ABISELECT(_ZThn2112_N9S21164C10D0Ev,_ZThn1212_N9S21164C10D0Ev)() __attribute__((weak));
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
extern void ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev)();
extern void ABISELECT(_ZThn2560_N9S21164C10D1Ev,_ZThn1472_N9S21164C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev)();
extern void ABISELECT(_ZThn2560_N9S21164C10D0Ev,_ZThn1472_N9S21164C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21164C10[] = {
  ABISELECT(2560,1472),
  ABISELECT(2112,1212),
  0,
  (VTBL_ENTRY)&(_ZTI9S21164C10[0]),
  (VTBL_ENTRY)&_ZN9S21164C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21164C10D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S21164C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S21164C10D1Ev,_ZThn32_N9S21164C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S21164C10D0Ev,_ZThn32_N9S21164C10D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C42v4Ev,
  0,
  0,
  ABISELECT(-2112,-1212),
  ABISELECT(-2112,-1212),
  (VTBL_ENTRY)&(_ZTI9S21164C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
  ABISELECT(-2560,-1472),
  ABISELECT(-2560,-1472),
  (VTBL_ENTRY)&(_ZTI9S21164C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S21164C10[];
extern void _ZN8S21164C8D1Ev();
extern void _ZN8S21164C8D0Ev();
extern void _ZN8S21164C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C8__9S21164C10[] = {
  ABISELECT(2112,1212),
  0,
  (VTBL_ENTRY)&(_ZTI8S21164C8[0]),
  (VTBL_ENTRY)&_ZN8S21164C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21164C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev)();
extern void ABISELECT(_ZThn2112_N8S21164C8D1Ev,_ZThn1212_N8S21164C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev)();
extern void ABISELECT(_ZThn2112_N8S21164C8D0Ev,_ZThn1212_N8S21164C8D0Ev)() __attribute__((weak));
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C9__8S21164C8__9S21164C10[] = {
  0,
  0,
  ABISELECT(-2112,-1212),
  ABISELECT(-2112,-1212),
  (VTBL_ENTRY)&(_ZTI8S21164C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
};
static  VTT_ENTRY vtt_S21164C10[] = {
  {&(_ZTV9S21164C10[4]),  4,26},
  {&(_tg__ZTV8S21164C8__9S21164C10[3]),  3,6},
  {&(_tg__ZTV8S21164C9__8S21164C8__9S21164C10[5]),  5,9},
  {&(_ZTV9S21164C10[17]),  17,26},
  {&(_ZTV9S21164C10[24]),  24,26},
};
extern VTBL_ENTRY _ZTI9S21164C10[];
extern  VTBL_ENTRY _ZTV9S21164C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21164C10[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S21164C8D0Ev,_ZThn1212_N8S21164C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S21164C8D1Ev,_ZThn1212_N8S21164C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N9S21164C10D0Ev,_ZThn1472_N9S21164C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N9S21164C10D0Ev,_ZThn1212_N9S21164C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2560_N9S21164C10D1Ev,_ZThn1472_N9S21164C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N9S21164C10D1Ev,_ZThn1212_N9S21164C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21164C10 = {  "S21164C10", // class name
  bases_S21164C10, 6,
  &(vtc_S21164C10[0]), // expected_vtbl_contents
  &(vtt_S21164C10[0]), // expected_vtt_contents
  ABISELECT(2912,1672), // object size
  NSPAIRA(_ZTI9S21164C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S21164C10),26, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21164C10),5, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21164C6  : virtual S19917C3 , virtual S21164C8 , S21164C10 , virtual S21164C4 , virtual S21164C5 {
  int s21164c6f0;
  char s21164c6f1;
  char s21164c6f2:8;
  long double s21164c6f3[8];
  int s21164c6f4;
  char s21164c6f5;
  void *s21164c6f6;
  virtual  ~S21164C6(); // _ZN8S21164C6D2Ev
  S21164C6(); // tgen
};
//SIG(-1 S21164C6) C1{ VBC2{ vd m FC3{ BC4{ vd m Fp FD Fi Fp} vd v7 v8 Fi Fp[4] FD[5] Fp[2] FC4 Fl[3]} FD[3] Fp} VBC5{ VBC6{ BC4 v1 v2 FL[2] FC4 Fi[3] Fp[4] FC7{ BC4 vd v5 v6 Fi Fp[4] FD[5] Fp[2] FC4 Fl[3]} Fc:5} BC4 vd v3 Fi} BC8{ VBC6 BC5 BC9{ vd v4 FL Fi FC7 Fi FC4 Fp Fi FC7 FD} VBC2 vd FC10{} FD[10] FC5 FC9 Fi} VBC9 VBC7 vd Fi Fc Fc:8 FD[8] Fi Fc Fp}


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

static void Test_S21164C6()
{
  extern Class_Descriptor cd_S21164C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(255,590)];
    init_test(&cd_S21164C6, buf);
    S21164C6 *dp, &lv = *(dp=new (buf) S21164C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4064,2356), "sizeof(S21164C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21164C6)");
    check_base_class_offset(lv, (S19917C3*), ABISELECT(2256,1328), "S21164C6");
    check_base_class_offset(lv, (S19917C3*)(S21164C10*), ABISELECT(2256,1328), "S21164C6");
    check_base_class_offset(lv, (S19917C5*)(S21164C9*), ABISELECT(2672,1560), "S21164C6");
    /*is_ambiguous_... S21164C6::S21164C8 */ AMB_check_base_class_offset(lv, (S21164C9*)(S21164C8*), ABISELECT(2672,1560), "S21164C6");
    check_base_class_offset(lv, (S21164C9*)(S21164C10*), ABISELECT(2672,1560), "S21164C6");
    check_base_class_offset(lv, (S21164C9*)(S21164C8*)(S21164C10*), ABISELECT(2672,1560), "S21164C6");
    /*is_ambiguous_... S21164C6::S21164C8 */ AMB_check_base_class_offset(lv, (S19917C5*)(S21164C8*), ABISELECT(2608,1528), "S21164C6");
    /*is_ambiguous_... S21164C6::S21164C8 */ AMB_check_base_class_offset(lv, (S21164C8*), ABISELECT(2608,1528), "S21164C6");
    /*is_ambiguous_... S21164C8::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S21164C8*)(S21164C10*), 0, "S21164C6");
    check_base_class_offset(lv, (S21164C8*)(S21164C10*), 0, "S21164C6");
    check_base_class_offset(lv, (S21164C4*)(S21164C10*), ABISELECT(64,32), "S21164C6");
    check_base_class_offset(lv, (S21164C10*), 0, "S21164C6");
    /*is_ambiguous_... S21164C6::S21164C4 */ AMB_check_base_class_offset(lv, (S21164C4*), ABISELECT(3120,1820), "S21164C6");
    check_base_class_offset(lv, (S19917C5*)(S21164C5*), ABISELECT(3792,2200), "S21164C6");
    check_base_class_offset(lv, (S21164C5*), ABISELECT(3792,2200), "S21164C6");
    check_field_offset(lv, s21164c6f0, ABISELECT(2100,1212), "S21164C6.s21164c6f0");
    check_field_offset(lv, s21164c6f1, ABISELECT(2104,1216), "S21164C6.s21164c6f1");
    set_bf_and_test(lv, s21164c6f2, ABISELECT(2105,1217), 0, 8, 1, "S21164C6");
    set_bf_and_test(lv, s21164c6f2, ABISELECT(2105,1217), 0, 8, hide_sll(1LL<<7), "S21164C6");
    check_field_offset(lv, s21164c6f3, ABISELECT(2112,1220), "S21164C6.s21164c6f3");
    check_field_offset(lv, s21164c6f4, ABISELECT(2240,1316), "S21164C6.s21164c6f4");
    check_field_offset(lv, s21164c6f5, ABISELECT(2244,1320), "S21164C6.s21164c6f5");
    check_field_offset(lv, s21164c6f6, ABISELECT(2248,1324), "S21164C6.s21164c6f6");
    test_class_info(&lv, &cd_S21164C6);
    dp->~S21164C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21164C6(Test_S21164C6, "S21164C6", ABISELECT(4064,2356));

#else // __cplusplus

extern void _ZN8S21164C6C1Ev();
extern void _ZN8S21164C6D2Ev();
Name_Map name_map_S21164C6[] = {
  NSPAIR(_ZN8S21164C6C1Ev),
  NSPAIR(_ZN8S21164C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21164C9;
extern VTBL_ENTRY _ZTI8S21164C9[];
extern  VTBL_ENTRY _ZTV8S21164C9[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21164C8;
extern VTBL_ENTRY _ZTI8S21164C8[];
extern  VTBL_ENTRY _ZTV8S21164C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21164C8[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21164C8;
extern VTBL_ENTRY _ZTI8S21164C8[];
extern  VTBL_ENTRY _ZTV8S21164C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21164C8[];
extern Class_Descriptor cd_S21164C4;
extern VTBL_ENTRY _ZTI8S21164C4[];
extern  VTBL_ENTRY _ZTV8S21164C4[];
extern Class_Descriptor cd_S21164C10;
extern VTBL_ENTRY _ZTI9S21164C10[];
extern  VTBL_ENTRY _ZTV9S21164C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21164C10[];
extern Class_Descriptor cd_S21164C4;
extern VTBL_ENTRY _ZTI8S21164C4[];
extern  VTBL_ENTRY _ZTV8S21164C4[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21164C5;
extern VTBL_ENTRY _ZTI8S21164C5[];
extern  VTBL_ENTRY _ZTV8S21164C5[];
static Base_Class bases_S21164C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C3,    ABISELECT(2256,1328), //bcp->offset
    15, //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
  1, 1},
  {&cd_S19917C5,    ABISELECT(2672,1560), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21164C9,    ABISELECT(2672,1560), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(2608,1528), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21164C8,    ABISELECT(2608,1528), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21164C8,    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
    10, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21164C4,    ABISELECT(64,32), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21164C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21164C4,    ABISELECT(3120,1820), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C5,    ABISELECT(3792,2200), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21164C5,    ABISELECT(3792,2200), //bcp->offset
    44, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21164C6[];
extern void _ZN8S21164C6D1Ev();
extern void _ZN8S21164C6D0Ev();
extern void _ZN8S21164C82v3Ev();
extern void ABISELECT(_ZThn64_N8S21164C6D1Ev,_ZThn32_N8S21164C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S21164C6D0Ev,_ZThn32_N8S21164C6D0Ev)();
extern void _ZN8S21164C42v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev)();
extern void ABISELECT(_ZThn2256_N8S21164C6D1Ev,_ZThn1328_N8S21164C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev)();
extern void ABISELECT(_ZThn2256_N8S21164C6D0Ev,_ZThn1328_N8S21164C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21164C6D1Ev,_ZTv0_n16_N8S21164C6D1Ev)();
extern void ABISELECT(_ZThn2608_N8S21164C6D1Ev,_ZThn1528_N8S21164C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21164C6D0Ev,_ZTv0_n16_N8S21164C6D0Ev)();
extern void ABISELECT(_ZThn2608_N8S21164C6D0Ev,_ZThn1528_N8S21164C6D0Ev)() __attribute__((weak));
extern void _ZN8S21164C82v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev)();
extern void ABISELECT(_ZThn2672_N8S21164C6D1Ev,_ZThn1560_N8S21164C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev)();
extern void ABISELECT(_ZThn2672_N8S21164C6D0Ev,_ZThn1560_N8S21164C6D0Ev)() __attribute__((weak));
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev)();
extern void ABISELECT(_ZThn3120_N8S21164C6D1Ev,_ZThn1820_N8S21164C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev)();
extern void ABISELECT(_ZThn3120_N8S21164C6D0Ev,_ZThn1820_N8S21164C6D0Ev)() __attribute__((weak));
extern void _ZN8S21164C42v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev)();
extern void ABISELECT(_ZThn3792_N8S21164C6D1Ev,_ZThn2200_N8S21164C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev)();
extern void ABISELECT(_ZThn3792_N8S21164C6D0Ev,_ZThn2200_N8S21164C6D0Ev)() __attribute__((weak));
extern void _ZN8S21164C52v5Ev();
extern void _ZN8S21164C52v6Ev();
static  VTBL_ENTRY vtc_S21164C6[] = {
  ABISELECT(3792,2200),
  ABISELECT(3120,1820),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&_ZN8S21164C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21164C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21164C6D1Ev,_ZThn32_N8S21164C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S21164C6D0Ev,_ZThn32_N8S21164C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C42v4Ev,
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev),
  0,
  ABISELECT(-2608,-1528),
  ABISELECT(64,32),
  ABISELECT(-2608,-1528),
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21164C6D1Ev,_ZTv0_n16_N8S21164C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21164C6D0Ev,_ZTv0_n16_N8S21164C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
  0,
  ABISELECT(-3120,-1820),
  ABISELECT(-3120,-1820),
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C42v4Ev,
  0,
  0,
  ABISELECT(-3792,-2200),
  ABISELECT(-3792,-2200),
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C52v5Ev,
  (VTBL_ENTRY)&_ZN8S21164C52v6Ev,
};
extern VTBL_ENTRY _ZTV8S21164C6[];
extern void _ZN9S21164C10D1Ev();
extern void _ZN9S21164C10D0Ev();
extern void _ZN8S21164C82v3Ev();
static  VTBL_ENTRY _tg__ZTV9S21164C10__8S21164C6[] = {
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI9S21164C10[0]),
  (VTBL_ENTRY)&_ZN9S21164C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21164C10D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
};
extern void _ZN8S21164C8D1Ev();
extern void _ZN8S21164C8D0Ev();
extern void _ZN8S21164C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C89S21164C10__A1__8S21164C6[] = {
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI8S21164C8[0]),
  (VTBL_ENTRY)&_ZN8S21164C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21164C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev)();
extern void ABISELECT(_ZThn2672_N8S21164C8D1Ev,_ZThn1560_N8S21164C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev)();
extern void ABISELECT(_ZThn2672_N8S21164C8D0Ev,_ZThn1560_N8S21164C8D0Ev)() __attribute__((weak));
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C9__8S21164C89S21164C10__A1__8S21164C6[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI8S21164C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev)();
extern void ABISELECT(_ZThn2672_N9S21164C10D1Ev,_ZThn1560_N9S21164C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev)();
extern void ABISELECT(_ZThn2672_N9S21164C10D0Ev,_ZThn1560_N9S21164C10D0Ev)() __attribute__((weak));
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C9__9S21164C10__8S21164C6[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI9S21164C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev)();
extern void ABISELECT(_ZThn2256_N9S21164C10D1Ev,_ZThn1328_N9S21164C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev)();
extern void ABISELECT(_ZThn2256_N9S21164C10D0Ev,_ZThn1328_N9S21164C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__9S21164C10__8S21164C6[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI9S21164C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev),
};
extern void _ZN8S21164C8D1Ev();
extern void _ZN8S21164C8D0Ev();
extern void _ZN8S21164C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C8__8S21164C6[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21164C8[0]),
  (VTBL_ENTRY)&_ZN8S21164C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21164C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21164C8D1Ev,_ZThn32_N8S21164C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S21164C8D0Ev,_ZThn32_N8S21164C8D0Ev)() __attribute__((weak));
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C9__8S21164C8__8S21164C6[] = {
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21164C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
};
static  VTT_ENTRY vtt_S21164C6[] = {
  {&(_ZTV8S21164C6[7]),  7,53},
  {&(_tg__ZTV9S21164C10__8S21164C6[4]),  4,7},
  {&(_tg__ZTV8S21164C89S21164C10__A1__8S21164C6[3]),  3,6},
  {&(_tg__ZTV8S21164C9__8S21164C89S21164C10__A1__8S21164C6[5]),  5,9},
  {&(_tg__ZTV8S21164C9__9S21164C10__8S21164C6[5]),  5,9},
  {&(_tg__ZTV8S19917C3__9S21164C10__8S21164C6[3]),  3,5},
  {&(_ZTV8S21164C6[18]),  18,53},
  {&(_ZTV8S21164C6[25]),  25,53},
  {&(_ZTV8S21164C6[33]),  33,53},
  {&(_ZTV8S21164C6[41]),  41,53},
  {&(_ZTV8S21164C6[49]),  49,53},
  {&(_tg__ZTV8S21164C8__8S21164C6[3]),  3,6},
  {&(_tg__ZTV8S21164C9__8S21164C8__8S21164C6[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S21164C6[];
extern  VTBL_ENTRY _ZTV8S21164C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21164C6[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S21164C10D0Ev,_ZThn1328_N9S21164C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S21164C10D0Ev,_ZThn1560_N9S21164C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S21164C10D1Ev,_ZThn1328_N9S21164C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S21164C10D1Ev,_ZThn1560_N9S21164C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21164C8D0Ev,_ZThn32_N8S21164C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S21164C8D0Ev,_ZThn1560_N8S21164C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21164C8D1Ev,_ZThn32_N8S21164C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S21164C8D1Ev,_ZThn1560_N8S21164C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21164C6D0Ev,_ZTv0_n16_N8S21164C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S21164C6D0Ev,_ZThn1528_N8S21164C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21164C6D1Ev,_ZTv0_n16_N8S21164C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S21164C6D1Ev,_ZThn1528_N8S21164C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3792_N8S21164C6D0Ev,_ZThn2200_N8S21164C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N8S21164C6D0Ev,_ZThn1820_N8S21164C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S21164C6D0Ev,_ZThn1560_N8S21164C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S21164C6D0Ev,_ZThn1328_N8S21164C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3792_N8S21164C6D1Ev,_ZThn2200_N8S21164C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N8S21164C6D1Ev,_ZThn1820_N8S21164C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S21164C6D1Ev,_ZThn1560_N8S21164C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S21164C6D1Ev,_ZThn1328_N8S21164C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21164C6 = {  "S21164C6", // class name
  bases_S21164C6, 12,
  &(vtc_S21164C6[0]), // expected_vtbl_contents
  &(vtt_S21164C6[0]), // expected_vtt_contents
  ABISELECT(4064,2356), // object size
  NSPAIRA(_ZTI8S21164C6),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21164C6),53, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21164C6),13, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21164C2  : virtual S19917C5 , virtual S21164C4 , virtual S21164C6 {
  short s21164c2f0;
  ::S21164C6 s21164c2f1[5];
  ::S21164C10 s21164c2f2;
  int s21164c2f3;
  void *s21164c2f4;
  char s21164c2f5:8;
  ::S21164C10 s21164c2f6;
  int s21164c2f7;
  __tsi64 s21164c2f8[3];
  ::S21164C6 s21164c2f9;
  long double s21164c2f10;
  virtual  ~S21164C2(); // _ZN8S21164C2D2Ev
  virtual void  v7(); // _ZN8S21164C22v7Ev
  S21164C2(); // tgen
};
//SIG(-1 S21164C2) C1{ VBC2{ vd m Fp FD Fi Fp} VBC3{ vd v2 FL Fi FC4{ BC2 vd v6 v7 Fi Fp[4] FD[5] Fp[2] FC2 Fl[3]} Fi FC2 Fp Fi FC4 FD} VBC5{ VBC6{ vd m FC7{ BC2 vd v8 v9 Fi Fp[4] FD[5] Fp[2] FC2 Fl[3]} FD[3] Fp} VBC8{ VBC9{ BC2 v3 v4 FL[2] FC2 Fi[3] Fp[4] FC4 Fc:5} BC2 vd v5 Fi} BC10{ VBC9 BC8 BC3 VBC6 vd FC11{} FD[10] FC8 FC3 Fi} VBC3 VBC4 vd Fi Fc Fc:8 FD[8] Fi Fc Fp} vd v1 Fs FC5[5] FC10 Fi Fp Fc:8 FC10 Fi FL[3] FC5 FD}


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

static void Test_S21164C2()
{
  extern Class_Descriptor cd_S21164C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2152,4982)];
    init_test(&cd_S21164C2, buf);
    S21164C2 *dp, &lv = *(dp=new (buf) S21164C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(34416,19924), "sizeof(S21164C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21164C2)");
    /*is_ambiguous_... S21164C2::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*), ABISELECT(30304,17540), "S21164C2");
    /*is_ambiguous_... S21164C2::S21164C4 */ AMB_check_base_class_offset(lv, (S21164C4*), ABISELECT(30352,17568), "S21164C2");
    /*is_ambiguous_... S21164C6::S21164C4 */ AMB_check_base_class_offset(lv, (S21164C4*)(S21164C6*), ABISELECT(30352,17568), "S21164C2");
    check_base_class_offset(lv, (S19917C3*)(S21164C6*), ABISELECT(33280,19276), "S21164C2");
    check_base_class_offset(lv, (S19917C3*)(S21164C10*)(S21164C6*), ABISELECT(33280,19276), "S21164C2");
    check_base_class_offset(lv, (S19917C5*)(S21164C9*), ABISELECT(33696,19508), "S21164C2");
    /*is_ambiguous_... S21164C2::S21164C8 */ AMB_check_base_class_offset(lv, (S21164C9*)(S21164C8*), ABISELECT(33696,19508), "S21164C2");
    check_base_class_offset(lv, (S21164C9*)(S21164C10*)(S21164C6*), ABISELECT(33696,19508), "S21164C2");
    check_base_class_offset(lv, (S21164C9*)(S21164C8*)(S21164C10*)(S21164C6*), ABISELECT(33696,19508), "S21164C2");
    /*is_ambiguous_... S21164C2::S21164C8 */ AMB_check_base_class_offset(lv, (S19917C5*)(S21164C8*), ABISELECT(33632,19476), "S21164C2");
    /*is_ambiguous_... S21164C6::S21164C8 */ AMB_check_base_class_offset(lv, (S21164C8*)(S21164C6*), ABISELECT(33632,19476), "S21164C2");
    /*is_ambiguous_... S21164C8::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S21164C8*)(S21164C10*)(S21164C6*), ABISELECT(31024,17948), "S21164C2");
    check_base_class_offset(lv, (S21164C8*)(S21164C10*)(S21164C6*), ABISELECT(31024,17948), "S21164C2");
    check_base_class_offset(lv, (S21164C4*)(S21164C10*)(S21164C6*), ABISELECT(31088,17980), "S21164C2");
    check_base_class_offset(lv, (S21164C10*)(S21164C6*), ABISELECT(31024,17948), "S21164C2");
    check_base_class_offset(lv, (S19917C5*)(S21164C5*), ABISELECT(34144,19768), "S21164C2");
    check_base_class_offset(lv, (S21164C5*)(S21164C6*), ABISELECT(34144,19768), "S21164C2");
    check_base_class_offset(lv, (S21164C6*), ABISELECT(31024,17948), "S21164C2");
    check_field_offset(lv, s21164c2f0, ABISELECT(8,4), "S21164C2.s21164c2f0");
    check_field_offset(lv, s21164c2f1, ABISELECT(16,8), "S21164C2.s21164c2f1");
    check_field_offset(lv, s21164c2f2, ABISELECT(20336,11788), "S21164C2.s21164c2f2");
    check_field_offset(lv, s21164c2f3, ABISELECT(23248,13460), "S21164C2.s21164c2f3");
    check_field_offset(lv, s21164c2f4, ABISELECT(23256,13464), "S21164C2.s21164c2f4");
    set_bf_and_test(lv, s21164c2f5, ABISELECT(23264,13468), 0, 8, 1, "S21164C2");
    set_bf_and_test(lv, s21164c2f5, ABISELECT(23264,13468), 0, 8, hide_sll(1LL<<7), "S21164C2");
    check_field_offset(lv, s21164c2f6, ABISELECT(23280,13472), "S21164C2.s21164c2f6");
    check_field_offset(lv, s21164c2f7, ABISELECT(26192,15144), "S21164C2.s21164c2f7");
    check_field_offset(lv, s21164c2f8, ABISELECT(26200,15148), "S21164C2.s21164c2f8");
    check_field_offset(lv, s21164c2f9, ABISELECT(26224,15172), "S21164C2.s21164c2f9");
    check_field_offset(lv, s21164c2f10, ABISELECT(30288,17528), "S21164C2.s21164c2f10");
    test_class_info(&lv, &cd_S21164C2);
    dp->~S21164C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21164C2(Test_S21164C2, "S21164C2", ABISELECT(34416,19924));

#else // __cplusplus

extern void _ZN8S21164C2C1Ev();
extern void _ZN8S21164C2D2Ev();
Name_Map name_map_S21164C2[] = {
  NSPAIR(_ZN8S21164C2C1Ev),
  NSPAIR(_ZN8S21164C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21164C4;
extern VTBL_ENTRY _ZTI8S21164C4[];
extern  VTBL_ENTRY _ZTV8S21164C4[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21164C9;
extern VTBL_ENTRY _ZTI8S21164C9[];
extern  VTBL_ENTRY _ZTV8S21164C9[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21164C8;
extern VTBL_ENTRY _ZTI8S21164C8[];
extern  VTBL_ENTRY _ZTV8S21164C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21164C8[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21164C8;
extern VTBL_ENTRY _ZTI8S21164C8[];
extern  VTBL_ENTRY _ZTV8S21164C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21164C8[];
extern Class_Descriptor cd_S21164C4;
extern VTBL_ENTRY _ZTI8S21164C4[];
extern  VTBL_ENTRY _ZTV8S21164C4[];
extern Class_Descriptor cd_S21164C10;
extern VTBL_ENTRY _ZTI9S21164C10[];
extern  VTBL_ENTRY _ZTV9S21164C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21164C10[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21164C5;
extern VTBL_ENTRY _ZTI8S21164C5[];
extern  VTBL_ENTRY _ZTV8S21164C5[];
extern Class_Descriptor cd_S21164C6;
extern VTBL_ENTRY _ZTI8S21164C6[];
extern  VTBL_ENTRY _ZTV8S21164C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21164C6[];
static Base_Class bases_S21164C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    ABISELECT(30304,17540), //bcp->offset
    12, //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_S21164C4,    ABISELECT(30352,17568), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C3,    ABISELECT(33280,19276), //bcp->offset
    42, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(33696,19508), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21164C9,    ABISELECT(33696,19508), //bcp->offset
    55, //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
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(33632,19476), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21164C8,    ABISELECT(33632,19476), //bcp->offset
    47, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(31024,17948), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S21164C8,    ABISELECT(31024,17948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S21164C4,    ABISELECT(31088,17980), //bcp->offset
    37, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S21164C10,    ABISELECT(31024,17948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19917C5,    ABISELECT(34144,19768), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S21164C5,    ABISELECT(34144,19768), //bcp->offset
    64, //bcp->virtual_function_table_offset
    5, //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
    13, //immediately_derived
  0, 1},
  {&cd_S21164C6,    ABISELECT(31024,17948), //bcp->offset
    24, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21164C2[];
extern void _ZN8S21164C2D1Ev();
extern void _ZN8S21164C2D0Ev();
extern void _ZN8S21164C22v7Ev();
extern void ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev)();
extern void ABISELECT(_ZThn30304_N8S21164C2D1Ev,_ZThn17540_N8S21164C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev)();
extern void ABISELECT(_ZThn30304_N8S21164C2D0Ev,_ZThn17540_N8S21164C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev)();
extern void ABISELECT(_ZThn30352_N8S21164C2D1Ev,_ZThn17568_N8S21164C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev)();
extern void ABISELECT(_ZThn30352_N8S21164C2D0Ev,_ZThn17568_N8S21164C2D0Ev)() __attribute__((weak));
extern void _ZN8S21164C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S21164C2D1Ev,_ZTv0_n32_N8S21164C2D1Ev)();
extern void ABISELECT(_ZThn31024_N8S21164C2D1Ev,_ZThn17948_N8S21164C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S21164C2D0Ev,_ZTv0_n32_N8S21164C2D0Ev)();
extern void ABISELECT(_ZThn31024_N8S21164C2D0Ev,_ZThn17948_N8S21164C2D0Ev)() __attribute__((weak));
extern void _ZN8S21164C82v3Ev();
extern void ABISELECT(_ZTvn64_n64_N8S21164C2D1Ev,_ZTvn32_n32_N8S21164C2D1Ev)();
extern void ABISELECT(_ZTvn64_n64_N8S21164C2D0Ev,_ZTvn32_n32_N8S21164C2D0Ev)();
extern void _ZN8S21164C42v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev)();
extern void ABISELECT(_ZThn33280_N8S21164C2D1Ev,_ZThn19276_N8S21164C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev)();
extern void ABISELECT(_ZThn33280_N8S21164C2D0Ev,_ZThn19276_N8S21164C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21164C2D1Ev,_ZTv0_n16_N8S21164C2D1Ev)();
extern void ABISELECT(_ZThn33632_N8S21164C2D1Ev,_ZThn19476_N8S21164C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21164C2D0Ev,_ZTv0_n16_N8S21164C2D0Ev)();
extern void ABISELECT(_ZThn33632_N8S21164C2D0Ev,_ZThn19476_N8S21164C2D0Ev)() __attribute__((weak));
extern void _ZN8S21164C82v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev)();
extern void ABISELECT(_ZThn33696_N8S21164C2D1Ev,_ZThn19508_N8S21164C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev)();
extern void ABISELECT(_ZThn33696_N8S21164C2D0Ev,_ZThn19508_N8S21164C2D0Ev)() __attribute__((weak));
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev)();
extern void ABISELECT(_ZThn34144_N8S21164C2D1Ev,_ZThn19768_N8S21164C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev)();
extern void ABISELECT(_ZThn34144_N8S21164C2D0Ev,_ZThn19768_N8S21164C2D0Ev)() __attribute__((weak));
extern void _ZN8S21164C52v5Ev();
extern void _ZN8S21164C52v6Ev();
static  VTBL_ENTRY vtc_S21164C2[] = {
  ABISELECT(34144,19768),
  ABISELECT(33696,19508),
  ABISELECT(33632,19476),
  ABISELECT(33280,19276),
  ABISELECT(31024,17948),
  ABISELECT(30352,17568),
  ABISELECT(30304,17540),
  0,
  (VTBL_ENTRY)&(_ZTI8S21164C2[0]),
  (VTBL_ENTRY)&_ZN8S21164C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21164C2D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C22v7Ev,
  ABISELECT(-30304,-17540),
  ABISELECT(-30304,-17540),
  (VTBL_ENTRY)&(_ZTI8S21164C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev),
  0,
  ABISELECT(-30352,-17568),
  ABISELECT(-30352,-17568),
  (VTBL_ENTRY)&(_ZTI8S21164C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C42v4Ev,
  ABISELECT(64,32),
  0,
  ABISELECT(-31024,-17948),
  ABISELECT(3120,1820),
  ABISELECT(-672,-380),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  ABISELECT(-31024,-17948),
  (VTBL_ENTRY)&(_ZTI8S21164C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21164C2D1Ev,_ZTv0_n32_N8S21164C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21164C2D0Ev,_ZTv0_n32_N8S21164C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
  ABISELECT(-31088,-17980),
  (VTBL_ENTRY)&(_ZTI8S21164C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S21164C2D1Ev,_ZTvn32_n32_N8S21164C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S21164C2D0Ev,_ZTvn32_n32_N8S21164C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C42v4Ev,
  ABISELECT(-33280,-19276),
  ABISELECT(-33280,-19276),
  (VTBL_ENTRY)&(_ZTI8S21164C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev),
  0,
  ABISELECT(-33632,-19476),
  ABISELECT(64,32),
  ABISELECT(-33632,-19476),
  (VTBL_ENTRY)&(_ZTI8S21164C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21164C2D1Ev,_ZTv0_n16_N8S21164C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21164C2D0Ev,_ZTv0_n16_N8S21164C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
  0,
  0,
  ABISELECT(-33696,-19508),
  ABISELECT(-33696,-19508),
  (VTBL_ENTRY)&(_ZTI8S21164C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
  0,
  0,
  ABISELECT(-34144,-19768),
  ABISELECT(-34144,-19768),
  (VTBL_ENTRY)&(_ZTI8S21164C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C52v5Ev,
  (VTBL_ENTRY)&_ZN8S21164C52v6Ev,
};
extern VTBL_ENTRY _ZTV8S21164C2[];
extern void _ZN8S21164C6D1Ev();
extern void _ZN8S21164C6D0Ev();
extern void _ZN8S21164C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C6__8S21164C2[] = {
  ABISELECT(3120,1820),
  ABISELECT(-672,-380),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&_ZN8S21164C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21164C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
};
extern void _ZN9S21164C10D1Ev();
extern void _ZN9S21164C10D0Ev();
extern void _ZN8S21164C82v3Ev();
static  VTBL_ENTRY _tg__ZTV9S21164C108S21164C6__8S21164C2[] = {
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI9S21164C10[0]),
  (VTBL_ENTRY)&_ZN9S21164C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21164C10D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
};
extern void _ZN8S21164C8D1Ev();
extern void _ZN8S21164C8D0Ev();
extern void _ZN8S21164C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C89S21164C108S21164C6__A1__8S21164C2[] = {
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI8S21164C8[0]),
  (VTBL_ENTRY)&_ZN8S21164C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21164C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev)();
extern void ABISELECT(_ZThn2672_N8S21164C8D1Ev,_ZThn1560_N8S21164C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev)();
extern void ABISELECT(_ZThn2672_N8S21164C8D0Ev,_ZThn1560_N8S21164C8D0Ev)() __attribute__((weak));
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C9__8S21164C89S21164C108S21164C6__A1__8S21164C2[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI8S21164C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev)();
extern void ABISELECT(_ZThn2672_N9S21164C10D1Ev,_ZThn1560_N9S21164C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev)();
extern void ABISELECT(_ZThn2672_N9S21164C10D0Ev,_ZThn1560_N9S21164C10D0Ev)() __attribute__((weak));
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C9__9S21164C108S21164C6__8S21164C2[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI9S21164C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev)();
extern void ABISELECT(_ZThn2256_N9S21164C10D1Ev,_ZThn1328_N9S21164C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev)();
extern void ABISELECT(_ZThn2256_N9S21164C10D0Ev,_ZThn1328_N9S21164C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__9S21164C108S21164C6__8S21164C2[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI9S21164C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev)();
extern void ABISELECT(_ZThn2256_N8S21164C6D1Ev,_ZThn1328_N8S21164C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev)();
extern void ABISELECT(_ZThn2256_N8S21164C6D0Ev,_ZThn1328_N8S21164C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__8S21164C6__8S21164C2[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21164C6D1Ev,_ZTv0_n16_N8S21164C6D1Ev)();
extern void ABISELECT(_ZThn2608_N8S21164C6D1Ev,_ZThn1528_N8S21164C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21164C6D0Ev,_ZTv0_n16_N8S21164C6D0Ev)();
extern void ABISELECT(_ZThn2608_N8S21164C6D0Ev,_ZThn1528_N8S21164C6D0Ev)() __attribute__((weak));
extern void _ZN8S21164C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C8__8S21164C6__8S21164C2[] = {
  0,
  ABISELECT(-2608,-1528),
  ABISELECT(64,32),
  ABISELECT(-2608,-1528),
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21164C6D1Ev,_ZTv0_n16_N8S21164C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21164C6D0Ev,_ZTv0_n16_N8S21164C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev)();
extern void ABISELECT(_ZThn2672_N8S21164C6D1Ev,_ZThn1560_N8S21164C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev)();
extern void ABISELECT(_ZThn2672_N8S21164C6D0Ev,_ZThn1560_N8S21164C6D0Ev)() __attribute__((weak));
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C9__8S21164C6__8S21164C2[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev)();
extern void _ZN8S21164C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C4__A1__8S21164C6__8S21164C2[] = {
  0,
  ABISELECT(672,380),
  ABISELECT(672,380),
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev)();
extern void ABISELECT(_ZThn3120_N8S21164C6D1Ev,_ZThn1820_N8S21164C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev)();
extern void ABISELECT(_ZThn3120_N8S21164C6D0Ev,_ZThn1820_N8S21164C6D0Ev)() __attribute__((weak));
extern void _ZN8S21164C52v5Ev();
extern void _ZN8S21164C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C5__8S21164C6__8S21164C2[] = {
  0,
  0,
  ABISELECT(-3120,-1820),
  ABISELECT(-3120,-1820),
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C52v5Ev,
  (VTBL_ENTRY)&_ZN8S21164C52v6Ev,
};
extern void _ZN8S21164C8D1Ev();
extern void _ZN8S21164C8D0Ev();
extern void _ZN8S21164C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C8__8S21164C2[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21164C8[0]),
  (VTBL_ENTRY)&_ZN8S21164C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21164C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21164C8D1Ev,_ZThn32_N8S21164C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S21164C8D0Ev,_ZThn32_N8S21164C8D0Ev)() __attribute__((weak));
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C9__8S21164C8__8S21164C2[] = {
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21164C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
};
static  VTT_ENTRY vtt_S21164C2[] = {
  {&(_ZTV8S21164C2[9]),  9,73},
  {&(_ZTV8S21164C2[15]),  15,73},
  {&(_ZTV8S21164C2[21]),  21,73},
  {&(_ZTV8S21164C2[34]),  34,73},
  {&(_ZTV8S21164C2[45]),  45,73},
  {&(_ZTV8S21164C2[52]),  52,73},
  {&(_ZTV8S21164C2[60]),  60,73},
  {&(_ZTV8S21164C2[39]),  39,73},
  {&(_ZTV8S21164C2[69]),  69,73},
  {&(_tg__ZTV8S21164C6__8S21164C2[7]),  7,10},
  {&(_tg__ZTV9S21164C108S21164C6__8S21164C2[4]),  4,7},
  {&(_tg__ZTV8S21164C89S21164C108S21164C6__A1__8S21164C2[3]),  3,6},
  {&(_tg__ZTV8S21164C9__8S21164C89S21164C108S21164C6__A1__8S21164C2[5]),  5,9},
  {&(_tg__ZTV8S21164C9__9S21164C108S21164C6__8S21164C2[5]),  5,9},
  {&(_tg__ZTV8S19917C3__9S21164C108S21164C6__8S21164C2[3]),  3,5},
  {&(_tg__ZTV8S19917C3__8S21164C6__8S21164C2[3]),  3,5},
  {&(_tg__ZTV8S21164C8__8S21164C6__8S21164C2[5]),  5,8},
  {&(_tg__ZTV8S21164C9__8S21164C6__8S21164C2[5]),  5,9},
  {&(_tg__ZTV8S21164C4__A1__8S21164C6__8S21164C2[4]),  4,7},
  {&(_tg__ZTV8S21164C5__8S21164C6__8S21164C2[5]),  5,9},
  {&(_tg__ZTV8S21164C8__8S21164C2[3]),  3,6},
  {&(_tg__ZTV8S21164C9__8S21164C8__8S21164C2[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S21164C2[];
extern  VTBL_ENTRY _ZTV8S21164C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21164C2[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21164C6D0Ev,_ZTv0_n16_N8S21164C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S21164C6D0Ev,_ZThn1528_N8S21164C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21164C6D1Ev,_ZTv0_n16_N8S21164C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S21164C6D1Ev,_ZThn1528_N8S21164C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N8S21164C6D0Ev,_ZThn1820_N8S21164C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S21164C6D0Ev,_ZThn1560_N8S21164C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S21164C6D0Ev,_ZThn1328_N8S21164C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N8S21164C6D1Ev,_ZThn1820_N8S21164C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S21164C6D1Ev,_ZThn1560_N8S21164C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S21164C6D1Ev,_ZThn1328_N8S21164C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S21164C10D0Ev,_ZThn1328_N9S21164C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S21164C10D0Ev,_ZThn1560_N9S21164C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S21164C10D1Ev,_ZThn1328_N9S21164C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S21164C10D1Ev,_ZThn1560_N9S21164C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21164C8D0Ev,_ZThn32_N8S21164C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S21164C8D0Ev,_ZThn1560_N8S21164C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21164C8D1Ev,_ZThn32_N8S21164C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S21164C8D1Ev,_ZThn1560_N8S21164C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21164C2D0Ev,_ZTv0_n16_N8S21164C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33632_N8S21164C2D0Ev,_ZThn19476_N8S21164C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21164C2D1Ev,_ZTv0_n16_N8S21164C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33632_N8S21164C2D1Ev,_ZThn19476_N8S21164C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21164C2D0Ev,_ZTv0_n32_N8S21164C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn31024_N8S21164C2D0Ev,_ZThn17948_N8S21164C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21164C2D1Ev,_ZTv0_n32_N8S21164C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn31024_N8S21164C2D1Ev,_ZThn17948_N8S21164C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34144_N8S21164C2D0Ev,_ZThn19768_N8S21164C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33696_N8S21164C2D0Ev,_ZThn19508_N8S21164C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33280_N8S21164C2D0Ev,_ZThn19276_N8S21164C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30352_N8S21164C2D0Ev,_ZThn17568_N8S21164C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30304_N8S21164C2D0Ev,_ZThn17540_N8S21164C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34144_N8S21164C2D1Ev,_ZThn19768_N8S21164C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33696_N8S21164C2D1Ev,_ZThn19508_N8S21164C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33280_N8S21164C2D1Ev,_ZThn19276_N8S21164C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30352_N8S21164C2D1Ev,_ZThn17568_N8S21164C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30304_N8S21164C2D1Ev,_ZThn17540_N8S21164C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21164C2 = {  "S21164C2", // class name
  bases_S21164C2, 14,
  &(vtc_S21164C2[0]), // expected_vtbl_contents
  &(vtt_S21164C2[0]), // expected_vtt_contents
  ABISELECT(34416,19924), // object size
  NSPAIRA(_ZTI8S21164C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21164C2),73, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21164C2),22, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21164C1  : virtual S21164C2 {
  int s21164c1f0;
  virtual  ~S21164C1(); // _ZN8S21164C1D2Ev
  S21164C1(); // tgen
};
//SIG(1 S21164C1) C1{ VBC2{ VBC3{ vd m Fp FD Fi Fp} VBC4{ vd v1 FL Fi FC5{ BC3 vd v5 v6 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} Fi FC3 Fp Fi FC5 FD} VBC6{ VBC7{ vd m FC8{ BC3 vd v8 v9 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} FD[3] Fp} VBC9{ VBC10{ BC3 v2 v3 FL[2] FC3 Fi[3] Fp[4] FC5 Fc:5} BC3 vd v4 Fi} BC11{ VBC10 BC9 BC4 VBC7 vd FC12{} FD[10] FC9 FC4 Fi} VBC4 VBC5 vd Fi Fc Fc:8 FD[8] Fi Fc Fp} vd v7 Fs FC6[5] FC11 Fi Fp Fc:8 FC11 Fi FL[3] FC6 FD} vd Fi}


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

static void Test_S21164C1()
{
  extern Class_Descriptor cd_S21164C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2153,4984)];
    init_test(&cd_S21164C1, buf);
    S21164C1 *dp, &lv = *(dp=new (buf) S21164C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(34432,19932), "sizeof(S21164C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21164C1)");
    /*is_ambiguous_... S21164C2::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S21164C2*), ABISELECT(30320,17548), "S21164C1");
    /*is_ambiguous_... S21164C2::S21164C4 */ AMB_check_base_class_offset(lv, (S21164C4*)(S21164C2*), ABISELECT(30368,17576), "S21164C1");
    /*is_ambiguous_... S21164C6::S21164C4 */ AMB_check_base_class_offset(lv, (S21164C4*)(S21164C6*), ABISELECT(30368,17576), "S21164C1");
    check_base_class_offset(lv, (S19917C3*)(S21164C6*), ABISELECT(33296,19284), "S21164C1");
    check_base_class_offset(lv, (S19917C3*)(S21164C10*)(S21164C6*), ABISELECT(33296,19284), "S21164C1");
    check_base_class_offset(lv, (S19917C5*)(S21164C9*), ABISELECT(33712,19516), "S21164C1");
    /*is_ambiguous_... S21164C1::S21164C8 */ AMB_check_base_class_offset(lv, (S21164C9*)(S21164C8*), ABISELECT(33712,19516), "S21164C1");
    check_base_class_offset(lv, (S21164C9*)(S21164C10*)(S21164C6*), ABISELECT(33712,19516), "S21164C1");
    check_base_class_offset(lv, (S21164C9*)(S21164C8*)(S21164C10*)(S21164C6*), ABISELECT(33712,19516), "S21164C1");
    /*is_ambiguous_... S21164C1::S21164C8 */ AMB_check_base_class_offset(lv, (S19917C5*)(S21164C8*), ABISELECT(33648,19484), "S21164C1");
    /*is_ambiguous_... S21164C6::S21164C8 */ AMB_check_base_class_offset(lv, (S21164C8*)(S21164C6*), ABISELECT(33648,19484), "S21164C1");
    /*is_ambiguous_... S21164C8::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*)(S21164C8*)(S21164C10*)(S21164C6*), ABISELECT(31040,17956), "S21164C1");
    check_base_class_offset(lv, (S21164C8*)(S21164C10*)(S21164C6*), ABISELECT(31040,17956), "S21164C1");
    check_base_class_offset(lv, (S21164C4*)(S21164C10*)(S21164C6*), ABISELECT(31104,17988), "S21164C1");
    check_base_class_offset(lv, (S21164C10*)(S21164C6*), ABISELECT(31040,17956), "S21164C1");
    check_base_class_offset(lv, (S19917C5*)(S21164C5*), ABISELECT(34160,19776), "S21164C1");
    check_base_class_offset(lv, (S21164C5*)(S21164C6*), ABISELECT(34160,19776), "S21164C1");
    check_base_class_offset(lv, (S21164C6*)(S21164C2*), ABISELECT(31040,17956), "S21164C1");
    check_base_class_offset(lv, (S21164C2*), ABISELECT(16,8), "S21164C1");
    check_field_offset(lv, s21164c1f0, ABISELECT(8,4), "S21164C1.s21164c1f0");
    test_class_info(&lv, &cd_S21164C1);
    dp->~S21164C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21164C1(Test_S21164C1, "S21164C1", ABISELECT(34432,19932));

#else // __cplusplus

extern void _ZN8S21164C1C1Ev();
extern void _ZN8S21164C1D2Ev();
Name_Map name_map_S21164C1[] = {
  NSPAIR(_ZN8S21164C1C1Ev),
  NSPAIR(_ZN8S21164C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21164C4;
extern VTBL_ENTRY _ZTI8S21164C4[];
extern  VTBL_ENTRY _ZTV8S21164C4[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21164C9;
extern VTBL_ENTRY _ZTI8S21164C9[];
extern  VTBL_ENTRY _ZTV8S21164C9[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21164C8;
extern VTBL_ENTRY _ZTI8S21164C8[];
extern  VTBL_ENTRY _ZTV8S21164C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21164C8[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21164C8;
extern VTBL_ENTRY _ZTI8S21164C8[];
extern  VTBL_ENTRY _ZTV8S21164C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21164C8[];
extern Class_Descriptor cd_S21164C4;
extern VTBL_ENTRY _ZTI8S21164C4[];
extern  VTBL_ENTRY _ZTV8S21164C4[];
extern Class_Descriptor cd_S21164C10;
extern VTBL_ENTRY _ZTI9S21164C10[];
extern  VTBL_ENTRY _ZTV9S21164C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21164C10[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21164C5;
extern VTBL_ENTRY _ZTI8S21164C5[];
extern  VTBL_ENTRY _ZTV8S21164C5[];
extern Class_Descriptor cd_S21164C6;
extern VTBL_ENTRY _ZTI8S21164C6[];
extern  VTBL_ENTRY _ZTV8S21164C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21164C6[];
extern Class_Descriptor cd_S21164C2;
extern VTBL_ENTRY _ZTI8S21164C2[];
extern  VTBL_ENTRY _ZTV8S21164C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21164C2[];
static Base_Class bases_S21164C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    ABISELECT(30320,17548), //bcp->offset
    26, //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
    14, //immediately_derived
  0, 1},
  {&cd_S21164C4,    ABISELECT(30368,17576), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19917C3,    ABISELECT(33296,19284), //bcp->offset
    56, //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
    10, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(33712,19516), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21164C9,    ABISELECT(33712,19516), //bcp->offset
    69, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(33648,19484), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21164C8,    ABISELECT(33648,19484), //bcp->offset
    61, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S19917C5,    ABISELECT(31040,17956), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S21164C8,    ABISELECT(31040,17956), //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
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S21164C4,    ABISELECT(31104,17988), //bcp->offset
    51, //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
    12, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S21164C10,    ABISELECT(31040,17956), //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
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19917C5,    ABISELECT(34160,19776), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S21164C5,    ABISELECT(34160,19776), //bcp->offset
    78, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S21164C6,    ABISELECT(31040,17956), //bcp->offset
    38, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S21164C2,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21164C1[];
extern void _ZN8S21164C1D1Ev();
extern void _ZN8S21164C1D0Ev();
extern void ABISELECT(_ZTv0_n80_N8S21164C1D1Ev,_ZTv0_n40_N8S21164C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S21164C1D1Ev,_ZThn8_N8S21164C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S21164C1D0Ev,_ZTv0_n40_N8S21164C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S21164C1D0Ev,_ZThn8_N8S21164C1D0Ev)() __attribute__((weak));
extern void _ZN8S21164C22v7Ev();
extern void ABISELECT(_ZTv0_n24_N8S21164C1D1Ev,_ZTv0_n12_N8S21164C1D1Ev)();
extern void ABISELECT(_ZThn30320_N8S21164C1D1Ev,_ZThn17548_N8S21164C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C1D0Ev,_ZTv0_n12_N8S21164C1D0Ev)();
extern void ABISELECT(_ZThn30320_N8S21164C1D0Ev,_ZThn17548_N8S21164C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C1D1Ev,_ZTv0_n12_N8S21164C1D1Ev)();
extern void ABISELECT(_ZThn30368_N8S21164C1D1Ev,_ZThn17576_N8S21164C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C1D0Ev,_ZTv0_n12_N8S21164C1D0Ev)();
extern void ABISELECT(_ZThn30368_N8S21164C1D0Ev,_ZThn17576_N8S21164C1D0Ev)() __attribute__((weak));
extern void _ZN8S21164C42v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S21164C1D1Ev,_ZTv0_n32_N8S21164C1D1Ev)();
extern void ABISELECT(_ZThn31040_N8S21164C1D1Ev,_ZThn17956_N8S21164C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S21164C1D0Ev,_ZTv0_n32_N8S21164C1D0Ev)();
extern void ABISELECT(_ZThn31040_N8S21164C1D0Ev,_ZThn17956_N8S21164C1D0Ev)() __attribute__((weak));
extern void _ZN8S21164C82v3Ev();
extern void ABISELECT(_ZTvn64_n64_N8S21164C1D1Ev,_ZTvn32_n32_N8S21164C1D1Ev)();
extern void ABISELECT(_ZTvn64_n64_N8S21164C1D0Ev,_ZTvn32_n32_N8S21164C1D0Ev)();
extern void _ZN8S21164C42v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S21164C1D1Ev,_ZTv0_n12_N8S21164C1D1Ev)();
extern void ABISELECT(_ZThn33296_N8S21164C1D1Ev,_ZThn19284_N8S21164C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C1D0Ev,_ZTv0_n12_N8S21164C1D0Ev)();
extern void ABISELECT(_ZThn33296_N8S21164C1D0Ev,_ZThn19284_N8S21164C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21164C1D1Ev,_ZTv0_n16_N8S21164C1D1Ev)();
extern void ABISELECT(_ZThn33648_N8S21164C1D1Ev,_ZThn19484_N8S21164C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21164C1D0Ev,_ZTv0_n16_N8S21164C1D0Ev)();
extern void ABISELECT(_ZThn33648_N8S21164C1D0Ev,_ZThn19484_N8S21164C1D0Ev)() __attribute__((weak));
extern void _ZN8S21164C82v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21164C1D1Ev,_ZTv0_n12_N8S21164C1D1Ev)();
extern void ABISELECT(_ZThn33712_N8S21164C1D1Ev,_ZThn19516_N8S21164C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C1D0Ev,_ZTv0_n12_N8S21164C1D0Ev)();
extern void ABISELECT(_ZThn33712_N8S21164C1D0Ev,_ZThn19516_N8S21164C1D0Ev)() __attribute__((weak));
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S21164C1D1Ev,_ZTv0_n12_N8S21164C1D1Ev)();
extern void ABISELECT(_ZThn34160_N8S21164C1D1Ev,_ZThn19776_N8S21164C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C1D0Ev,_ZTv0_n12_N8S21164C1D0Ev)();
extern void ABISELECT(_ZThn34160_N8S21164C1D0Ev,_ZThn19776_N8S21164C1D0Ev)() __attribute__((weak));
extern void _ZN8S21164C52v5Ev();
extern void _ZN8S21164C52v6Ev();
static  VTBL_ENTRY vtc_S21164C1[] = {
  ABISELECT(34160,19776),
  ABISELECT(33712,19516),
  ABISELECT(33648,19484),
  ABISELECT(33296,19284),
  ABISELECT(31040,17956),
  ABISELECT(30368,17576),
  ABISELECT(30320,17548),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21164C1[0]),
  (VTBL_ENTRY)&_ZN8S21164C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21164C1D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(34144,19768),
  ABISELECT(33696,19508),
  ABISELECT(33632,19476),
  ABISELECT(33280,19276),
  ABISELECT(31024,17948),
  ABISELECT(30352,17568),
  ABISELECT(30304,17540),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21164C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S21164C1D1Ev,_ZTv0_n40_N8S21164C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S21164C1D0Ev,_ZTv0_n40_N8S21164C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C22v7Ev,
  ABISELECT(-30320,-17548),
  ABISELECT(-30320,-17548),
  (VTBL_ENTRY)&(_ZTI8S21164C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C1D1Ev,_ZTv0_n12_N8S21164C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C1D0Ev,_ZTv0_n12_N8S21164C1D0Ev),
  0,
  ABISELECT(-30368,-17576),
  ABISELECT(-30368,-17576),
  (VTBL_ENTRY)&(_ZTI8S21164C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C1D1Ev,_ZTv0_n12_N8S21164C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C1D0Ev,_ZTv0_n12_N8S21164C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C42v4Ev,
  ABISELECT(64,32),
  0,
  ABISELECT(-31040,-17956),
  ABISELECT(3120,1820),
  ABISELECT(-672,-380),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  ABISELECT(-31040,-17956),
  (VTBL_ENTRY)&(_ZTI8S21164C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21164C1D1Ev,_ZTv0_n32_N8S21164C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21164C1D0Ev,_ZTv0_n32_N8S21164C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
  ABISELECT(-31104,-17988),
  (VTBL_ENTRY)&(_ZTI8S21164C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S21164C1D1Ev,_ZTvn32_n32_N8S21164C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S21164C1D0Ev,_ZTvn32_n32_N8S21164C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C42v4Ev,
  ABISELECT(-33296,-19284),
  ABISELECT(-33296,-19284),
  (VTBL_ENTRY)&(_ZTI8S21164C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C1D1Ev,_ZTv0_n12_N8S21164C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C1D0Ev,_ZTv0_n12_N8S21164C1D0Ev),
  0,
  ABISELECT(-33648,-19484),
  ABISELECT(64,32),
  ABISELECT(-33648,-19484),
  (VTBL_ENTRY)&(_ZTI8S21164C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21164C1D1Ev,_ZTv0_n16_N8S21164C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21164C1D0Ev,_ZTv0_n16_N8S21164C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
  0,
  0,
  ABISELECT(-33712,-19516),
  ABISELECT(-33712,-19516),
  (VTBL_ENTRY)&(_ZTI8S21164C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C1D1Ev,_ZTv0_n12_N8S21164C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C1D0Ev,_ZTv0_n12_N8S21164C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
  0,
  0,
  ABISELECT(-34160,-19776),
  ABISELECT(-34160,-19776),
  (VTBL_ENTRY)&(_ZTI8S21164C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C1D1Ev,_ZTv0_n12_N8S21164C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C1D0Ev,_ZTv0_n12_N8S21164C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C52v5Ev,
  (VTBL_ENTRY)&_ZN8S21164C52v6Ev,
};
extern VTBL_ENTRY _ZTV8S21164C1[];
extern void _ZN8S21164C2D1Ev();
extern void _ZN8S21164C2D0Ev();
extern void _ZN8S21164C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C2__8S21164C1[] = {
  ABISELECT(34144,19768),
  ABISELECT(33696,19508),
  ABISELECT(33632,19476),
  ABISELECT(33280,19276),
  ABISELECT(31024,17948),
  ABISELECT(30352,17568),
  ABISELECT(30304,17540),
  0,
  (VTBL_ENTRY)&(_ZTI8S21164C2[0]),
  (VTBL_ENTRY)&_ZN8S21164C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21164C2D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C22v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev)();
extern void ABISELECT(_ZThn30304_N8S21164C2D1Ev,_ZThn17540_N8S21164C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev)();
extern void ABISELECT(_ZThn30304_N8S21164C2D0Ev,_ZThn17540_N8S21164C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C5__8S21164C2__8S21164C1[] = {
  ABISELECT(-30304,-17540),
  ABISELECT(-30304,-17540),
  (VTBL_ENTRY)&(_ZTI8S21164C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev)();
extern void ABISELECT(_ZThn30352_N8S21164C2D1Ev,_ZThn17568_N8S21164C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev)();
extern void ABISELECT(_ZThn30352_N8S21164C2D0Ev,_ZThn17568_N8S21164C2D0Ev)() __attribute__((weak));
extern void _ZN8S21164C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C4__8S21164C2__8S21164C1[] = {
  0,
  ABISELECT(-30352,-17568),
  ABISELECT(-30352,-17568),
  (VTBL_ENTRY)&(_ZTI8S21164C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C42v4Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S21164C2D1Ev,_ZTv0_n32_N8S21164C2D1Ev)();
extern void ABISELECT(_ZThn31024_N8S21164C2D1Ev,_ZThn17948_N8S21164C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S21164C2D0Ev,_ZTv0_n32_N8S21164C2D0Ev)();
extern void ABISELECT(_ZThn31024_N8S21164C2D0Ev,_ZThn17948_N8S21164C2D0Ev)() __attribute__((weak));
extern void _ZN8S21164C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C6__8S21164C2__8S21164C1[] = {
  ABISELECT(64,32),
  0,
  ABISELECT(-31024,-17948),
  ABISELECT(3120,1820),
  ABISELECT(-672,-380),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  ABISELECT(-31024,-17948),
  (VTBL_ENTRY)&(_ZTI8S21164C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21164C2D1Ev,_ZTv0_n32_N8S21164C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21164C2D0Ev,_ZTv0_n32_N8S21164C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev)();
extern void ABISELECT(_ZThn33280_N8S21164C2D1Ev,_ZThn19276_N8S21164C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev)();
extern void ABISELECT(_ZThn33280_N8S21164C2D0Ev,_ZThn19276_N8S21164C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__8S21164C2__8S21164C1[] = {
  ABISELECT(-33280,-19276),
  ABISELECT(-33280,-19276),
  (VTBL_ENTRY)&(_ZTI8S21164C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21164C2D1Ev,_ZTv0_n16_N8S21164C2D1Ev)();
extern void ABISELECT(_ZThn33632_N8S21164C2D1Ev,_ZThn19476_N8S21164C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21164C2D0Ev,_ZTv0_n16_N8S21164C2D0Ev)();
extern void ABISELECT(_ZThn33632_N8S21164C2D0Ev,_ZThn19476_N8S21164C2D0Ev)() __attribute__((weak));
extern void _ZN8S21164C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C8__8S21164C2__8S21164C1[] = {
  0,
  ABISELECT(-33632,-19476),
  ABISELECT(64,32),
  ABISELECT(-33632,-19476),
  (VTBL_ENTRY)&(_ZTI8S21164C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21164C2D1Ev,_ZTv0_n16_N8S21164C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21164C2D0Ev,_ZTv0_n16_N8S21164C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev)();
extern void ABISELECT(_ZThn33696_N8S21164C2D1Ev,_ZThn19508_N8S21164C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev)();
extern void ABISELECT(_ZThn33696_N8S21164C2D0Ev,_ZThn19508_N8S21164C2D0Ev)() __attribute__((weak));
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C9__8S21164C2__8S21164C1[] = {
  0,
  0,
  ABISELECT(-33696,-19508),
  ABISELECT(-33696,-19508),
  (VTBL_ENTRY)&(_ZTI8S21164C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
};
extern void ABISELECT(_ZTvn64_n64_N8S21164C2D1Ev,_ZTvn32_n32_N8S21164C2D1Ev)();
extern void ABISELECT(_ZTvn64_n64_N8S21164C2D0Ev,_ZTvn32_n32_N8S21164C2D0Ev)();
extern void _ZN8S21164C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C49S21164C108S21164C6__A1__8S21164C2__8S21164C1[] = {
  ABISELECT(-31088,-17980),
  (VTBL_ENTRY)&(_ZTI8S21164C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S21164C2D1Ev,_ZTvn32_n32_N8S21164C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn64_n64_N8S21164C2D0Ev,_ZTvn32_n32_N8S21164C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev)();
extern void ABISELECT(_ZThn34144_N8S21164C2D1Ev,_ZThn19768_N8S21164C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev)();
extern void ABISELECT(_ZThn34144_N8S21164C2D0Ev,_ZThn19768_N8S21164C2D0Ev)() __attribute__((weak));
extern void _ZN8S21164C52v5Ev();
extern void _ZN8S21164C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C5__8S21164C2__8S21164C1[] = {
  0,
  0,
  ABISELECT(-34144,-19768),
  ABISELECT(-34144,-19768),
  (VTBL_ENTRY)&(_ZTI8S21164C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C52v5Ev,
  (VTBL_ENTRY)&_ZN8S21164C52v6Ev,
};
extern void _ZN8S21164C6D1Ev();
extern void _ZN8S21164C6D0Ev();
extern void _ZN8S21164C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C6__8S21164C1[] = {
  ABISELECT(3120,1820),
  ABISELECT(-672,-380),
  ABISELECT(2608,1528),
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&_ZN8S21164C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21164C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
};
extern void _ZN9S21164C10D1Ev();
extern void _ZN9S21164C10D0Ev();
extern void _ZN8S21164C82v3Ev();
static  VTBL_ENTRY _tg__ZTV9S21164C108S21164C6__8S21164C1[] = {
  ABISELECT(2256,1328),
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI9S21164C10[0]),
  (VTBL_ENTRY)&_ZN9S21164C10D1Ev,
  (VTBL_ENTRY)&_ZN9S21164C10D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
};
extern void _ZN8S21164C8D1Ev();
extern void _ZN8S21164C8D0Ev();
extern void _ZN8S21164C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C89S21164C108S21164C6__A1__8S21164C1[] = {
  ABISELECT(2672,1560),
  0,
  (VTBL_ENTRY)&(_ZTI8S21164C8[0]),
  (VTBL_ENTRY)&_ZN8S21164C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21164C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev)();
extern void ABISELECT(_ZThn2672_N8S21164C8D1Ev,_ZThn1560_N8S21164C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev)();
extern void ABISELECT(_ZThn2672_N8S21164C8D0Ev,_ZThn1560_N8S21164C8D0Ev)() __attribute__((weak));
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C9__8S21164C89S21164C108S21164C6__A1__8S21164C1[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI8S21164C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev)();
extern void ABISELECT(_ZThn2672_N9S21164C10D1Ev,_ZThn1560_N9S21164C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev)();
extern void ABISELECT(_ZThn2672_N9S21164C10D0Ev,_ZThn1560_N9S21164C10D0Ev)() __attribute__((weak));
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C9__9S21164C108S21164C6__8S21164C1[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI9S21164C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev)();
extern void ABISELECT(_ZThn2256_N9S21164C10D1Ev,_ZThn1328_N9S21164C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev)();
extern void ABISELECT(_ZThn2256_N9S21164C10D0Ev,_ZThn1328_N9S21164C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__9S21164C108S21164C6__8S21164C1[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI9S21164C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev)();
extern void ABISELECT(_ZThn2256_N8S21164C6D1Ev,_ZThn1328_N8S21164C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev)();
extern void ABISELECT(_ZThn2256_N8S21164C6D0Ev,_ZThn1328_N8S21164C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19917C3__8S21164C6__8S21164C1[] = {
  ABISELECT(-2256,-1328),
  ABISELECT(-2256,-1328),
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21164C6D1Ev,_ZTv0_n16_N8S21164C6D1Ev)();
extern void ABISELECT(_ZThn2608_N8S21164C6D1Ev,_ZThn1528_N8S21164C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21164C6D0Ev,_ZTv0_n16_N8S21164C6D0Ev)();
extern void ABISELECT(_ZThn2608_N8S21164C6D0Ev,_ZThn1528_N8S21164C6D0Ev)() __attribute__((weak));
extern void _ZN8S21164C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C8__8S21164C6__8S21164C1[] = {
  0,
  ABISELECT(-2608,-1528),
  ABISELECT(64,32),
  ABISELECT(-2608,-1528),
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21164C6D1Ev,_ZTv0_n16_N8S21164C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21164C6D0Ev,_ZTv0_n16_N8S21164C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev)();
extern void ABISELECT(_ZThn2672_N8S21164C6D1Ev,_ZThn1560_N8S21164C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev)();
extern void ABISELECT(_ZThn2672_N8S21164C6D0Ev,_ZThn1560_N8S21164C6D0Ev)() __attribute__((weak));
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C9__8S21164C6__8S21164C1[] = {
  0,
  0,
  ABISELECT(-2672,-1560),
  ABISELECT(-2672,-1560),
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev)();
extern void _ZN8S21164C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C4__A1__8S21164C6__8S21164C1[] = {
  0,
  ABISELECT(672,380),
  ABISELECT(672,380),
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C42v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev)();
extern void ABISELECT(_ZThn3120_N8S21164C6D1Ev,_ZThn1820_N8S21164C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev)();
extern void ABISELECT(_ZThn3120_N8S21164C6D0Ev,_ZThn1820_N8S21164C6D0Ev)() __attribute__((weak));
extern void _ZN8S21164C52v5Ev();
extern void _ZN8S21164C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C5__8S21164C6__8S21164C1[] = {
  0,
  0,
  ABISELECT(-3120,-1820),
  ABISELECT(-3120,-1820),
  (VTBL_ENTRY)&(_ZTI8S21164C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C52v5Ev,
  (VTBL_ENTRY)&_ZN8S21164C52v6Ev,
};
extern void _ZN8S21164C8D1Ev();
extern void _ZN8S21164C8D0Ev();
extern void _ZN8S21164C82v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C8__8S21164C1[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21164C8[0]),
  (VTBL_ENTRY)&_ZN8S21164C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21164C8D0Ev,
  (VTBL_ENTRY)&_ZN8S21164C82v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S21164C8D1Ev,_ZThn32_N8S21164C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S21164C8D0Ev,_ZThn32_N8S21164C8D0Ev)() __attribute__((weak));
extern void _ZN8S21164C92v1Ev();
extern void _ZN8S21164C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S21164C9__8S21164C8__8S21164C1[] = {
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21164C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21164C92v1Ev,
  (VTBL_ENTRY)&_ZN8S21164C92v2Ev,
};
static  VTT_ENTRY vtt_S21164C1[] = {
  {&(_ZTV8S21164C1[10]),  10,87},
  {&(_ZTV8S21164C1[23]),  23,87},
  {&(_ZTV8S21164C1[29]),  29,87},
  {&(_ZTV8S21164C1[35]),  35,87},
  {&(_ZTV8S21164C1[48]),  48,87},
  {&(_ZTV8S21164C1[59]),  59,87},
  {&(_ZTV8S21164C1[66]),  66,87},
  {&(_ZTV8S21164C1[74]),  74,87},
  {&(_ZTV8S21164C1[53]),  53,87},
  {&(_ZTV8S21164C1[83]),  83,87},
  {&(_tg__ZTV8S21164C2__8S21164C1[9]),  9,12},
  {&(_tg__ZTV8S19917C5__8S21164C2__8S21164C1[3]),  3,5},
  {&(_tg__ZTV8S21164C4__8S21164C2__8S21164C1[4]),  4,7},
  {&(_tg__ZTV8S21164C6__8S21164C2__8S21164C1[10]),  10,13},
  {&(_tg__ZTV8S19917C3__8S21164C2__8S21164C1[3]),  3,5},
  {&(_tg__ZTV8S21164C8__8S21164C2__8S21164C1[5]),  5,8},
  {&(_tg__ZTV8S21164C9__8S21164C2__8S21164C1[5]),  5,9},
  {&(_tg__ZTV8S21164C49S21164C108S21164C6__A1__8S21164C2__8S21164C1[2]),  2,5},
  {&(_tg__ZTV8S21164C5__8S21164C2__8S21164C1[5]),  5,9},
  {&(_tg__ZTV8S21164C6__8S21164C1[7]),  7,10},
  {&(_tg__ZTV9S21164C108S21164C6__8S21164C1[4]),  4,7},
  {&(_tg__ZTV8S21164C89S21164C108S21164C6__A1__8S21164C1[3]),  3,6},
  {&(_tg__ZTV8S21164C9__8S21164C89S21164C108S21164C6__A1__8S21164C1[5]),  5,9},
  {&(_tg__ZTV8S21164C9__9S21164C108S21164C6__8S21164C1[5]),  5,9},
  {&(_tg__ZTV8S19917C3__9S21164C108S21164C6__8S21164C1[3]),  3,5},
  {&(_tg__ZTV8S19917C3__8S21164C6__8S21164C1[3]),  3,5},
  {&(_tg__ZTV8S21164C8__8S21164C6__8S21164C1[5]),  5,8},
  {&(_tg__ZTV8S21164C9__8S21164C6__8S21164C1[5]),  5,9},
  {&(_tg__ZTV8S21164C4__A1__8S21164C6__8S21164C1[4]),  4,7},
  {&(_tg__ZTV8S21164C5__8S21164C6__8S21164C1[5]),  5,9},
  {&(_tg__ZTV8S21164C8__8S21164C1[3]),  3,6},
  {&(_tg__ZTV8S21164C9__8S21164C8__8S21164C1[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S21164C1[];
extern  VTBL_ENTRY _ZTV8S21164C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21164C1[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21164C6D0Ev,_ZTv0_n16_N8S21164C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S21164C6D0Ev,_ZThn1528_N8S21164C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21164C6D1Ev,_ZTv0_n16_N8S21164C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2608_N8S21164C6D1Ev,_ZThn1528_N8S21164C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C6D0Ev,_ZTv0_n12_N8S21164C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N8S21164C6D0Ev,_ZThn1820_N8S21164C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S21164C6D0Ev,_ZThn1560_N8S21164C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S21164C6D0Ev,_ZThn1328_N8S21164C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C6D1Ev,_ZTv0_n12_N8S21164C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3120_N8S21164C6D1Ev,_ZThn1820_N8S21164C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S21164C6D1Ev,_ZThn1560_N8S21164C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N8S21164C6D1Ev,_ZThn1328_N8S21164C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21164C10D0Ev,_ZTv0_n12_N9S21164C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S21164C10D0Ev,_ZThn1328_N9S21164C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S21164C10D0Ev,_ZThn1560_N9S21164C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21164C10D1Ev,_ZTv0_n12_N9S21164C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2256_N9S21164C10D1Ev,_ZThn1328_N9S21164C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S21164C10D1Ev,_ZThn1560_N9S21164C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C8D0Ev,_ZTv0_n12_N8S21164C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21164C8D0Ev,_ZThn32_N8S21164C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S21164C8D0Ev,_ZThn1560_N8S21164C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C8D1Ev,_ZTv0_n12_N8S21164C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21164C8D1Ev,_ZThn32_N8S21164C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S21164C8D1Ev,_ZThn1560_N8S21164C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21164C2D0Ev,_ZTv0_n16_N8S21164C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33632_N8S21164C2D0Ev,_ZThn19476_N8S21164C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21164C2D1Ev,_ZTv0_n16_N8S21164C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33632_N8S21164C2D1Ev,_ZThn19476_N8S21164C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21164C2D0Ev,_ZTv0_n32_N8S21164C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn31024_N8S21164C2D0Ev,_ZThn17948_N8S21164C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21164C2D1Ev,_ZTv0_n32_N8S21164C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn31024_N8S21164C2D1Ev,_ZThn17948_N8S21164C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C2D0Ev,_ZTv0_n12_N8S21164C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34144_N8S21164C2D0Ev,_ZThn19768_N8S21164C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33696_N8S21164C2D0Ev,_ZThn19508_N8S21164C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33280_N8S21164C2D0Ev,_ZThn19276_N8S21164C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30352_N8S21164C2D0Ev,_ZThn17568_N8S21164C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30304_N8S21164C2D0Ev,_ZThn17540_N8S21164C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C2D1Ev,_ZTv0_n12_N8S21164C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34144_N8S21164C2D1Ev,_ZThn19768_N8S21164C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33696_N8S21164C2D1Ev,_ZThn19508_N8S21164C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33280_N8S21164C2D1Ev,_ZThn19276_N8S21164C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30352_N8S21164C2D1Ev,_ZThn17568_N8S21164C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30304_N8S21164C2D1Ev,_ZThn17540_N8S21164C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21164C1D0Ev,_ZTv0_n16_N8S21164C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33648_N8S21164C1D0Ev,_ZThn19484_N8S21164C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21164C1D1Ev,_ZTv0_n16_N8S21164C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33648_N8S21164C1D1Ev,_ZThn19484_N8S21164C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21164C1D0Ev,_ZTv0_n32_N8S21164C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn31040_N8S21164C1D0Ev,_ZThn17956_N8S21164C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21164C1D1Ev,_ZTv0_n32_N8S21164C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn31040_N8S21164C1D1Ev,_ZThn17956_N8S21164C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C1D0Ev,_ZTv0_n12_N8S21164C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34160_N8S21164C1D0Ev,_ZThn19776_N8S21164C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33712_N8S21164C1D0Ev,_ZThn19516_N8S21164C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33296_N8S21164C1D0Ev,_ZThn19284_N8S21164C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30368_N8S21164C1D0Ev,_ZThn17576_N8S21164C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30320_N8S21164C1D0Ev,_ZThn17548_N8S21164C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21164C1D1Ev,_ZTv0_n12_N8S21164C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34160_N8S21164C1D1Ev,_ZThn19776_N8S21164C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33712_N8S21164C1D1Ev,_ZThn19516_N8S21164C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33296_N8S21164C1D1Ev,_ZThn19284_N8S21164C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30368_N8S21164C1D1Ev,_ZThn17576_N8S21164C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn30320_N8S21164C1D1Ev,_ZThn17548_N8S21164C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S21164C1D0Ev,_ZTv0_n40_N8S21164C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21164C1D0Ev,_ZThn8_N8S21164C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S21164C1D1Ev,_ZTv0_n40_N8S21164C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21164C1D1Ev,_ZThn8_N8S21164C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21164C1 = {  "S21164C1", // class name
  bases_S21164C1, 15,
  &(vtc_S21164C1[0]), // expected_vtbl_contents
  &(vtt_S21164C1[0]), // expected_vtt_contents
  ABISELECT(34432,19932), // object size
  NSPAIRA(_ZTI8S21164C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21164C1),87, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21164C1),32, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3252C3  {
  int s3252c3f0;
  __tsi64 s3252c3f1;
  void *s3252c3f2[4];
  int s3252c3f3[2];
  void *s3252c3f4;
  ::S1378C5_nt s3252c3f5;
  void *s3252c3f6[2];
  virtual  ~S3252C3(); // _ZN7S3252C3D1Ev
  virtual void  v4(); // _ZN7S3252C32v4Ev
  virtual void  v5(); // _ZN7S3252C32v5Ev
  virtual void  v6(); // _ZN7S3252C32v6Ev
  virtual void  v7(); // _ZN7S3252C32v7Ev
  virtual void  v8(); // _ZN7S3252C32v8Ev
  virtual void  v9(); // _ZN7S3252C32v9Ev
  virtual void  v10(); // _ZN7S3252C33v10Ev
  virtual void  v11(); // _ZN7S3252C33v11Ev
  virtual void  v12(); // _ZN7S3252C33v12Ev
  virtual void  v13(); // _ZN7S3252C33v13Ev
  virtual void  v14(); // _ZN7S3252C33v14Ev
  virtual void  v15(); // _ZN7S3252C33v15Ev
  virtual void  v16(); // _ZN7S3252C33v16Ev
  virtual void  v17(); // _ZN7S3252C33v17Ev
  virtual void  v18(); // _ZN7S3252C33v18Ev
  virtual void  v19(); // _ZN7S3252C33v19Ev
  virtual void  v20(); // _ZN7S3252C33v20Ev
  virtual void  v21(); // _ZN7S3252C33v21Ev
  virtual void  v22(); // _ZN7S3252C33v22Ev
  virtual void  v23(); // _ZN7S3252C33v23Ev
  virtual void  v24(); // _ZN7S3252C33v24Ev
  virtual void  v25(); // _ZN7S3252C33v25Ev
  virtual void  v26(); // _ZN7S3252C33v26Ev
  virtual void  v27(); // _ZN7S3252C33v27Ev
  virtual void  v28(); // _ZN7S3252C33v28Ev
  virtual void  v29(); // _ZN7S3252C33v29Ev
  virtual void  v30(); // _ZN7S3252C33v30Ev
  virtual void  v31(); // _ZN7S3252C33v31Ev
  virtual void  v32(); // _ZN7S3252C33v32Ev
  virtual void  v33(); // _ZN7S3252C33v33Ev
  virtual void  v34(); // _ZN7S3252C33v34Ev
  virtual void  v35(); // _ZN7S3252C33v35Ev
  virtual void  v36(); // _ZN7S3252C33v36Ev
  virtual void  v37(); // _ZN7S3252C33v37Ev
  virtual void  v38(); // _ZN7S3252C33v38Ev
  virtual void  v39(); // _ZN7S3252C33v39Ev
  virtual void  v40(); // _ZN7S3252C33v40Ev
  virtual void  v41(); // _ZN7S3252C33v41Ev
  virtual void  v42(); // _ZN7S3252C33v42Ev
  virtual void  v43(); // _ZN7S3252C33v43Ev
  virtual void  v44(); // _ZN7S3252C33v44Ev
  virtual void  v45(); // _ZN7S3252C33v45Ev
  virtual void  v46(); // _ZN7S3252C33v46Ev
  virtual void  v47(); // _ZN7S3252C33v47Ev
  virtual void  v48(); // _ZN7S3252C33v48Ev
  virtual void  v49(); // _ZN7S3252C33v49Ev
  virtual void  v50(); // _ZN7S3252C33v50Ev
  virtual void  v51(); // _ZN7S3252C33v51Ev
  virtual void  v52(); // _ZN7S3252C33v52Ev
  virtual void  v53(); // _ZN7S3252C33v53Ev
  virtual void  v54(); // _ZN7S3252C33v54Ev
  virtual void  v55(); // _ZN7S3252C33v55Ev
  virtual void  v56(); // _ZN7S3252C33v56Ev
  virtual void  v57(); // _ZN7S3252C33v57Ev
  virtual void  v58(); // _ZN7S3252C33v58Ev
  virtual void  v59(); // _ZN7S3252C33v59Ev
  virtual void  v60(); // _ZN7S3252C33v60Ev
  virtual void  v61(); // _ZN7S3252C33v61Ev
  virtual void  v62(); // _ZN7S3252C33v62Ev
  virtual void  v63(); // _ZN7S3252C33v63Ev
  virtual void  v64(); // _ZN7S3252C33v64Ev
  virtual void  v65(); // _ZN7S3252C33v65Ev
  virtual void  v66(); // _ZN7S3252C33v66Ev
  virtual void  v67(); // _ZN7S3252C33v67Ev
  S3252C3(); // tgen
};
//SIG(-1 S3252C3) 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]}


 S3252C3 ::~S3252C3(){ note_dtor("S3252C3", this);}
void  S3252C3 ::v4(){vfunc_called(this, "_ZN7S3252C32v4Ev");}
void  S3252C3 ::v5(){vfunc_called(this, "_ZN7S3252C32v5Ev");}
void  S3252C3 ::v6(){vfunc_called(this, "_ZN7S3252C32v6Ev");}
void  S3252C3 ::v7(){vfunc_called(this, "_ZN7S3252C32v7Ev");}
void  S3252C3 ::v8(){vfunc_called(this, "_ZN7S3252C32v8Ev");}
void  S3252C3 ::v9(){vfunc_called(this, "_ZN7S3252C32v9Ev");}
void  S3252C3 ::v10(){vfunc_called(this, "_ZN7S3252C33v10Ev");}
void  S3252C3 ::v11(){vfunc_called(this, "_ZN7S3252C33v11Ev");}
void  S3252C3 ::v12(){vfunc_called(this, "_ZN7S3252C33v12Ev");}
void  S3252C3 ::v13(){vfunc_called(this, "_ZN7S3252C33v13Ev");}
void  S3252C3 ::v14(){vfunc_called(this, "_ZN7S3252C33v14Ev");}
void  S3252C3 ::v15(){vfunc_called(this, "_ZN7S3252C33v15Ev");}
void  S3252C3 ::v16(){vfunc_called(this, "_ZN7S3252C33v16Ev");}
void  S3252C3 ::v17(){vfunc_called(this, "_ZN7S3252C33v17Ev");}
void  S3252C3 ::v18(){vfunc_called(this, "_ZN7S3252C33v18Ev");}
void  S3252C3 ::v19(){vfunc_called(this, "_ZN7S3252C33v19Ev");}
void  S3252C3 ::v20(){vfunc_called(this, "_ZN7S3252C33v20Ev");}
void  S3252C3 ::v21(){vfunc_called(this, "_ZN7S3252C33v21Ev");}
void  S3252C3 ::v22(){vfunc_called(this, "_ZN7S3252C33v22Ev");}
void  S3252C3 ::v23(){vfunc_called(this, "_ZN7S3252C33v23Ev");}
void  S3252C3 ::v24(){vfunc_called(this, "_ZN7S3252C33v24Ev");}
void  S3252C3 ::v25(){vfunc_called(this, "_ZN7S3252C33v25Ev");}
void  S3252C3 ::v26(){vfunc_called(this, "_ZN7S3252C33v26Ev");}
void  S3252C3 ::v27(){vfunc_called(this, "_ZN7S3252C33v27Ev");}
void  S3252C3 ::v28(){vfunc_called(this, "_ZN7S3252C33v28Ev");}
void  S3252C3 ::v29(){vfunc_called(this, "_ZN7S3252C33v29Ev");}
void  S3252C3 ::v30(){vfunc_called(this, "_ZN7S3252C33v30Ev");}
void  S3252C3 ::v31(){vfunc_called(this, "_ZN7S3252C33v31Ev");}
void  S3252C3 ::v32(){vfunc_called(this, "_ZN7S3252C33v32Ev");}
void  S3252C3 ::v33(){vfunc_called(this, "_ZN7S3252C33v33Ev");}
void  S3252C3 ::v34(){vfunc_called(this, "_ZN7S3252C33v34Ev");}
void  S3252C3 ::v35(){vfunc_called(this, "_ZN7S3252C33v35Ev");}
void  S3252C3 ::v36(){vfunc_called(this, "_ZN7S3252C33v36Ev");}
void  S3252C3 ::v37(){vfunc_called(this, "_ZN7S3252C33v37Ev");}
void  S3252C3 ::v38(){vfunc_called(this, "_ZN7S3252C33v38Ev");}
void  S3252C3 ::v39(){vfunc_called(this, "_ZN7S3252C33v39Ev");}
void  S3252C3 ::v40(){vfunc_called(this, "_ZN7S3252C33v40Ev");}
void  S3252C3 ::v41(){vfunc_called(this, "_ZN7S3252C33v41Ev");}
void  S3252C3 ::v42(){vfunc_called(this, "_ZN7S3252C33v42Ev");}
void  S3252C3 ::v43(){vfunc_called(this, "_ZN7S3252C33v43Ev");}
void  S3252C3 ::v44(){vfunc_called(this, "_ZN7S3252C33v44Ev");}
void  S3252C3 ::v45(){vfunc_called(this, "_ZN7S3252C33v45Ev");}
void  S3252C3 ::v46(){vfunc_called(this, "_ZN7S3252C33v46Ev");}
void  S3252C3 ::v47(){vfunc_called(this, "_ZN7S3252C33v47Ev");}
void  S3252C3 ::v48(){vfunc_called(this, "_ZN7S3252C33v48Ev");}
void  S3252C3 ::v49(){vfunc_called(this, "_ZN7S3252C33v49Ev");}
void  S3252C3 ::v50(){vfunc_called(this, "_ZN7S3252C33v50Ev");}
void  S3252C3 ::v51(){vfunc_called(this, "_ZN7S3252C33v51Ev");}
void  S3252C3 ::v52(){vfunc_called(this, "_ZN7S3252C33v52Ev");}
void  S3252C3 ::v53(){vfunc_called(this, "_ZN7S3252C33v53Ev");}
void  S3252C3 ::v54(){vfunc_called(this, "_ZN7S3252C33v54Ev");}
void  S3252C3 ::v55(){vfunc_called(this, "_ZN7S3252C33v55Ev");}
void  S3252C3 ::v56(){vfunc_called(this, "_ZN7S3252C33v56Ev");}
void  S3252C3 ::v57(){vfunc_called(this, "_ZN7S3252C33v57Ev");}
void  S3252C3 ::v58(){vfunc_called(this, "_ZN7S3252C33v58Ev");}
void  S3252C3 ::v59(){vfunc_called(this, "_ZN7S3252C33v59Ev");}
void  S3252C3 ::v60(){vfunc_called(this, "_ZN7S3252C33v60Ev");}
void  S3252C3 ::v61(){vfunc_called(this, "_ZN7S3252C33v61Ev");}
void  S3252C3 ::v62(){vfunc_called(this, "_ZN7S3252C33v62Ev");}
void  S3252C3 ::v63(){vfunc_called(this, "_ZN7S3252C33v63Ev");}
void  S3252C3 ::v64(){vfunc_called(this, "_ZN7S3252C33v64Ev");}
void  S3252C3 ::v65(){vfunc_called(this, "_ZN7S3252C33v65Ev");}
void  S3252C3 ::v66(){vfunc_called(this, "_ZN7S3252C33v66Ev");}
void  S3252C3 ::v67(){vfunc_called(this, "_ZN7S3252C33v67Ev");}
S3252C3 ::S3252C3(){ note_ctor("S3252C3", this);} // tgen

static void Test_S3252C3()
{
  extern Class_Descriptor cd_S3252C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3252C3, buf);
    S3252C3 *dp, &lv = *(dp=new (buf) S3252C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3252C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3252C3)");
    check_field_offset(lv, s3252c3f0, ABISELECT(8,4), "S3252C3.s3252c3f0");
    check_field_offset(lv, s3252c3f1, ABISELECT(16,8), "S3252C3.s3252c3f1");
    check_field_offset(lv, s3252c3f2, ABISELECT(24,16), "S3252C3.s3252c3f2");
    check_field_offset(lv, s3252c3f3, ABISELECT(56,32), "S3252C3.s3252c3f3");
    check_field_offset(lv, s3252c3f4, ABISELECT(64,40), "S3252C3.s3252c3f4");
    check_field_offset(lv, s3252c3f5, ABISELECT(72,44), "S3252C3.s3252c3f5");
    check_field_offset(lv, s3252c3f6, ABISELECT(80,52), "S3252C3.s3252c3f6");
    test_class_info(&lv, &cd_S3252C3);
    dp->~S3252C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3252C3(Test_S3252C3, "S3252C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3252C3C1Ev();
extern void _ZN7S3252C3D1Ev();
Name_Map name_map_S3252C3[] = {
  NSPAIR(_ZN7S3252C3C1Ev),
  NSPAIR(_ZN7S3252C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3252C3[];
extern void _ZN7S3252C3D1Ev();
extern void _ZN7S3252C3D0Ev();
extern void _ZN7S3252C32v4Ev();
extern void _ZN7S3252C32v5Ev();
extern void _ZN7S3252C32v6Ev();
extern void _ZN7S3252C32v7Ev();
extern void _ZN7S3252C32v8Ev();
extern void _ZN7S3252C32v9Ev();
extern void _ZN7S3252C33v10Ev();
extern void _ZN7S3252C33v11Ev();
extern void _ZN7S3252C33v12Ev();
extern void _ZN7S3252C33v13Ev();
extern void _ZN7S3252C33v14Ev();
extern void _ZN7S3252C33v15Ev();
extern void _ZN7S3252C33v16Ev();
extern void _ZN7S3252C33v17Ev();
extern void _ZN7S3252C33v18Ev();
extern void _ZN7S3252C33v19Ev();
extern void _ZN7S3252C33v20Ev();
extern void _ZN7S3252C33v21Ev();
extern void _ZN7S3252C33v22Ev();
extern void _ZN7S3252C33v23Ev();
extern void _ZN7S3252C33v24Ev();
extern void _ZN7S3252C33v25Ev();
extern void _ZN7S3252C33v26Ev();
extern void _ZN7S3252C33v27Ev();
extern void _ZN7S3252C33v28Ev();
extern void _ZN7S3252C33v29Ev();
extern void _ZN7S3252C33v30Ev();
extern void _ZN7S3252C33v31Ev();
extern void _ZN7S3252C33v32Ev();
extern void _ZN7S3252C33v33Ev();
extern void _ZN7S3252C33v34Ev();
extern void _ZN7S3252C33v35Ev();
extern void _ZN7S3252C33v36Ev();
extern void _ZN7S3252C33v37Ev();
extern void _ZN7S3252C33v38Ev();
extern void _ZN7S3252C33v39Ev();
extern void _ZN7S3252C33v40Ev();
extern void _ZN7S3252C33v41Ev();
extern void _ZN7S3252C33v42Ev();
extern void _ZN7S3252C33v43Ev();
extern void _ZN7S3252C33v44Ev();
extern void _ZN7S3252C33v45Ev();
extern void _ZN7S3252C33v46Ev();
extern void _ZN7S3252C33v47Ev();
extern void _ZN7S3252C33v48Ev();
extern void _ZN7S3252C33v49Ev();
extern void _ZN7S3252C33v50Ev();
extern void _ZN7S3252C33v51Ev();
extern void _ZN7S3252C33v52Ev();
extern void _ZN7S3252C33v53Ev();
extern void _ZN7S3252C33v54Ev();
extern void _ZN7S3252C33v55Ev();
extern void _ZN7S3252C33v56Ev();
extern void _ZN7S3252C33v57Ev();
extern void _ZN7S3252C33v58Ev();
extern void _ZN7S3252C33v59Ev();
extern void _ZN7S3252C33v60Ev();
extern void _ZN7S3252C33v61Ev();
extern void _ZN7S3252C33v62Ev();
extern void _ZN7S3252C33v63Ev();
extern void _ZN7S3252C33v64Ev();
extern void _ZN7S3252C33v65Ev();
extern void _ZN7S3252C33v66Ev();
extern void _ZN7S3252C33v67Ev();
static  VTBL_ENTRY vtc_S3252C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3252C3[0]),
  (VTBL_ENTRY)&_ZN7S3252C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3252C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3252C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3252C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3252C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3252C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3252C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3252C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v67Ev,
};
extern VTBL_ENTRY _ZTI7S3252C3[];
extern  VTBL_ENTRY _ZTV7S3252C3[];
Class_Descriptor cd_S3252C3 = {  "S3252C3", // class name
  0,0,//no base classes
  &(vtc_S3252C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3252C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3252C3),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  S3252C2  : S3252C3 {
  virtual  ~S3252C2(); // _ZN7S3252C2D1Ev
  virtual void  v68(); // _ZN7S3252C23v68Ev
  virtual void  v69(); // _ZN7S3252C23v69Ev
  virtual void  v70(); // _ZN7S3252C23v70Ev
  S3252C2(); // tgen
};
//SIG(-1 S3252C2) 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}


 S3252C2 ::~S3252C2(){ note_dtor("S3252C2", this);}
void  S3252C2 ::v68(){vfunc_called(this, "_ZN7S3252C23v68Ev");}
void  S3252C2 ::v69(){vfunc_called(this, "_ZN7S3252C23v69Ev");}
void  S3252C2 ::v70(){vfunc_called(this, "_ZN7S3252C23v70Ev");}
S3252C2 ::S3252C2(){ note_ctor("S3252C2", this);} // tgen

static void Test_S3252C2()
{
  extern Class_Descriptor cd_S3252C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3252C2, buf);
    S3252C2 *dp, &lv = *(dp=new (buf) S3252C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3252C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3252C2)");
    check_base_class_offset(lv, (S3252C3*), 0, "S3252C2");
    test_class_info(&lv, &cd_S3252C2);
    dp->~S3252C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3252C2(Test_S3252C2, "S3252C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3252C2C1Ev();
extern void _ZN7S3252C2D1Ev();
Name_Map name_map_S3252C2[] = {
  NSPAIR(_ZN7S3252C2C1Ev),
  NSPAIR(_ZN7S3252C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3252C3;
extern VTBL_ENTRY _ZTI7S3252C3[];
extern  VTBL_ENTRY _ZTV7S3252C3[];
static Base_Class bases_S3252C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3252C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S3252C2[];
extern void _ZN7S3252C2D1Ev();
extern void _ZN7S3252C2D0Ev();
extern void _ZN7S3252C32v4Ev();
extern void _ZN7S3252C32v5Ev();
extern void _ZN7S3252C32v6Ev();
extern void _ZN7S3252C32v7Ev();
extern void _ZN7S3252C32v8Ev();
extern void _ZN7S3252C32v9Ev();
extern void _ZN7S3252C33v10Ev();
extern void _ZN7S3252C33v11Ev();
extern void _ZN7S3252C33v12Ev();
extern void _ZN7S3252C33v13Ev();
extern void _ZN7S3252C33v14Ev();
extern void _ZN7S3252C33v15Ev();
extern void _ZN7S3252C33v16Ev();
extern void _ZN7S3252C33v17Ev();
extern void _ZN7S3252C33v18Ev();
extern void _ZN7S3252C33v19Ev();
extern void _ZN7S3252C33v20Ev();
extern void _ZN7S3252C33v21Ev();
extern void _ZN7S3252C33v22Ev();
extern void _ZN7S3252C33v23Ev();
extern void _ZN7S3252C33v24Ev();
extern void _ZN7S3252C33v25Ev();
extern void _ZN7S3252C33v26Ev();
extern void _ZN7S3252C33v27Ev();
extern void _ZN7S3252C33v28Ev();
extern void _ZN7S3252C33v29Ev();
extern void _ZN7S3252C33v30Ev();
extern void _ZN7S3252C33v31Ev();
extern void _ZN7S3252C33v32Ev();
extern void _ZN7S3252C33v33Ev();
extern void _ZN7S3252C33v34Ev();
extern void _ZN7S3252C33v35Ev();
extern void _ZN7S3252C33v36Ev();
extern void _ZN7S3252C33v37Ev();
extern void _ZN7S3252C33v38Ev();
extern void _ZN7S3252C33v39Ev();
extern void _ZN7S3252C33v40Ev();
extern void _ZN7S3252C33v41Ev();
extern void _ZN7S3252C33v42Ev();
extern void _ZN7S3252C33v43Ev();
extern void _ZN7S3252C33v44Ev();
extern void _ZN7S3252C33v45Ev();
extern void _ZN7S3252C33v46Ev();
extern void _ZN7S3252C33v47Ev();
extern void _ZN7S3252C33v48Ev();
extern void _ZN7S3252C33v49Ev();
extern void _ZN7S3252C33v50Ev();
extern void _ZN7S3252C33v51Ev();
extern void _ZN7S3252C33v52Ev();
extern void _ZN7S3252C33v53Ev();
extern void _ZN7S3252C33v54Ev();
extern void _ZN7S3252C33v55Ev();
extern void _ZN7S3252C33v56Ev();
extern void _ZN7S3252C33v57Ev();
extern void _ZN7S3252C33v58Ev();
extern void _ZN7S3252C33v59Ev();
extern void _ZN7S3252C33v60Ev();
extern void _ZN7S3252C33v61Ev();
extern void _ZN7S3252C33v62Ev();
extern void _ZN7S3252C33v63Ev();
extern void _ZN7S3252C33v64Ev();
extern void _ZN7S3252C33v65Ev();
extern void _ZN7S3252C33v66Ev();
extern void _ZN7S3252C33v67Ev();
extern void _ZN7S3252C23v68Ev();
extern void _ZN7S3252C23v69Ev();
extern void _ZN7S3252C23v70Ev();
static  VTBL_ENTRY vtc_S3252C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3252C2[0]),
  (VTBL_ENTRY)&_ZN7S3252C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3252C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3252C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3252C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3252C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3252C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3252C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3252C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3252C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3252C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3252C23v70Ev,
};
extern VTBL_ENTRY _ZTI7S3252C2[];
extern  VTBL_ENTRY _ZTV7S3252C2[];
Class_Descriptor cd_S3252C2 = {  "S3252C2", // class name
  bases_S3252C2, 1,
  &(vtc_S3252C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3252C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3252C2),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  S3252C1  : S3252C2 {
  void *s3252c1f0;
  unsigned int s3252c1f1:1;
  ::S1378C5_nt s3252c1f2;
  virtual  ~S3252C1(); // _ZN7S3252C1D1Ev
  virtual void  v1(); // _ZN7S3252C12v1Ev
  virtual void  v2(); // _ZN7S3252C12v2Ev
  virtual void  v3(); // _ZN7S3252C12v3Ev
  S3252C1(); // tgen
};
//SIG(1 S3252C1) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v68 v69 v70} vd v1 v2 v3 Fp Fi:1 FC4}


 S3252C1 ::~S3252C1(){ note_dtor("S3252C1", this);}
void  S3252C1 ::v1(){vfunc_called(this, "_ZN7S3252C12v1Ev");}
void  S3252C1 ::v2(){vfunc_called(this, "_ZN7S3252C12v2Ev");}
void  S3252C1 ::v3(){vfunc_called(this, "_ZN7S3252C12v3Ev");}
S3252C1 ::S3252C1(){ note_ctor("S3252C1", this);} // tgen

static void Test_S3252C1()
{
  extern Class_Descriptor cd_S3252C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S3252C1, buf);
    S3252C1 *dp, &lv = *(dp=new (buf) S3252C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S3252C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3252C1)");
    check_base_class_offset(lv, (S3252C3*)(S3252C2*), 0, "S3252C1");
    check_base_class_offset(lv, (S3252C2*), 0, "S3252C1");
    check_field_offset(lv, s3252c1f0, ABISELECT(96,60), "S3252C1.s3252c1f0");
    set_bf_and_test(lv, s3252c1f1, ABISELECT(104,64), 0, 1, 1, "S3252C1");
    check_field_offset(lv, s3252c1f2, ABISELECT(108,68), "S3252C1.s3252c1f2");
    test_class_info(&lv, &cd_S3252C1);
    dp->~S3252C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3252C1(Test_S3252C1, "S3252C1", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S3252C1C1Ev();
extern void _ZN7S3252C1D1Ev();
Name_Map name_map_S3252C1[] = {
  NSPAIR(_ZN7S3252C1C1Ev),
  NSPAIR(_ZN7S3252C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3252C3;
extern VTBL_ENTRY _ZTI7S3252C3[];
extern  VTBL_ENTRY _ZTV7S3252C3[];
extern Class_Descriptor cd_S3252C2;
extern VTBL_ENTRY _ZTI7S3252C2[];
extern  VTBL_ENTRY _ZTV7S3252C2[];
static Base_Class bases_S3252C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3252C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3252C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3252C1[];
extern void _ZN7S3252C1D1Ev();
extern void _ZN7S3252C1D0Ev();
extern void _ZN7S3252C32v4Ev();
extern void _ZN7S3252C32v5Ev();
extern void _ZN7S3252C32v6Ev();
extern void _ZN7S3252C32v7Ev();
extern void _ZN7S3252C32v8Ev();
extern void _ZN7S3252C32v9Ev();
extern void _ZN7S3252C33v10Ev();
extern void _ZN7S3252C33v11Ev();
extern void _ZN7S3252C33v12Ev();
extern void _ZN7S3252C33v13Ev();
extern void _ZN7S3252C33v14Ev();
extern void _ZN7S3252C33v15Ev();
extern void _ZN7S3252C33v16Ev();
extern void _ZN7S3252C33v17Ev();
extern void _ZN7S3252C33v18Ev();
extern void _ZN7S3252C33v19Ev();
extern void _ZN7S3252C33v20Ev();
extern void _ZN7S3252C33v21Ev();
extern void _ZN7S3252C33v22Ev();
extern void _ZN7S3252C33v23Ev();
extern void _ZN7S3252C33v24Ev();
extern void _ZN7S3252C33v25Ev();
extern void _ZN7S3252C33v26Ev();
extern void _ZN7S3252C33v27Ev();
extern void _ZN7S3252C33v28Ev();
extern void _ZN7S3252C33v29Ev();
extern void _ZN7S3252C33v30Ev();
extern void _ZN7S3252C33v31Ev();
extern void _ZN7S3252C33v32Ev();
extern void _ZN7S3252C33v33Ev();
extern void _ZN7S3252C33v34Ev();
extern void _ZN7S3252C33v35Ev();
extern void _ZN7S3252C33v36Ev();
extern void _ZN7S3252C33v37Ev();
extern void _ZN7S3252C33v38Ev();
extern void _ZN7S3252C33v39Ev();
extern void _ZN7S3252C33v40Ev();
extern void _ZN7S3252C33v41Ev();
extern void _ZN7S3252C33v42Ev();
extern void _ZN7S3252C33v43Ev();
extern void _ZN7S3252C33v44Ev();
extern void _ZN7S3252C33v45Ev();
extern void _ZN7S3252C33v46Ev();
extern void _ZN7S3252C33v47Ev();
extern void _ZN7S3252C33v48Ev();
extern void _ZN7S3252C33v49Ev();
extern void _ZN7S3252C33v50Ev();
extern void _ZN7S3252C33v51Ev();
extern void _ZN7S3252C33v52Ev();
extern void _ZN7S3252C33v53Ev();
extern void _ZN7S3252C33v54Ev();
extern void _ZN7S3252C33v55Ev();
extern void _ZN7S3252C33v56Ev();
extern void _ZN7S3252C33v57Ev();
extern void _ZN7S3252C33v58Ev();
extern void _ZN7S3252C33v59Ev();
extern void _ZN7S3252C33v60Ev();
extern void _ZN7S3252C33v61Ev();
extern void _ZN7S3252C33v62Ev();
extern void _ZN7S3252C33v63Ev();
extern void _ZN7S3252C33v64Ev();
extern void _ZN7S3252C33v65Ev();
extern void _ZN7S3252C33v66Ev();
extern void _ZN7S3252C33v67Ev();
extern void _ZN7S3252C23v68Ev();
extern void _ZN7S3252C23v69Ev();
extern void _ZN7S3252C23v70Ev();
extern void _ZN7S3252C12v1Ev();
extern void _ZN7S3252C12v2Ev();
extern void _ZN7S3252C12v3Ev();
static  VTBL_ENTRY vtc_S3252C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3252C1[0]),
  (VTBL_ENTRY)&_ZN7S3252C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3252C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3252C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3252C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3252C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3252C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3252C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3252C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3252C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3252C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3252C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3252C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3252C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3252C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3252C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3252C1[];
extern  VTBL_ENTRY _ZTV7S3252C1[];
Class_Descriptor cd_S3252C1 = {  "S3252C1", // class name
  bases_S3252C1, 2,
  &(vtc_S3252C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S3252C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3252C1),74, //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  S3250C3  {
  int s3250c3f0;
  __tsi64 s3250c3f1;
  void *s3250c3f2[4];
  int s3250c3f3[2];
  void *s3250c3f4;
  ::S1378C5_nt s3250c3f5;
  void *s3250c3f6[2];
  virtual  ~S3250C3(); // _ZN7S3250C3D1Ev
  virtual void  v4(); // _ZN7S3250C32v4Ev
  virtual void  v5(); // _ZN7S3250C32v5Ev
  virtual void  v6(); // _ZN7S3250C32v6Ev
  virtual void  v7(); // _ZN7S3250C32v7Ev
  virtual void  v8(); // _ZN7S3250C32v8Ev
  virtual void  v9(); // _ZN7S3250C32v9Ev
  virtual void  v10(); // _ZN7S3250C33v10Ev
  virtual void  v11(); // _ZN7S3250C33v11Ev
  virtual void  v12(); // _ZN7S3250C33v12Ev
  virtual void  v13(); // _ZN7S3250C33v13Ev
  virtual void  v14(); // _ZN7S3250C33v14Ev
  virtual void  v15(); // _ZN7S3250C33v15Ev
  virtual void  v16(); // _ZN7S3250C33v16Ev
  virtual void  v17(); // _ZN7S3250C33v17Ev
  virtual void  v18(); // _ZN7S3250C33v18Ev
  virtual void  v19(); // _ZN7S3250C33v19Ev
  virtual void  v20(); // _ZN7S3250C33v20Ev
  virtual void  v21(); // _ZN7S3250C33v21Ev
  virtual void  v22(); // _ZN7S3250C33v22Ev
  virtual void  v23(); // _ZN7S3250C33v23Ev
  virtual void  v24(); // _ZN7S3250C33v24Ev
  virtual void  v25(); // _ZN7S3250C33v25Ev
  virtual void  v26(); // _ZN7S3250C33v26Ev
  virtual void  v27(); // _ZN7S3250C33v27Ev
  virtual void  v28(); // _ZN7S3250C33v28Ev
  virtual void  v29(); // _ZN7S3250C33v29Ev
  virtual void  v30(); // _ZN7S3250C33v30Ev
  virtual void  v31(); // _ZN7S3250C33v31Ev
  virtual void  v32(); // _ZN7S3250C33v32Ev
  virtual void  v33(); // _ZN7S3250C33v33Ev
  virtual void  v34(); // _ZN7S3250C33v34Ev
  virtual void  v35(); // _ZN7S3250C33v35Ev
  virtual void  v36(); // _ZN7S3250C33v36Ev
  virtual void  v37(); // _ZN7S3250C33v37Ev
  virtual void  v38(); // _ZN7S3250C33v38Ev
  virtual void  v39(); // _ZN7S3250C33v39Ev
  virtual void  v40(); // _ZN7S3250C33v40Ev
  virtual void  v41(); // _ZN7S3250C33v41Ev
  virtual void  v42(); // _ZN7S3250C33v42Ev
  virtual void  v43(); // _ZN7S3250C33v43Ev
  virtual void  v44(); // _ZN7S3250C33v44Ev
  virtual void  v45(); // _ZN7S3250C33v45Ev
  virtual void  v46(); // _ZN7S3250C33v46Ev
  virtual void  v47(); // _ZN7S3250C33v47Ev
  virtual void  v48(); // _ZN7S3250C33v48Ev
  virtual void  v49(); // _ZN7S3250C33v49Ev
  virtual void  v50(); // _ZN7S3250C33v50Ev
  virtual void  v51(); // _ZN7S3250C33v51Ev
  virtual void  v52(); // _ZN7S3250C33v52Ev
  virtual void  v53(); // _ZN7S3250C33v53Ev
  virtual void  v54(); // _ZN7S3250C33v54Ev
  virtual void  v55(); // _ZN7S3250C33v55Ev
  virtual void  v56(); // _ZN7S3250C33v56Ev
  virtual void  v57(); // _ZN7S3250C33v57Ev
  virtual void  v58(); // _ZN7S3250C33v58Ev
  virtual void  v59(); // _ZN7S3250C33v59Ev
  virtual void  v60(); // _ZN7S3250C33v60Ev
  virtual void  v61(); // _ZN7S3250C33v61Ev
  virtual void  v62(); // _ZN7S3250C33v62Ev
  virtual void  v63(); // _ZN7S3250C33v63Ev
  virtual void  v64(); // _ZN7S3250C33v64Ev
  virtual void  v65(); // _ZN7S3250C33v65Ev
  virtual void  v66(); // _ZN7S3250C33v66Ev
  virtual void  v67(); // _ZN7S3250C33v67Ev
  S3250C3(); // tgen
};
//SIG(-1 S3250C3) 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]}


 S3250C3 ::~S3250C3(){ note_dtor("S3250C3", this);}
void  S3250C3 ::v4(){vfunc_called(this, "_ZN7S3250C32v4Ev");}
void  S3250C3 ::v5(){vfunc_called(this, "_ZN7S3250C32v5Ev");}
void  S3250C3 ::v6(){vfunc_called(this, "_ZN7S3250C32v6Ev");}
void  S3250C3 ::v7(){vfunc_called(this, "_ZN7S3250C32v7Ev");}
void  S3250C3 ::v8(){vfunc_called(this, "_ZN7S3250C32v8Ev");}
void  S3250C3 ::v9(){vfunc_called(this, "_ZN7S3250C32v9Ev");}
void  S3250C3 ::v10(){vfunc_called(this, "_ZN7S3250C33v10Ev");}
void  S3250C3 ::v11(){vfunc_called(this, "_ZN7S3250C33v11Ev");}
void  S3250C3 ::v12(){vfunc_called(this, "_ZN7S3250C33v12Ev");}
void  S3250C3 ::v13(){vfunc_called(this, "_ZN7S3250C33v13Ev");}
void  S3250C3 ::v14(){vfunc_called(this, "_ZN7S3250C33v14Ev");}
void  S3250C3 ::v15(){vfunc_called(this, "_ZN7S3250C33v15Ev");}
void  S3250C3 ::v16(){vfunc_called(this, "_ZN7S3250C33v16Ev");}
void  S3250C3 ::v17(){vfunc_called(this, "_ZN7S3250C33v17Ev");}
void  S3250C3 ::v18(){vfunc_called(this, "_ZN7S3250C33v18Ev");}
void  S3250C3 ::v19(){vfunc_called(this, "_ZN7S3250C33v19Ev");}
void  S3250C3 ::v20(){vfunc_called(this, "_ZN7S3250C33v20Ev");}
void  S3250C3 ::v21(){vfunc_called(this, "_ZN7S3250C33v21Ev");}
void  S3250C3 ::v22(){vfunc_called(this, "_ZN7S3250C33v22Ev");}
void  S3250C3 ::v23(){vfunc_called(this, "_ZN7S3250C33v23Ev");}
void  S3250C3 ::v24(){vfunc_called(this, "_ZN7S3250C33v24Ev");}
void  S3250C3 ::v25(){vfunc_called(this, "_ZN7S3250C33v25Ev");}
void  S3250C3 ::v26(){vfunc_called(this, "_ZN7S3250C33v26Ev");}
void  S3250C3 ::v27(){vfunc_called(this, "_ZN7S3250C33v27Ev");}
void  S3250C3 ::v28(){vfunc_called(this, "_ZN7S3250C33v28Ev");}
void  S3250C3 ::v29(){vfunc_called(this, "_ZN7S3250C33v29Ev");}
void  S3250C3 ::v30(){vfunc_called(this, "_ZN7S3250C33v30Ev");}
void  S3250C3 ::v31(){vfunc_called(this, "_ZN7S3250C33v31Ev");}
void  S3250C3 ::v32(){vfunc_called(this, "_ZN7S3250C33v32Ev");}
void  S3250C3 ::v33(){vfunc_called(this, "_ZN7S3250C33v33Ev");}
void  S3250C3 ::v34(){vfunc_called(this, "_ZN7S3250C33v34Ev");}
void  S3250C3 ::v35(){vfunc_called(this, "_ZN7S3250C33v35Ev");}
void  S3250C3 ::v36(){vfunc_called(this, "_ZN7S3250C33v36Ev");}
void  S3250C3 ::v37(){vfunc_called(this, "_ZN7S3250C33v37Ev");}
void  S3250C3 ::v38(){vfunc_called(this, "_ZN7S3250C33v38Ev");}
void  S3250C3 ::v39(){vfunc_called(this, "_ZN7S3250C33v39Ev");}
void  S3250C3 ::v40(){vfunc_called(this, "_ZN7S3250C33v40Ev");}
void  S3250C3 ::v41(){vfunc_called(this, "_ZN7S3250C33v41Ev");}
void  S3250C3 ::v42(){vfunc_called(this, "_ZN7S3250C33v42Ev");}
void  S3250C3 ::v43(){vfunc_called(this, "_ZN7S3250C33v43Ev");}
void  S3250C3 ::v44(){vfunc_called(this, "_ZN7S3250C33v44Ev");}
void  S3250C3 ::v45(){vfunc_called(this, "_ZN7S3250C33v45Ev");}
void  S3250C3 ::v46(){vfunc_called(this, "_ZN7S3250C33v46Ev");}
void  S3250C3 ::v47(){vfunc_called(this, "_ZN7S3250C33v47Ev");}
void  S3250C3 ::v48(){vfunc_called(this, "_ZN7S3250C33v48Ev");}
void  S3250C3 ::v49(){vfunc_called(this, "_ZN7S3250C33v49Ev");}
void  S3250C3 ::v50(){vfunc_called(this, "_ZN7S3250C33v50Ev");}
void  S3250C3 ::v51(){vfunc_called(this, "_ZN7S3250C33v51Ev");}
void  S3250C3 ::v52(){vfunc_called(this, "_ZN7S3250C33v52Ev");}
void  S3250C3 ::v53(){vfunc_called(this, "_ZN7S3250C33v53Ev");}
void  S3250C3 ::v54(){vfunc_called(this, "_ZN7S3250C33v54Ev");}
void  S3250C3 ::v55(){vfunc_called(this, "_ZN7S3250C33v55Ev");}
void  S3250C3 ::v56(){vfunc_called(this, "_ZN7S3250C33v56Ev");}
void  S3250C3 ::v57(){vfunc_called(this, "_ZN7S3250C33v57Ev");}
void  S3250C3 ::v58(){vfunc_called(this, "_ZN7S3250C33v58Ev");}
void  S3250C3 ::v59(){vfunc_called(this, "_ZN7S3250C33v59Ev");}
void  S3250C3 ::v60(){vfunc_called(this, "_ZN7S3250C33v60Ev");}
void  S3250C3 ::v61(){vfunc_called(this, "_ZN7S3250C33v61Ev");}
void  S3250C3 ::v62(){vfunc_called(this, "_ZN7S3250C33v62Ev");}
void  S3250C3 ::v63(){vfunc_called(this, "_ZN7S3250C33v63Ev");}
void  S3250C3 ::v64(){vfunc_called(this, "_ZN7S3250C33v64Ev");}
void  S3250C3 ::v65(){vfunc_called(this, "_ZN7S3250C33v65Ev");}
void  S3250C3 ::v66(){vfunc_called(this, "_ZN7S3250C33v66Ev");}
void  S3250C3 ::v67(){vfunc_called(this, "_ZN7S3250C33v67Ev");}
S3250C3 ::S3250C3(){ note_ctor("S3250C3", this);} // tgen

static void Test_S3250C3()
{
  extern Class_Descriptor cd_S3250C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3250C3, buf);
    S3250C3 *dp, &lv = *(dp=new (buf) S3250C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3250C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3250C3)");
    check_field_offset(lv, s3250c3f0, ABISELECT(8,4), "S3250C3.s3250c3f0");
    check_field_offset(lv, s3250c3f1, ABISELECT(16,8), "S3250C3.s3250c3f1");
    check_field_offset(lv, s3250c3f2, ABISELECT(24,16), "S3250C3.s3250c3f2");
    check_field_offset(lv, s3250c3f3, ABISELECT(56,32), "S3250C3.s3250c3f3");
    check_field_offset(lv, s3250c3f4, ABISELECT(64,40), "S3250C3.s3250c3f4");
    check_field_offset(lv, s3250c3f5, ABISELECT(72,44), "S3250C3.s3250c3f5");
    check_field_offset(lv, s3250c3f6, ABISELECT(80,52), "S3250C3.s3250c3f6");
    test_class_info(&lv, &cd_S3250C3);
    dp->~S3250C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3250C3(Test_S3250C3, "S3250C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3250C3C1Ev();
extern void _ZN7S3250C3D1Ev();
Name_Map name_map_S3250C3[] = {
  NSPAIR(_ZN7S3250C3C1Ev),
  NSPAIR(_ZN7S3250C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3250C3[];
extern void _ZN7S3250C3D1Ev();
extern void _ZN7S3250C3D0Ev();
extern void _ZN7S3250C32v4Ev();
extern void _ZN7S3250C32v5Ev();
extern void _ZN7S3250C32v6Ev();
extern void _ZN7S3250C32v7Ev();
extern void _ZN7S3250C32v8Ev();
extern void _ZN7S3250C32v9Ev();
extern void _ZN7S3250C33v10Ev();
extern void _ZN7S3250C33v11Ev();
extern void _ZN7S3250C33v12Ev();
extern void _ZN7S3250C33v13Ev();
extern void _ZN7S3250C33v14Ev();
extern void _ZN7S3250C33v15Ev();
extern void _ZN7S3250C33v16Ev();
extern void _ZN7S3250C33v17Ev();
extern void _ZN7S3250C33v18Ev();
extern void _ZN7S3250C33v19Ev();
extern void _ZN7S3250C33v20Ev();
extern void _ZN7S3250C33v21Ev();
extern void _ZN7S3250C33v22Ev();
extern void _ZN7S3250C33v23Ev();
extern void _ZN7S3250C33v24Ev();
extern void _ZN7S3250C33v25Ev();
extern void _ZN7S3250C33v26Ev();
extern void _ZN7S3250C33v27Ev();
extern void _ZN7S3250C33v28Ev();
extern void _ZN7S3250C33v29Ev();
extern void _ZN7S3250C33v30Ev();
extern void _ZN7S3250C33v31Ev();
extern void _ZN7S3250C33v32Ev();
extern void _ZN7S3250C33v33Ev();
extern void _ZN7S3250C33v34Ev();
extern void _ZN7S3250C33v35Ev();
extern void _ZN7S3250C33v36Ev();
extern void _ZN7S3250C33v37Ev();
extern void _ZN7S3250C33v38Ev();
extern void _ZN7S3250C33v39Ev();
extern void _ZN7S3250C33v40Ev();
extern void _ZN7S3250C33v41Ev();
extern void _ZN7S3250C33v42Ev();
extern void _ZN7S3250C33v43Ev();
extern void _ZN7S3250C33v44Ev();
extern void _ZN7S3250C33v45Ev();
extern void _ZN7S3250C33v46Ev();
extern void _ZN7S3250C33v47Ev();
extern void _ZN7S3250C33v48Ev();
extern void _ZN7S3250C33v49Ev();
extern void _ZN7S3250C33v50Ev();
extern void _ZN7S3250C33v51Ev();
extern void _ZN7S3250C33v52Ev();
extern void _ZN7S3250C33v53Ev();
extern void _ZN7S3250C33v54Ev();
extern void _ZN7S3250C33v55Ev();
extern void _ZN7S3250C33v56Ev();
extern void _ZN7S3250C33v57Ev();
extern void _ZN7S3250C33v58Ev();
extern void _ZN7S3250C33v59Ev();
extern void _ZN7S3250C33v60Ev();
extern void _ZN7S3250C33v61Ev();
extern void _ZN7S3250C33v62Ev();
extern void _ZN7S3250C33v63Ev();
extern void _ZN7S3250C33v64Ev();
extern void _ZN7S3250C33v65Ev();
extern void _ZN7S3250C33v66Ev();
extern void _ZN7S3250C33v67Ev();
static  VTBL_ENTRY vtc_S3250C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3250C3[0]),
  (VTBL_ENTRY)&_ZN7S3250C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3250C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3250C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3250C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3250C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3250C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3250C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3250C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v67Ev,
};
extern VTBL_ENTRY _ZTI7S3250C3[];
extern  VTBL_ENTRY _ZTV7S3250C3[];
Class_Descriptor cd_S3250C3 = {  "S3250C3", // class name
  0,0,//no base classes
  &(vtc_S3250C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3250C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3250C3),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  S3250C2  : S3250C3 {
  virtual  ~S3250C2(); // _ZN7S3250C2D1Ev
  virtual void  v68(); // _ZN7S3250C23v68Ev
  virtual void  v69(); // _ZN7S3250C23v69Ev
  virtual void  v70(); // _ZN7S3250C23v70Ev
  S3250C2(); // tgen
};
//SIG(-1 S3250C2) 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}


 S3250C2 ::~S3250C2(){ note_dtor("S3250C2", this);}
void  S3250C2 ::v68(){vfunc_called(this, "_ZN7S3250C23v68Ev");}
void  S3250C2 ::v69(){vfunc_called(this, "_ZN7S3250C23v69Ev");}
void  S3250C2 ::v70(){vfunc_called(this, "_ZN7S3250C23v70Ev");}
S3250C2 ::S3250C2(){ note_ctor("S3250C2", this);} // tgen

static void Test_S3250C2()
{
  extern Class_Descriptor cd_S3250C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3250C2, buf);
    S3250C2 *dp, &lv = *(dp=new (buf) S3250C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3250C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3250C2)");
    check_base_class_offset(lv, (S3250C3*), 0, "S3250C2");
    test_class_info(&lv, &cd_S3250C2);
    dp->~S3250C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3250C2(Test_S3250C2, "S3250C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3250C2C1Ev();
extern void _ZN7S3250C2D1Ev();
Name_Map name_map_S3250C2[] = {
  NSPAIR(_ZN7S3250C2C1Ev),
  NSPAIR(_ZN7S3250C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3250C3;
extern VTBL_ENTRY _ZTI7S3250C3[];
extern  VTBL_ENTRY _ZTV7S3250C3[];
static Base_Class bases_S3250C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3250C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S3250C2[];
extern void _ZN7S3250C2D1Ev();
extern void _ZN7S3250C2D0Ev();
extern void _ZN7S3250C32v4Ev();
extern void _ZN7S3250C32v5Ev();
extern void _ZN7S3250C32v6Ev();
extern void _ZN7S3250C32v7Ev();
extern void _ZN7S3250C32v8Ev();
extern void _ZN7S3250C32v9Ev();
extern void _ZN7S3250C33v10Ev();
extern void _ZN7S3250C33v11Ev();
extern void _ZN7S3250C33v12Ev();
extern void _ZN7S3250C33v13Ev();
extern void _ZN7S3250C33v14Ev();
extern void _ZN7S3250C33v15Ev();
extern void _ZN7S3250C33v16Ev();
extern void _ZN7S3250C33v17Ev();
extern void _ZN7S3250C33v18Ev();
extern void _ZN7S3250C33v19Ev();
extern void _ZN7S3250C33v20Ev();
extern void _ZN7S3250C33v21Ev();
extern void _ZN7S3250C33v22Ev();
extern void _ZN7S3250C33v23Ev();
extern void _ZN7S3250C33v24Ev();
extern void _ZN7S3250C33v25Ev();
extern void _ZN7S3250C33v26Ev();
extern void _ZN7S3250C33v27Ev();
extern void _ZN7S3250C33v28Ev();
extern void _ZN7S3250C33v29Ev();
extern void _ZN7S3250C33v30Ev();
extern void _ZN7S3250C33v31Ev();
extern void _ZN7S3250C33v32Ev();
extern void _ZN7S3250C33v33Ev();
extern void _ZN7S3250C33v34Ev();
extern void _ZN7S3250C33v35Ev();
extern void _ZN7S3250C33v36Ev();
extern void _ZN7S3250C33v37Ev();
extern void _ZN7S3250C33v38Ev();
extern void _ZN7S3250C33v39Ev();
extern void _ZN7S3250C33v40Ev();
extern void _ZN7S3250C33v41Ev();
extern void _ZN7S3250C33v42Ev();
extern void _ZN7S3250C33v43Ev();
extern void _ZN7S3250C33v44Ev();
extern void _ZN7S3250C33v45Ev();
extern void _ZN7S3250C33v46Ev();
extern void _ZN7S3250C33v47Ev();
extern void _ZN7S3250C33v48Ev();
extern void _ZN7S3250C33v49Ev();
extern void _ZN7S3250C33v50Ev();
extern void _ZN7S3250C33v51Ev();
extern void _ZN7S3250C33v52Ev();
extern void _ZN7S3250C33v53Ev();
extern void _ZN7S3250C33v54Ev();
extern void _ZN7S3250C33v55Ev();
extern void _ZN7S3250C33v56Ev();
extern void _ZN7S3250C33v57Ev();
extern void _ZN7S3250C33v58Ev();
extern void _ZN7S3250C33v59Ev();
extern void _ZN7S3250C33v60Ev();
extern void _ZN7S3250C33v61Ev();
extern void _ZN7S3250C33v62Ev();
extern void _ZN7S3250C33v63Ev();
extern void _ZN7S3250C33v64Ev();
extern void _ZN7S3250C33v65Ev();
extern void _ZN7S3250C33v66Ev();
extern void _ZN7S3250C33v67Ev();
extern void _ZN7S3250C23v68Ev();
extern void _ZN7S3250C23v69Ev();
extern void _ZN7S3250C23v70Ev();
static  VTBL_ENTRY vtc_S3250C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3250C2[0]),
  (VTBL_ENTRY)&_ZN7S3250C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3250C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3250C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3250C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3250C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3250C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3250C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3250C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3250C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3250C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3250C23v70Ev,
};
extern VTBL_ENTRY _ZTI7S3250C2[];
extern  VTBL_ENTRY _ZTV7S3250C2[];
Class_Descriptor cd_S3250C2 = {  "S3250C2", // class name
  bases_S3250C2, 1,
  &(vtc_S3250C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3250C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3250C2),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  S3250C1  : S3250C2 {
  ::S1378C5_nt s3250c1f0;
  virtual  ~S3250C1(); // _ZN7S3250C1D1Ev
  virtual void  v1(); // _ZN7S3250C12v1Ev
  virtual void  v2(); // _ZN7S3250C12v2Ev
  virtual void  v3(); // _ZN7S3250C12v3Ev
  S3250C1(); // tgen
};
//SIG(1 S3250C1) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v68 v69 v70} vd v1 v2 v3 FC4}


 S3250C1 ::~S3250C1(){ note_dtor("S3250C1", this);}
void  S3250C1 ::v1(){vfunc_called(this, "_ZN7S3250C12v1Ev");}
void  S3250C1 ::v2(){vfunc_called(this, "_ZN7S3250C12v2Ev");}
void  S3250C1 ::v3(){vfunc_called(this, "_ZN7S3250C12v3Ev");}
S3250C1 ::S3250C1(){ note_ctor("S3250C1", this);} // tgen

static void Test_S3250C1()
{
  extern Class_Descriptor cd_S3250C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S3250C1, buf);
    S3250C1 *dp, &lv = *(dp=new (buf) S3250C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S3250C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3250C1)");
    check_base_class_offset(lv, (S3250C3*)(S3250C2*), 0, "S3250C1");
    check_base_class_offset(lv, (S3250C2*), 0, "S3250C1");
    check_field_offset(lv, s3250c1f0, ABISELECT(96,60), "S3250C1.s3250c1f0");
    test_class_info(&lv, &cd_S3250C1);
    dp->~S3250C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3250C1(Test_S3250C1, "S3250C1", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S3250C1C1Ev();
extern void _ZN7S3250C1D1Ev();
Name_Map name_map_S3250C1[] = {
  NSPAIR(_ZN7S3250C1C1Ev),
  NSPAIR(_ZN7S3250C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3250C3;
extern VTBL_ENTRY _ZTI7S3250C3[];
extern  VTBL_ENTRY _ZTV7S3250C3[];
extern Class_Descriptor cd_S3250C2;
extern VTBL_ENTRY _ZTI7S3250C2[];
extern  VTBL_ENTRY _ZTV7S3250C2[];
static Base_Class bases_S3250C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3250C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3250C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3250C1[];
extern void _ZN7S3250C1D1Ev();
extern void _ZN7S3250C1D0Ev();
extern void _ZN7S3250C32v4Ev();
extern void _ZN7S3250C32v5Ev();
extern void _ZN7S3250C32v6Ev();
extern void _ZN7S3250C32v7Ev();
extern void _ZN7S3250C32v8Ev();
extern void _ZN7S3250C32v9Ev();
extern void _ZN7S3250C33v10Ev();
extern void _ZN7S3250C33v11Ev();
extern void _ZN7S3250C33v12Ev();
extern void _ZN7S3250C33v13Ev();
extern void _ZN7S3250C33v14Ev();
extern void _ZN7S3250C33v15Ev();
extern void _ZN7S3250C33v16Ev();
extern void _ZN7S3250C33v17Ev();
extern void _ZN7S3250C33v18Ev();
extern void _ZN7S3250C33v19Ev();
extern void _ZN7S3250C33v20Ev();
extern void _ZN7S3250C33v21Ev();
extern void _ZN7S3250C33v22Ev();
extern void _ZN7S3250C33v23Ev();
extern void _ZN7S3250C33v24Ev();
extern void _ZN7S3250C33v25Ev();
extern void _ZN7S3250C33v26Ev();
extern void _ZN7S3250C33v27Ev();
extern void _ZN7S3250C33v28Ev();
extern void _ZN7S3250C33v29Ev();
extern void _ZN7S3250C33v30Ev();
extern void _ZN7S3250C33v31Ev();
extern void _ZN7S3250C33v32Ev();
extern void _ZN7S3250C33v33Ev();
extern void _ZN7S3250C33v34Ev();
extern void _ZN7S3250C33v35Ev();
extern void _ZN7S3250C33v36Ev();
extern void _ZN7S3250C33v37Ev();
extern void _ZN7S3250C33v38Ev();
extern void _ZN7S3250C33v39Ev();
extern void _ZN7S3250C33v40Ev();
extern void _ZN7S3250C33v41Ev();
extern void _ZN7S3250C33v42Ev();
extern void _ZN7S3250C33v43Ev();
extern void _ZN7S3250C33v44Ev();
extern void _ZN7S3250C33v45Ev();
extern void _ZN7S3250C33v46Ev();
extern void _ZN7S3250C33v47Ev();
extern void _ZN7S3250C33v48Ev();
extern void _ZN7S3250C33v49Ev();
extern void _ZN7S3250C33v50Ev();
extern void _ZN7S3250C33v51Ev();
extern void _ZN7S3250C33v52Ev();
extern void _ZN7S3250C33v53Ev();
extern void _ZN7S3250C33v54Ev();
extern void _ZN7S3250C33v55Ev();
extern void _ZN7S3250C33v56Ev();
extern void _ZN7S3250C33v57Ev();
extern void _ZN7S3250C33v58Ev();
extern void _ZN7S3250C33v59Ev();
extern void _ZN7S3250C33v60Ev();
extern void _ZN7S3250C33v61Ev();
extern void _ZN7S3250C33v62Ev();
extern void _ZN7S3250C33v63Ev();
extern void _ZN7S3250C33v64Ev();
extern void _ZN7S3250C33v65Ev();
extern void _ZN7S3250C33v66Ev();
extern void _ZN7S3250C33v67Ev();
extern void _ZN7S3250C23v68Ev();
extern void _ZN7S3250C23v69Ev();
extern void _ZN7S3250C23v70Ev();
extern void _ZN7S3250C12v1Ev();
extern void _ZN7S3250C12v2Ev();
extern void _ZN7S3250C12v3Ev();
static  VTBL_ENTRY vtc_S3250C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3250C1[0]),
  (VTBL_ENTRY)&_ZN7S3250C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3250C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3250C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3250C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3250C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3250C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3250C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3250C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3250C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3250C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3250C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3250C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3250C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3250C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3250C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3250C1[];
extern  VTBL_ENTRY _ZTV7S3250C1[];
Class_Descriptor cd_S3250C1 = {  "S3250C1", // class name
  bases_S3250C1, 2,
  &(vtc_S3250C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S3250C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3250C1),74, //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  S3251C3  {
  int s3251c3f0;
  __tsi64 s3251c3f1;
  void *s3251c3f2[4];
  int s3251c3f3[2];
  void *s3251c3f4;
  ::S1378C5_nt s3251c3f5;
  void *s3251c3f6[2];
  virtual  ~S3251C3(); // _ZN7S3251C3D1Ev
  virtual void  v4(); // _ZN7S3251C32v4Ev
  virtual void  v5(); // _ZN7S3251C32v5Ev
  virtual void  v6(); // _ZN7S3251C32v6Ev
  virtual void  v7(); // _ZN7S3251C32v7Ev
  virtual void  v8(); // _ZN7S3251C32v8Ev
  virtual void  v9(); // _ZN7S3251C32v9Ev
  virtual void  v10(); // _ZN7S3251C33v10Ev
  virtual void  v11(); // _ZN7S3251C33v11Ev
  virtual void  v12(); // _ZN7S3251C33v12Ev
  virtual void  v13(); // _ZN7S3251C33v13Ev
  virtual void  v14(); // _ZN7S3251C33v14Ev
  virtual void  v15(); // _ZN7S3251C33v15Ev
  virtual void  v16(); // _ZN7S3251C33v16Ev
  virtual void  v17(); // _ZN7S3251C33v17Ev
  virtual void  v18(); // _ZN7S3251C33v18Ev
  virtual void  v19(); // _ZN7S3251C33v19Ev
  virtual void  v20(); // _ZN7S3251C33v20Ev
  virtual void  v21(); // _ZN7S3251C33v21Ev
  virtual void  v22(); // _ZN7S3251C33v22Ev
  virtual void  v23(); // _ZN7S3251C33v23Ev
  virtual void  v24(); // _ZN7S3251C33v24Ev
  virtual void  v25(); // _ZN7S3251C33v25Ev
  virtual void  v26(); // _ZN7S3251C33v26Ev
  virtual void  v27(); // _ZN7S3251C33v27Ev
  virtual void  v28(); // _ZN7S3251C33v28Ev
  virtual void  v29(); // _ZN7S3251C33v29Ev
  virtual void  v30(); // _ZN7S3251C33v30Ev
  virtual void  v31(); // _ZN7S3251C33v31Ev
  virtual void  v32(); // _ZN7S3251C33v32Ev
  virtual void  v33(); // _ZN7S3251C33v33Ev
  virtual void  v34(); // _ZN7S3251C33v34Ev
  virtual void  v35(); // _ZN7S3251C33v35Ev
  virtual void  v36(); // _ZN7S3251C33v36Ev
  virtual void  v37(); // _ZN7S3251C33v37Ev
  virtual void  v38(); // _ZN7S3251C33v38Ev
  virtual void  v39(); // _ZN7S3251C33v39Ev
  virtual void  v40(); // _ZN7S3251C33v40Ev
  virtual void  v41(); // _ZN7S3251C33v41Ev
  virtual void  v42(); // _ZN7S3251C33v42Ev
  virtual void  v43(); // _ZN7S3251C33v43Ev
  virtual void  v44(); // _ZN7S3251C33v44Ev
  virtual void  v45(); // _ZN7S3251C33v45Ev
  virtual void  v46(); // _ZN7S3251C33v46Ev
  virtual void  v47(); // _ZN7S3251C33v47Ev
  virtual void  v48(); // _ZN7S3251C33v48Ev
  virtual void  v49(); // _ZN7S3251C33v49Ev
  virtual void  v50(); // _ZN7S3251C33v50Ev
  virtual void  v51(); // _ZN7S3251C33v51Ev
  virtual void  v52(); // _ZN7S3251C33v52Ev
  virtual void  v53(); // _ZN7S3251C33v53Ev
  virtual void  v54(); // _ZN7S3251C33v54Ev
  virtual void  v55(); // _ZN7S3251C33v55Ev
  virtual void  v56(); // _ZN7S3251C33v56Ev
  virtual void  v57(); // _ZN7S3251C33v57Ev
  virtual void  v58(); // _ZN7S3251C33v58Ev
  virtual void  v59(); // _ZN7S3251C33v59Ev
  virtual void  v60(); // _ZN7S3251C33v60Ev
  virtual void  v61(); // _ZN7S3251C33v61Ev
  virtual void  v62(); // _ZN7S3251C33v62Ev
  virtual void  v63(); // _ZN7S3251C33v63Ev
  virtual void  v64(); // _ZN7S3251C33v64Ev
  virtual void  v65(); // _ZN7S3251C33v65Ev
  virtual void  v66(); // _ZN7S3251C33v66Ev
  virtual void  v67(); // _ZN7S3251C33v67Ev
  S3251C3(); // tgen
};
//SIG(-1 S3251C3) 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]}


 S3251C3 ::~S3251C3(){ note_dtor("S3251C3", this);}
void  S3251C3 ::v4(){vfunc_called(this, "_ZN7S3251C32v4Ev");}
void  S3251C3 ::v5(){vfunc_called(this, "_ZN7S3251C32v5Ev");}
void  S3251C3 ::v6(){vfunc_called(this, "_ZN7S3251C32v6Ev");}
void  S3251C3 ::v7(){vfunc_called(this, "_ZN7S3251C32v7Ev");}
void  S3251C3 ::v8(){vfunc_called(this, "_ZN7S3251C32v8Ev");}
void  S3251C3 ::v9(){vfunc_called(this, "_ZN7S3251C32v9Ev");}
void  S3251C3 ::v10(){vfunc_called(this, "_ZN7S3251C33v10Ev");}
void  S3251C3 ::v11(){vfunc_called(this, "_ZN7S3251C33v11Ev");}
void  S3251C3 ::v12(){vfunc_called(this, "_ZN7S3251C33v12Ev");}
void  S3251C3 ::v13(){vfunc_called(this, "_ZN7S3251C33v13Ev");}
void  S3251C3 ::v14(){vfunc_called(this, "_ZN7S3251C33v14Ev");}
void  S3251C3 ::v15(){vfunc_called(this, "_ZN7S3251C33v15Ev");}
void  S3251C3 ::v16(){vfunc_called(this, "_ZN7S3251C33v16Ev");}
void  S3251C3 ::v17(){vfunc_called(this, "_ZN7S3251C33v17Ev");}
void  S3251C3 ::v18(){vfunc_called(this, "_ZN7S3251C33v18Ev");}
void  S3251C3 ::v19(){vfunc_called(this, "_ZN7S3251C33v19Ev");}
void  S3251C3 ::v20(){vfunc_called(this, "_ZN7S3251C33v20Ev");}
void  S3251C3 ::v21(){vfunc_called(this, "_ZN7S3251C33v21Ev");}
void  S3251C3 ::v22(){vfunc_called(this, "_ZN7S3251C33v22Ev");}
void  S3251C3 ::v23(){vfunc_called(this, "_ZN7S3251C33v23Ev");}
void  S3251C3 ::v24(){vfunc_called(this, "_ZN7S3251C33v24Ev");}
void  S3251C3 ::v25(){vfunc_called(this, "_ZN7S3251C33v25Ev");}
void  S3251C3 ::v26(){vfunc_called(this, "_ZN7S3251C33v26Ev");}
void  S3251C3 ::v27(){vfunc_called(this, "_ZN7S3251C33v27Ev");}
void  S3251C3 ::v28(){vfunc_called(this, "_ZN7S3251C33v28Ev");}
void  S3251C3 ::v29(){vfunc_called(this, "_ZN7S3251C33v29Ev");}
void  S3251C3 ::v30(){vfunc_called(this, "_ZN7S3251C33v30Ev");}
void  S3251C3 ::v31(){vfunc_called(this, "_ZN7S3251C33v31Ev");}
void  S3251C3 ::v32(){vfunc_called(this, "_ZN7S3251C33v32Ev");}
void  S3251C3 ::v33(){vfunc_called(this, "_ZN7S3251C33v33Ev");}
void  S3251C3 ::v34(){vfunc_called(this, "_ZN7S3251C33v34Ev");}
void  S3251C3 ::v35(){vfunc_called(this, "_ZN7S3251C33v35Ev");}
void  S3251C3 ::v36(){vfunc_called(this, "_ZN7S3251C33v36Ev");}
void  S3251C3 ::v37(){vfunc_called(this, "_ZN7S3251C33v37Ev");}
void  S3251C3 ::v38(){vfunc_called(this, "_ZN7S3251C33v38Ev");}
void  S3251C3 ::v39(){vfunc_called(this, "_ZN7S3251C33v39Ev");}
void  S3251C3 ::v40(){vfunc_called(this, "_ZN7S3251C33v40Ev");}
void  S3251C3 ::v41(){vfunc_called(this, "_ZN7S3251C33v41Ev");}
void  S3251C3 ::v42(){vfunc_called(this, "_ZN7S3251C33v42Ev");}
void  S3251C3 ::v43(){vfunc_called(this, "_ZN7S3251C33v43Ev");}
void  S3251C3 ::v44(){vfunc_called(this, "_ZN7S3251C33v44Ev");}
void  S3251C3 ::v45(){vfunc_called(this, "_ZN7S3251C33v45Ev");}
void  S3251C3 ::v46(){vfunc_called(this, "_ZN7S3251C33v46Ev");}
void  S3251C3 ::v47(){vfunc_called(this, "_ZN7S3251C33v47Ev");}
void  S3251C3 ::v48(){vfunc_called(this, "_ZN7S3251C33v48Ev");}
void  S3251C3 ::v49(){vfunc_called(this, "_ZN7S3251C33v49Ev");}
void  S3251C3 ::v50(){vfunc_called(this, "_ZN7S3251C33v50Ev");}
void  S3251C3 ::v51(){vfunc_called(this, "_ZN7S3251C33v51Ev");}
void  S3251C3 ::v52(){vfunc_called(this, "_ZN7S3251C33v52Ev");}
void  S3251C3 ::v53(){vfunc_called(this, "_ZN7S3251C33v53Ev");}
void  S3251C3 ::v54(){vfunc_called(this, "_ZN7S3251C33v54Ev");}
void  S3251C3 ::v55(){vfunc_called(this, "_ZN7S3251C33v55Ev");}
void  S3251C3 ::v56(){vfunc_called(this, "_ZN7S3251C33v56Ev");}
void  S3251C3 ::v57(){vfunc_called(this, "_ZN7S3251C33v57Ev");}
void  S3251C3 ::v58(){vfunc_called(this, "_ZN7S3251C33v58Ev");}
void  S3251C3 ::v59(){vfunc_called(this, "_ZN7S3251C33v59Ev");}
void  S3251C3 ::v60(){vfunc_called(this, "_ZN7S3251C33v60Ev");}
void  S3251C3 ::v61(){vfunc_called(this, "_ZN7S3251C33v61Ev");}
void  S3251C3 ::v62(){vfunc_called(this, "_ZN7S3251C33v62Ev");}
void  S3251C3 ::v63(){vfunc_called(this, "_ZN7S3251C33v63Ev");}
void  S3251C3 ::v64(){vfunc_called(this, "_ZN7S3251C33v64Ev");}
void  S3251C3 ::v65(){vfunc_called(this, "_ZN7S3251C33v65Ev");}
void  S3251C3 ::v66(){vfunc_called(this, "_ZN7S3251C33v66Ev");}
void  S3251C3 ::v67(){vfunc_called(this, "_ZN7S3251C33v67Ev");}
S3251C3 ::S3251C3(){ note_ctor("S3251C3", this);} // tgen

static void Test_S3251C3()
{
  extern Class_Descriptor cd_S3251C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3251C3, buf);
    S3251C3 *dp, &lv = *(dp=new (buf) S3251C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3251C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3251C3)");
    check_field_offset(lv, s3251c3f0, ABISELECT(8,4), "S3251C3.s3251c3f0");
    check_field_offset(lv, s3251c3f1, ABISELECT(16,8), "S3251C3.s3251c3f1");
    check_field_offset(lv, s3251c3f2, ABISELECT(24,16), "S3251C3.s3251c3f2");
    check_field_offset(lv, s3251c3f3, ABISELECT(56,32), "S3251C3.s3251c3f3");
    check_field_offset(lv, s3251c3f4, ABISELECT(64,40), "S3251C3.s3251c3f4");
    check_field_offset(lv, s3251c3f5, ABISELECT(72,44), "S3251C3.s3251c3f5");
    check_field_offset(lv, s3251c3f6, ABISELECT(80,52), "S3251C3.s3251c3f6");
    test_class_info(&lv, &cd_S3251C3);
    dp->~S3251C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3251C3(Test_S3251C3, "S3251C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3251C3C1Ev();
extern void _ZN7S3251C3D1Ev();
Name_Map name_map_S3251C3[] = {
  NSPAIR(_ZN7S3251C3C1Ev),
  NSPAIR(_ZN7S3251C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3251C3[];
extern void _ZN7S3251C3D1Ev();
extern void _ZN7S3251C3D0Ev();
extern void _ZN7S3251C32v4Ev();
extern void _ZN7S3251C32v5Ev();
extern void _ZN7S3251C32v6Ev();
extern void _ZN7S3251C32v7Ev();
extern void _ZN7S3251C32v8Ev();
extern void _ZN7S3251C32v9Ev();
extern void _ZN7S3251C33v10Ev();
extern void _ZN7S3251C33v11Ev();
extern void _ZN7S3251C33v12Ev();
extern void _ZN7S3251C33v13Ev();
extern void _ZN7S3251C33v14Ev();
extern void _ZN7S3251C33v15Ev();
extern void _ZN7S3251C33v16Ev();
extern void _ZN7S3251C33v17Ev();
extern void _ZN7S3251C33v18Ev();
extern void _ZN7S3251C33v19Ev();
extern void _ZN7S3251C33v20Ev();
extern void _ZN7S3251C33v21Ev();
extern void _ZN7S3251C33v22Ev();
extern void _ZN7S3251C33v23Ev();
extern void _ZN7S3251C33v24Ev();
extern void _ZN7S3251C33v25Ev();
extern void _ZN7S3251C33v26Ev();
extern void _ZN7S3251C33v27Ev();
extern void _ZN7S3251C33v28Ev();
extern void _ZN7S3251C33v29Ev();
extern void _ZN7S3251C33v30Ev();
extern void _ZN7S3251C33v31Ev();
extern void _ZN7S3251C33v32Ev();
extern void _ZN7S3251C33v33Ev();
extern void _ZN7S3251C33v34Ev();
extern void _ZN7S3251C33v35Ev();
extern void _ZN7S3251C33v36Ev();
extern void _ZN7S3251C33v37Ev();
extern void _ZN7S3251C33v38Ev();
extern void _ZN7S3251C33v39Ev();
extern void _ZN7S3251C33v40Ev();
extern void _ZN7S3251C33v41Ev();
extern void _ZN7S3251C33v42Ev();
extern void _ZN7S3251C33v43Ev();
extern void _ZN7S3251C33v44Ev();
extern void _ZN7S3251C33v45Ev();
extern void _ZN7S3251C33v46Ev();
extern void _ZN7S3251C33v47Ev();
extern void _ZN7S3251C33v48Ev();
extern void _ZN7S3251C33v49Ev();
extern void _ZN7S3251C33v50Ev();
extern void _ZN7S3251C33v51Ev();
extern void _ZN7S3251C33v52Ev();
extern void _ZN7S3251C33v53Ev();
extern void _ZN7S3251C33v54Ev();
extern void _ZN7S3251C33v55Ev();
extern void _ZN7S3251C33v56Ev();
extern void _ZN7S3251C33v57Ev();
extern void _ZN7S3251C33v58Ev();
extern void _ZN7S3251C33v59Ev();
extern void _ZN7S3251C33v60Ev();
extern void _ZN7S3251C33v61Ev();
extern void _ZN7S3251C33v62Ev();
extern void _ZN7S3251C33v63Ev();
extern void _ZN7S3251C33v64Ev();
extern void _ZN7S3251C33v65Ev();
extern void _ZN7S3251C33v66Ev();
extern void _ZN7S3251C33v67Ev();
static  VTBL_ENTRY vtc_S3251C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3251C3[0]),
  (VTBL_ENTRY)&_ZN7S3251C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3251C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3251C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3251C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3251C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3251C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3251C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3251C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v67Ev,
};
extern VTBL_ENTRY _ZTI7S3251C3[];
extern  VTBL_ENTRY _ZTV7S3251C3[];
Class_Descriptor cd_S3251C3 = {  "S3251C3", // class name
  0,0,//no base classes
  &(vtc_S3251C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3251C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3251C3),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  S3251C2  : S3251C3 {
  virtual  ~S3251C2(); // _ZN7S3251C2D1Ev
  virtual void  v68(); // _ZN7S3251C23v68Ev
  virtual void  v69(); // _ZN7S3251C23v69Ev
  virtual void  v70(); // _ZN7S3251C23v70Ev
  S3251C2(); // tgen
};
//SIG(-1 S3251C2) 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}


 S3251C2 ::~S3251C2(){ note_dtor("S3251C2", this);}
void  S3251C2 ::v68(){vfunc_called(this, "_ZN7S3251C23v68Ev");}
void  S3251C2 ::v69(){vfunc_called(this, "_ZN7S3251C23v69Ev");}
void  S3251C2 ::v70(){vfunc_called(this, "_ZN7S3251C23v70Ev");}
S3251C2 ::S3251C2(){ note_ctor("S3251C2", this);} // tgen

static void Test_S3251C2()
{
  extern Class_Descriptor cd_S3251C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3251C2, buf);
    S3251C2 *dp, &lv = *(dp=new (buf) S3251C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3251C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3251C2)");
    check_base_class_offset(lv, (S3251C3*), 0, "S3251C2");
    test_class_info(&lv, &cd_S3251C2);
    dp->~S3251C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3251C2(Test_S3251C2, "S3251C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3251C2C1Ev();
extern void _ZN7S3251C2D1Ev();
Name_Map name_map_S3251C2[] = {
  NSPAIR(_ZN7S3251C2C1Ev),
  NSPAIR(_ZN7S3251C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3251C3;
extern VTBL_ENTRY _ZTI7S3251C3[];
extern  VTBL_ENTRY _ZTV7S3251C3[];
static Base_Class bases_S3251C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3251C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S3251C2[];
extern void _ZN7S3251C2D1Ev();
extern void _ZN7S3251C2D0Ev();
extern void _ZN7S3251C32v4Ev();
extern void _ZN7S3251C32v5Ev();
extern void _ZN7S3251C32v6Ev();
extern void _ZN7S3251C32v7Ev();
extern void _ZN7S3251C32v8Ev();
extern void _ZN7S3251C32v9Ev();
extern void _ZN7S3251C33v10Ev();
extern void _ZN7S3251C33v11Ev();
extern void _ZN7S3251C33v12Ev();
extern void _ZN7S3251C33v13Ev();
extern void _ZN7S3251C33v14Ev();
extern void _ZN7S3251C33v15Ev();
extern void _ZN7S3251C33v16Ev();
extern void _ZN7S3251C33v17Ev();
extern void _ZN7S3251C33v18Ev();
extern void _ZN7S3251C33v19Ev();
extern void _ZN7S3251C33v20Ev();
extern void _ZN7S3251C33v21Ev();
extern void _ZN7S3251C33v22Ev();
extern void _ZN7S3251C33v23Ev();
extern void _ZN7S3251C33v24Ev();
extern void _ZN7S3251C33v25Ev();
extern void _ZN7S3251C33v26Ev();
extern void _ZN7S3251C33v27Ev();
extern void _ZN7S3251C33v28Ev();
extern void _ZN7S3251C33v29Ev();
extern void _ZN7S3251C33v30Ev();
extern void _ZN7S3251C33v31Ev();
extern void _ZN7S3251C33v32Ev();
extern void _ZN7S3251C33v33Ev();
extern void _ZN7S3251C33v34Ev();
extern void _ZN7S3251C33v35Ev();
extern void _ZN7S3251C33v36Ev();
extern void _ZN7S3251C33v37Ev();
extern void _ZN7S3251C33v38Ev();
extern void _ZN7S3251C33v39Ev();
extern void _ZN7S3251C33v40Ev();
extern void _ZN7S3251C33v41Ev();
extern void _ZN7S3251C33v42Ev();
extern void _ZN7S3251C33v43Ev();
extern void _ZN7S3251C33v44Ev();
extern void _ZN7S3251C33v45Ev();
extern void _ZN7S3251C33v46Ev();
extern void _ZN7S3251C33v47Ev();
extern void _ZN7S3251C33v48Ev();
extern void _ZN7S3251C33v49Ev();
extern void _ZN7S3251C33v50Ev();
extern void _ZN7S3251C33v51Ev();
extern void _ZN7S3251C33v52Ev();
extern void _ZN7S3251C33v53Ev();
extern void _ZN7S3251C33v54Ev();
extern void _ZN7S3251C33v55Ev();
extern void _ZN7S3251C33v56Ev();
extern void _ZN7S3251C33v57Ev();
extern void _ZN7S3251C33v58Ev();
extern void _ZN7S3251C33v59Ev();
extern void _ZN7S3251C33v60Ev();
extern void _ZN7S3251C33v61Ev();
extern void _ZN7S3251C33v62Ev();
extern void _ZN7S3251C33v63Ev();
extern void _ZN7S3251C33v64Ev();
extern void _ZN7S3251C33v65Ev();
extern void _ZN7S3251C33v66Ev();
extern void _ZN7S3251C33v67Ev();
extern void _ZN7S3251C23v68Ev();
extern void _ZN7S3251C23v69Ev();
extern void _ZN7S3251C23v70Ev();
static  VTBL_ENTRY vtc_S3251C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3251C2[0]),
  (VTBL_ENTRY)&_ZN7S3251C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3251C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3251C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3251C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3251C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3251C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3251C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3251C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3251C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3251C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3251C23v70Ev,
};
extern VTBL_ENTRY _ZTI7S3251C2[];
extern  VTBL_ENTRY _ZTV7S3251C2[];
Class_Descriptor cd_S3251C2 = {  "S3251C2", // class name
  bases_S3251C2, 1,
  &(vtc_S3251C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3251C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3251C2),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  S3251C1  : S3251C2 {
  int s3251c1f0;
  virtual  ~S3251C1(); // _ZN7S3251C1D1Ev
  virtual void  v1(); // _ZN7S3251C12v1Ev
  virtual void  v2(); // _ZN7S3251C12v2Ev
  virtual void  v3(); // _ZN7S3251C12v3Ev
  S3251C1(); // tgen
};
//SIG(1 S3251C1) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v68 v69 v70} vd v1 v2 v3 Fi}


 S3251C1 ::~S3251C1(){ note_dtor("S3251C1", this);}
void  S3251C1 ::v1(){vfunc_called(this, "_ZN7S3251C12v1Ev");}
void  S3251C1 ::v2(){vfunc_called(this, "_ZN7S3251C12v2Ev");}
void  S3251C1 ::v3(){vfunc_called(this, "_ZN7S3251C12v3Ev");}
S3251C1 ::S3251C1(){ note_ctor("S3251C1", this);} // tgen

static void Test_S3251C1()
{
  extern Class_Descriptor cd_S3251C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S3251C1, buf);
    S3251C1 *dp, &lv = *(dp=new (buf) S3251C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S3251C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3251C1)");
    check_base_class_offset(lv, (S3251C3*)(S3251C2*), 0, "S3251C1");
    check_base_class_offset(lv, (S3251C2*), 0, "S3251C1");
    check_field_offset(lv, s3251c1f0, ABISELECT(96,60), "S3251C1.s3251c1f0");
    test_class_info(&lv, &cd_S3251C1);
    dp->~S3251C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3251C1(Test_S3251C1, "S3251C1", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S3251C1C1Ev();
extern void _ZN7S3251C1D1Ev();
Name_Map name_map_S3251C1[] = {
  NSPAIR(_ZN7S3251C1C1Ev),
  NSPAIR(_ZN7S3251C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3251C3;
extern VTBL_ENTRY _ZTI7S3251C3[];
extern  VTBL_ENTRY _ZTV7S3251C3[];
extern Class_Descriptor cd_S3251C2;
extern VTBL_ENTRY _ZTI7S3251C2[];
extern  VTBL_ENTRY _ZTV7S3251C2[];
static Base_Class bases_S3251C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3251C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3251C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3251C1[];
extern void _ZN7S3251C1D1Ev();
extern void _ZN7S3251C1D0Ev();
extern void _ZN7S3251C32v4Ev();
extern void _ZN7S3251C32v5Ev();
extern void _ZN7S3251C32v6Ev();
extern void _ZN7S3251C32v7Ev();
extern void _ZN7S3251C32v8Ev();
extern void _ZN7S3251C32v9Ev();
extern void _ZN7S3251C33v10Ev();
extern void _ZN7S3251C33v11Ev();
extern void _ZN7S3251C33v12Ev();
extern void _ZN7S3251C33v13Ev();
extern void _ZN7S3251C33v14Ev();
extern void _ZN7S3251C33v15Ev();
extern void _ZN7S3251C33v16Ev();
extern void _ZN7S3251C33v17Ev();
extern void _ZN7S3251C33v18Ev();
extern void _ZN7S3251C33v19Ev();
extern void _ZN7S3251C33v20Ev();
extern void _ZN7S3251C33v21Ev();
extern void _ZN7S3251C33v22Ev();
extern void _ZN7S3251C33v23Ev();
extern void _ZN7S3251C33v24Ev();
extern void _ZN7S3251C33v25Ev();
extern void _ZN7S3251C33v26Ev();
extern void _ZN7S3251C33v27Ev();
extern void _ZN7S3251C33v28Ev();
extern void _ZN7S3251C33v29Ev();
extern void _ZN7S3251C33v30Ev();
extern void _ZN7S3251C33v31Ev();
extern void _ZN7S3251C33v32Ev();
extern void _ZN7S3251C33v33Ev();
extern void _ZN7S3251C33v34Ev();
extern void _ZN7S3251C33v35Ev();
extern void _ZN7S3251C33v36Ev();
extern void _ZN7S3251C33v37Ev();
extern void _ZN7S3251C33v38Ev();
extern void _ZN7S3251C33v39Ev();
extern void _ZN7S3251C33v40Ev();
extern void _ZN7S3251C33v41Ev();
extern void _ZN7S3251C33v42Ev();
extern void _ZN7S3251C33v43Ev();
extern void _ZN7S3251C33v44Ev();
extern void _ZN7S3251C33v45Ev();
extern void _ZN7S3251C33v46Ev();
extern void _ZN7S3251C33v47Ev();
extern void _ZN7S3251C33v48Ev();
extern void _ZN7S3251C33v49Ev();
extern void _ZN7S3251C33v50Ev();
extern void _ZN7S3251C33v51Ev();
extern void _ZN7S3251C33v52Ev();
extern void _ZN7S3251C33v53Ev();
extern void _ZN7S3251C33v54Ev();
extern void _ZN7S3251C33v55Ev();
extern void _ZN7S3251C33v56Ev();
extern void _ZN7S3251C33v57Ev();
extern void _ZN7S3251C33v58Ev();
extern void _ZN7S3251C33v59Ev();
extern void _ZN7S3251C33v60Ev();
extern void _ZN7S3251C33v61Ev();
extern void _ZN7S3251C33v62Ev();
extern void _ZN7S3251C33v63Ev();
extern void _ZN7S3251C33v64Ev();
extern void _ZN7S3251C33v65Ev();
extern void _ZN7S3251C33v66Ev();
extern void _ZN7S3251C33v67Ev();
extern void _ZN7S3251C23v68Ev();
extern void _ZN7S3251C23v69Ev();
extern void _ZN7S3251C23v70Ev();
extern void _ZN7S3251C12v1Ev();
extern void _ZN7S3251C12v2Ev();
extern void _ZN7S3251C12v3Ev();
static  VTBL_ENTRY vtc_S3251C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3251C1[0]),
  (VTBL_ENTRY)&_ZN7S3251C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3251C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3251C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3251C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3251C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3251C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3251C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3251C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3251C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3251C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3251C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3251C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3251C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3251C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3251C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3251C1[];
extern  VTBL_ENTRY _ZTV7S3251C1[];
Class_Descriptor cd_S3251C1 = {  "S3251C1", // class name
  bases_S3251C1, 2,
  &(vtc_S3251C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S3251C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3251C1),74, //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  S3253C3  {
  int s3253c3f0;
  __tsi64 s3253c3f1;
  void *s3253c3f2[4];
  int s3253c3f3[2];
  void *s3253c3f4;
  ::S1378C5_nt s3253c3f5;
  void *s3253c3f6[2];
  virtual  ~S3253C3(); // _ZN7S3253C3D1Ev
  virtual void  v4(); // _ZN7S3253C32v4Ev
  virtual void  v5(); // _ZN7S3253C32v5Ev
  virtual void  v6(); // _ZN7S3253C32v6Ev
  virtual void  v7(); // _ZN7S3253C32v7Ev
  virtual void  v8(); // _ZN7S3253C32v8Ev
  virtual void  v9(); // _ZN7S3253C32v9Ev
  virtual void  v10(); // _ZN7S3253C33v10Ev
  virtual void  v11(); // _ZN7S3253C33v11Ev
  virtual void  v12(); // _ZN7S3253C33v12Ev
  virtual void  v13(); // _ZN7S3253C33v13Ev
  virtual void  v14(); // _ZN7S3253C33v14Ev
  virtual void  v15(); // _ZN7S3253C33v15Ev
  virtual void  v16(); // _ZN7S3253C33v16Ev
  virtual void  v17(); // _ZN7S3253C33v17Ev
  virtual void  v18(); // _ZN7S3253C33v18Ev
  virtual void  v19(); // _ZN7S3253C33v19Ev
  virtual void  v20(); // _ZN7S3253C33v20Ev
  virtual void  v21(); // _ZN7S3253C33v21Ev
  virtual void  v22(); // _ZN7S3253C33v22Ev
  virtual void  v23(); // _ZN7S3253C33v23Ev
  virtual void  v24(); // _ZN7S3253C33v24Ev
  virtual void  v25(); // _ZN7S3253C33v25Ev
  virtual void  v26(); // _ZN7S3253C33v26Ev
  virtual void  v27(); // _ZN7S3253C33v27Ev
  virtual void  v28(); // _ZN7S3253C33v28Ev
  virtual void  v29(); // _ZN7S3253C33v29Ev
  virtual void  v30(); // _ZN7S3253C33v30Ev
  virtual void  v31(); // _ZN7S3253C33v31Ev
  virtual void  v32(); // _ZN7S3253C33v32Ev
  virtual void  v33(); // _ZN7S3253C33v33Ev
  virtual void  v34(); // _ZN7S3253C33v34Ev
  virtual void  v35(); // _ZN7S3253C33v35Ev
  virtual void  v36(); // _ZN7S3253C33v36Ev
  virtual void  v37(); // _ZN7S3253C33v37Ev
  virtual void  v38(); // _ZN7S3253C33v38Ev
  virtual void  v39(); // _ZN7S3253C33v39Ev
  virtual void  v40(); // _ZN7S3253C33v40Ev
  virtual void  v41(); // _ZN7S3253C33v41Ev
  virtual void  v42(); // _ZN7S3253C33v42Ev
  virtual void  v43(); // _ZN7S3253C33v43Ev
  virtual void  v44(); // _ZN7S3253C33v44Ev
  virtual void  v45(); // _ZN7S3253C33v45Ev
  virtual void  v46(); // _ZN7S3253C33v46Ev
  virtual void  v47(); // _ZN7S3253C33v47Ev
  virtual void  v48(); // _ZN7S3253C33v48Ev
  virtual void  v49(); // _ZN7S3253C33v49Ev
  virtual void  v50(); // _ZN7S3253C33v50Ev
  virtual void  v51(); // _ZN7S3253C33v51Ev
  virtual void  v52(); // _ZN7S3253C33v52Ev
  virtual void  v53(); // _ZN7S3253C33v53Ev
  virtual void  v54(); // _ZN7S3253C33v54Ev
  virtual void  v55(); // _ZN7S3253C33v55Ev
  virtual void  v56(); // _ZN7S3253C33v56Ev
  virtual void  v57(); // _ZN7S3253C33v57Ev
  virtual void  v58(); // _ZN7S3253C33v58Ev
  virtual void  v59(); // _ZN7S3253C33v59Ev
  virtual void  v60(); // _ZN7S3253C33v60Ev
  virtual void  v61(); // _ZN7S3253C33v61Ev
  virtual void  v62(); // _ZN7S3253C33v62Ev
  virtual void  v63(); // _ZN7S3253C33v63Ev
  virtual void  v64(); // _ZN7S3253C33v64Ev
  virtual void  v65(); // _ZN7S3253C33v65Ev
  virtual void  v66(); // _ZN7S3253C33v66Ev
  virtual void  v67(); // _ZN7S3253C33v67Ev
  S3253C3(); // tgen
};
//SIG(-1 S3253C3) 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]}


 S3253C3 ::~S3253C3(){ note_dtor("S3253C3", this);}
void  S3253C3 ::v4(){vfunc_called(this, "_ZN7S3253C32v4Ev");}
void  S3253C3 ::v5(){vfunc_called(this, "_ZN7S3253C32v5Ev");}
void  S3253C3 ::v6(){vfunc_called(this, "_ZN7S3253C32v6Ev");}
void  S3253C3 ::v7(){vfunc_called(this, "_ZN7S3253C32v7Ev");}
void  S3253C3 ::v8(){vfunc_called(this, "_ZN7S3253C32v8Ev");}
void  S3253C3 ::v9(){vfunc_called(this, "_ZN7S3253C32v9Ev");}
void  S3253C3 ::v10(){vfunc_called(this, "_ZN7S3253C33v10Ev");}
void  S3253C3 ::v11(){vfunc_called(this, "_ZN7S3253C33v11Ev");}
void  S3253C3 ::v12(){vfunc_called(this, "_ZN7S3253C33v12Ev");}
void  S3253C3 ::v13(){vfunc_called(this, "_ZN7S3253C33v13Ev");}
void  S3253C3 ::v14(){vfunc_called(this, "_ZN7S3253C33v14Ev");}
void  S3253C3 ::v15(){vfunc_called(this, "_ZN7S3253C33v15Ev");}
void  S3253C3 ::v16(){vfunc_called(this, "_ZN7S3253C33v16Ev");}
void  S3253C3 ::v17(){vfunc_called(this, "_ZN7S3253C33v17Ev");}
void  S3253C3 ::v18(){vfunc_called(this, "_ZN7S3253C33v18Ev");}
void  S3253C3 ::v19(){vfunc_called(this, "_ZN7S3253C33v19Ev");}
void  S3253C3 ::v20(){vfunc_called(this, "_ZN7S3253C33v20Ev");}
void  S3253C3 ::v21(){vfunc_called(this, "_ZN7S3253C33v21Ev");}
void  S3253C3 ::v22(){vfunc_called(this, "_ZN7S3253C33v22Ev");}
void  S3253C3 ::v23(){vfunc_called(this, "_ZN7S3253C33v23Ev");}
void  S3253C3 ::v24(){vfunc_called(this, "_ZN7S3253C33v24Ev");}
void  S3253C3 ::v25(){vfunc_called(this, "_ZN7S3253C33v25Ev");}
void  S3253C3 ::v26(){vfunc_called(this, "_ZN7S3253C33v26Ev");}
void  S3253C3 ::v27(){vfunc_called(this, "_ZN7S3253C33v27Ev");}
void  S3253C3 ::v28(){vfunc_called(this, "_ZN7S3253C33v28Ev");}
void  S3253C3 ::v29(){vfunc_called(this, "_ZN7S3253C33v29Ev");}
void  S3253C3 ::v30(){vfunc_called(this, "_ZN7S3253C33v30Ev");}
void  S3253C3 ::v31(){vfunc_called(this, "_ZN7S3253C33v31Ev");}
void  S3253C3 ::v32(){vfunc_called(this, "_ZN7S3253C33v32Ev");}
void  S3253C3 ::v33(){vfunc_called(this, "_ZN7S3253C33v33Ev");}
void  S3253C3 ::v34(){vfunc_called(this, "_ZN7S3253C33v34Ev");}
void  S3253C3 ::v35(){vfunc_called(this, "_ZN7S3253C33v35Ev");}
void  S3253C3 ::v36(){vfunc_called(this, "_ZN7S3253C33v36Ev");}
void  S3253C3 ::v37(){vfunc_called(this, "_ZN7S3253C33v37Ev");}
void  S3253C3 ::v38(){vfunc_called(this, "_ZN7S3253C33v38Ev");}
void  S3253C3 ::v39(){vfunc_called(this, "_ZN7S3253C33v39Ev");}
void  S3253C3 ::v40(){vfunc_called(this, "_ZN7S3253C33v40Ev");}
void  S3253C3 ::v41(){vfunc_called(this, "_ZN7S3253C33v41Ev");}
void  S3253C3 ::v42(){vfunc_called(this, "_ZN7S3253C33v42Ev");}
void  S3253C3 ::v43(){vfunc_called(this, "_ZN7S3253C33v43Ev");}
void  S3253C3 ::v44(){vfunc_called(this, "_ZN7S3253C33v44Ev");}
void  S3253C3 ::v45(){vfunc_called(this, "_ZN7S3253C33v45Ev");}
void  S3253C3 ::v46(){vfunc_called(this, "_ZN7S3253C33v46Ev");}
void  S3253C3 ::v47(){vfunc_called(this, "_ZN7S3253C33v47Ev");}
void  S3253C3 ::v48(){vfunc_called(this, "_ZN7S3253C33v48Ev");}
void  S3253C3 ::v49(){vfunc_called(this, "_ZN7S3253C33v49Ev");}
void  S3253C3 ::v50(){vfunc_called(this, "_ZN7S3253C33v50Ev");}
void  S3253C3 ::v51(){vfunc_called(this, "_ZN7S3253C33v51Ev");}
void  S3253C3 ::v52(){vfunc_called(this, "_ZN7S3253C33v52Ev");}
void  S3253C3 ::v53(){vfunc_called(this, "_ZN7S3253C33v53Ev");}
void  S3253C3 ::v54(){vfunc_called(this, "_ZN7S3253C33v54Ev");}
void  S3253C3 ::v55(){vfunc_called(this, "_ZN7S3253C33v55Ev");}
void  S3253C3 ::v56(){vfunc_called(this, "_ZN7S3253C33v56Ev");}
void  S3253C3 ::v57(){vfunc_called(this, "_ZN7S3253C33v57Ev");}
void  S3253C3 ::v58(){vfunc_called(this, "_ZN7S3253C33v58Ev");}
void  S3253C3 ::v59(){vfunc_called(this, "_ZN7S3253C33v59Ev");}
void  S3253C3 ::v60(){vfunc_called(this, "_ZN7S3253C33v60Ev");}
void  S3253C3 ::v61(){vfunc_called(this, "_ZN7S3253C33v61Ev");}
void  S3253C3 ::v62(){vfunc_called(this, "_ZN7S3253C33v62Ev");}
void  S3253C3 ::v63(){vfunc_called(this, "_ZN7S3253C33v63Ev");}
void  S3253C3 ::v64(){vfunc_called(this, "_ZN7S3253C33v64Ev");}
void  S3253C3 ::v65(){vfunc_called(this, "_ZN7S3253C33v65Ev");}
void  S3253C3 ::v66(){vfunc_called(this, "_ZN7S3253C33v66Ev");}
void  S3253C3 ::v67(){vfunc_called(this, "_ZN7S3253C33v67Ev");}
S3253C3 ::S3253C3(){ note_ctor("S3253C3", this);} // tgen

static void Test_S3253C3()
{
  extern Class_Descriptor cd_S3253C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3253C3, buf);
    S3253C3 *dp, &lv = *(dp=new (buf) S3253C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3253C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3253C3)");
    check_field_offset(lv, s3253c3f0, ABISELECT(8,4), "S3253C3.s3253c3f0");
    check_field_offset(lv, s3253c3f1, ABISELECT(16,8), "S3253C3.s3253c3f1");
    check_field_offset(lv, s3253c3f2, ABISELECT(24,16), "S3253C3.s3253c3f2");
    check_field_offset(lv, s3253c3f3, ABISELECT(56,32), "S3253C3.s3253c3f3");
    check_field_offset(lv, s3253c3f4, ABISELECT(64,40), "S3253C3.s3253c3f4");
    check_field_offset(lv, s3253c3f5, ABISELECT(72,44), "S3253C3.s3253c3f5");
    check_field_offset(lv, s3253c3f6, ABISELECT(80,52), "S3253C3.s3253c3f6");
    test_class_info(&lv, &cd_S3253C3);
    dp->~S3253C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3253C3(Test_S3253C3, "S3253C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3253C3C1Ev();
extern void _ZN7S3253C3D1Ev();
Name_Map name_map_S3253C3[] = {
  NSPAIR(_ZN7S3253C3C1Ev),
  NSPAIR(_ZN7S3253C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3253C3[];
extern void _ZN7S3253C3D1Ev();
extern void _ZN7S3253C3D0Ev();
extern void _ZN7S3253C32v4Ev();
extern void _ZN7S3253C32v5Ev();
extern void _ZN7S3253C32v6Ev();
extern void _ZN7S3253C32v7Ev();
extern void _ZN7S3253C32v8Ev();
extern void _ZN7S3253C32v9Ev();
extern void _ZN7S3253C33v10Ev();
extern void _ZN7S3253C33v11Ev();
extern void _ZN7S3253C33v12Ev();
extern void _ZN7S3253C33v13Ev();
extern void _ZN7S3253C33v14Ev();
extern void _ZN7S3253C33v15Ev();
extern void _ZN7S3253C33v16Ev();
extern void _ZN7S3253C33v17Ev();
extern void _ZN7S3253C33v18Ev();
extern void _ZN7S3253C33v19Ev();
extern void _ZN7S3253C33v20Ev();
extern void _ZN7S3253C33v21Ev();
extern void _ZN7S3253C33v22Ev();
extern void _ZN7S3253C33v23Ev();
extern void _ZN7S3253C33v24Ev();
extern void _ZN7S3253C33v25Ev();
extern void _ZN7S3253C33v26Ev();
extern void _ZN7S3253C33v27Ev();
extern void _ZN7S3253C33v28Ev();
extern void _ZN7S3253C33v29Ev();
extern void _ZN7S3253C33v30Ev();
extern void _ZN7S3253C33v31Ev();
extern void _ZN7S3253C33v32Ev();
extern void _ZN7S3253C33v33Ev();
extern void _ZN7S3253C33v34Ev();
extern void _ZN7S3253C33v35Ev();
extern void _ZN7S3253C33v36Ev();
extern void _ZN7S3253C33v37Ev();
extern void _ZN7S3253C33v38Ev();
extern void _ZN7S3253C33v39Ev();
extern void _ZN7S3253C33v40Ev();
extern void _ZN7S3253C33v41Ev();
extern void _ZN7S3253C33v42Ev();
extern void _ZN7S3253C33v43Ev();
extern void _ZN7S3253C33v44Ev();
extern void _ZN7S3253C33v45Ev();
extern void _ZN7S3253C33v46Ev();
extern void _ZN7S3253C33v47Ev();
extern void _ZN7S3253C33v48Ev();
extern void _ZN7S3253C33v49Ev();
extern void _ZN7S3253C33v50Ev();
extern void _ZN7S3253C33v51Ev();
extern void _ZN7S3253C33v52Ev();
extern void _ZN7S3253C33v53Ev();
extern void _ZN7S3253C33v54Ev();
extern void _ZN7S3253C33v55Ev();
extern void _ZN7S3253C33v56Ev();
extern void _ZN7S3253C33v57Ev();
extern void _ZN7S3253C33v58Ev();
extern void _ZN7S3253C33v59Ev();
extern void _ZN7S3253C33v60Ev();
extern void _ZN7S3253C33v61Ev();
extern void _ZN7S3253C33v62Ev();
extern void _ZN7S3253C33v63Ev();
extern void _ZN7S3253C33v64Ev();
extern void _ZN7S3253C33v65Ev();
extern void _ZN7S3253C33v66Ev();
extern void _ZN7S3253C33v67Ev();
static  VTBL_ENTRY vtc_S3253C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3253C3[0]),
  (VTBL_ENTRY)&_ZN7S3253C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3253C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3253C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3253C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3253C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3253C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3253C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3253C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v67Ev,
};
extern VTBL_ENTRY _ZTI7S3253C3[];
extern  VTBL_ENTRY _ZTV7S3253C3[];
Class_Descriptor cd_S3253C3 = {  "S3253C3", // class name
  0,0,//no base classes
  &(vtc_S3253C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3253C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3253C3),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  S3253C2  : S3253C3 {
  virtual  ~S3253C2(); // _ZN7S3253C2D1Ev
  virtual void  v68(); // _ZN7S3253C23v68Ev
  virtual void  v69(); // _ZN7S3253C23v69Ev
  virtual void  v70(); // _ZN7S3253C23v70Ev
  S3253C2(); // tgen
};
//SIG(-1 S3253C2) 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}


 S3253C2 ::~S3253C2(){ note_dtor("S3253C2", this);}
void  S3253C2 ::v68(){vfunc_called(this, "_ZN7S3253C23v68Ev");}
void  S3253C2 ::v69(){vfunc_called(this, "_ZN7S3253C23v69Ev");}
void  S3253C2 ::v70(){vfunc_called(this, "_ZN7S3253C23v70Ev");}
S3253C2 ::S3253C2(){ note_ctor("S3253C2", this);} // tgen

static void Test_S3253C2()
{
  extern Class_Descriptor cd_S3253C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3253C2, buf);
    S3253C2 *dp, &lv = *(dp=new (buf) S3253C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3253C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3253C2)");
    check_base_class_offset(lv, (S3253C3*), 0, "S3253C2");
    test_class_info(&lv, &cd_S3253C2);
    dp->~S3253C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3253C2(Test_S3253C2, "S3253C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3253C2C1Ev();
extern void _ZN7S3253C2D1Ev();
Name_Map name_map_S3253C2[] = {
  NSPAIR(_ZN7S3253C2C1Ev),
  NSPAIR(_ZN7S3253C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3253C3;
extern VTBL_ENTRY _ZTI7S3253C3[];
extern  VTBL_ENTRY _ZTV7S3253C3[];
static Base_Class bases_S3253C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3253C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S3253C2[];
extern void _ZN7S3253C2D1Ev();
extern void _ZN7S3253C2D0Ev();
extern void _ZN7S3253C32v4Ev();
extern void _ZN7S3253C32v5Ev();
extern void _ZN7S3253C32v6Ev();
extern void _ZN7S3253C32v7Ev();
extern void _ZN7S3253C32v8Ev();
extern void _ZN7S3253C32v9Ev();
extern void _ZN7S3253C33v10Ev();
extern void _ZN7S3253C33v11Ev();
extern void _ZN7S3253C33v12Ev();
extern void _ZN7S3253C33v13Ev();
extern void _ZN7S3253C33v14Ev();
extern void _ZN7S3253C33v15Ev();
extern void _ZN7S3253C33v16Ev();
extern void _ZN7S3253C33v17Ev();
extern void _ZN7S3253C33v18Ev();
extern void _ZN7S3253C33v19Ev();
extern void _ZN7S3253C33v20Ev();
extern void _ZN7S3253C33v21Ev();
extern void _ZN7S3253C33v22Ev();
extern void _ZN7S3253C33v23Ev();
extern void _ZN7S3253C33v24Ev();
extern void _ZN7S3253C33v25Ev();
extern void _ZN7S3253C33v26Ev();
extern void _ZN7S3253C33v27Ev();
extern void _ZN7S3253C33v28Ev();
extern void _ZN7S3253C33v29Ev();
extern void _ZN7S3253C33v30Ev();
extern void _ZN7S3253C33v31Ev();
extern void _ZN7S3253C33v32Ev();
extern void _ZN7S3253C33v33Ev();
extern void _ZN7S3253C33v34Ev();
extern void _ZN7S3253C33v35Ev();
extern void _ZN7S3253C33v36Ev();
extern void _ZN7S3253C33v37Ev();
extern void _ZN7S3253C33v38Ev();
extern void _ZN7S3253C33v39Ev();
extern void _ZN7S3253C33v40Ev();
extern void _ZN7S3253C33v41Ev();
extern void _ZN7S3253C33v42Ev();
extern void _ZN7S3253C33v43Ev();
extern void _ZN7S3253C33v44Ev();
extern void _ZN7S3253C33v45Ev();
extern void _ZN7S3253C33v46Ev();
extern void _ZN7S3253C33v47Ev();
extern void _ZN7S3253C33v48Ev();
extern void _ZN7S3253C33v49Ev();
extern void _ZN7S3253C33v50Ev();
extern void _ZN7S3253C33v51Ev();
extern void _ZN7S3253C33v52Ev();
extern void _ZN7S3253C33v53Ev();
extern void _ZN7S3253C33v54Ev();
extern void _ZN7S3253C33v55Ev();
extern void _ZN7S3253C33v56Ev();
extern void _ZN7S3253C33v57Ev();
extern void _ZN7S3253C33v58Ev();
extern void _ZN7S3253C33v59Ev();
extern void _ZN7S3253C33v60Ev();
extern void _ZN7S3253C33v61Ev();
extern void _ZN7S3253C33v62Ev();
extern void _ZN7S3253C33v63Ev();
extern void _ZN7S3253C33v64Ev();
extern void _ZN7S3253C33v65Ev();
extern void _ZN7S3253C33v66Ev();
extern void _ZN7S3253C33v67Ev();
extern void _ZN7S3253C23v68Ev();
extern void _ZN7S3253C23v69Ev();
extern void _ZN7S3253C23v70Ev();
static  VTBL_ENTRY vtc_S3253C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3253C2[0]),
  (VTBL_ENTRY)&_ZN7S3253C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3253C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3253C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3253C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3253C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3253C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3253C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3253C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3253C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3253C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3253C23v70Ev,
};
extern VTBL_ENTRY _ZTI7S3253C2[];
extern  VTBL_ENTRY _ZTV7S3253C2[];
Class_Descriptor cd_S3253C2 = {  "S3253C2", // class name
  bases_S3253C2, 1,
  &(vtc_S3253C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3253C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3253C2),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  S3253C1  : S3253C2 {
  virtual  ~S3253C1(); // _ZN7S3253C1D1Ev
  virtual void  v1(); // _ZN7S3253C12v1Ev
  virtual void  v2(); // _ZN7S3253C12v2Ev
  virtual void  v3(); // _ZN7S3253C12v3Ev
  S3253C1(); // tgen
};
//SIG(1 S3253C1) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v68 v69 v70} vd v1 v2 v3}


 S3253C1 ::~S3253C1(){ note_dtor("S3253C1", this);}
void  S3253C1 ::v1(){vfunc_called(this, "_ZN7S3253C12v1Ev");}
void  S3253C1 ::v2(){vfunc_called(this, "_ZN7S3253C12v2Ev");}
void  S3253C1 ::v3(){vfunc_called(this, "_ZN7S3253C12v3Ev");}
S3253C1 ::S3253C1(){ note_ctor("S3253C1", this);} // tgen

static void Test_S3253C1()
{
  extern Class_Descriptor cd_S3253C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3253C1, buf);
    S3253C1 *dp, &lv = *(dp=new (buf) S3253C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3253C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3253C1)");
    check_base_class_offset(lv, (S3253C3*)(S3253C2*), 0, "S3253C1");
    check_base_class_offset(lv, (S3253C2*), 0, "S3253C1");
    test_class_info(&lv, &cd_S3253C1);
    dp->~S3253C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3253C1(Test_S3253C1, "S3253C1", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3253C1C1Ev();
extern void _ZN7S3253C1D1Ev();
Name_Map name_map_S3253C1[] = {
  NSPAIR(_ZN7S3253C1C1Ev),
  NSPAIR(_ZN7S3253C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3253C3;
extern VTBL_ENTRY _ZTI7S3253C3[];
extern  VTBL_ENTRY _ZTV7S3253C3[];
extern Class_Descriptor cd_S3253C2;
extern VTBL_ENTRY _ZTI7S3253C2[];
extern  VTBL_ENTRY _ZTV7S3253C2[];
static Base_Class bases_S3253C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3253C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3253C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3253C1[];
extern void _ZN7S3253C1D1Ev();
extern void _ZN7S3253C1D0Ev();
extern void _ZN7S3253C32v4Ev();
extern void _ZN7S3253C32v5Ev();
extern void _ZN7S3253C32v6Ev();
extern void _ZN7S3253C32v7Ev();
extern void _ZN7S3253C32v8Ev();
extern void _ZN7S3253C32v9Ev();
extern void _ZN7S3253C33v10Ev();
extern void _ZN7S3253C33v11Ev();
extern void _ZN7S3253C33v12Ev();
extern void _ZN7S3253C33v13Ev();
extern void _ZN7S3253C33v14Ev();
extern void _ZN7S3253C33v15Ev();
extern void _ZN7S3253C33v16Ev();
extern void _ZN7S3253C33v17Ev();
extern void _ZN7S3253C33v18Ev();
extern void _ZN7S3253C33v19Ev();
extern void _ZN7S3253C33v20Ev();
extern void _ZN7S3253C33v21Ev();
extern void _ZN7S3253C33v22Ev();
extern void _ZN7S3253C33v23Ev();
extern void _ZN7S3253C33v24Ev();
extern void _ZN7S3253C33v25Ev();
extern void _ZN7S3253C33v26Ev();
extern void _ZN7S3253C33v27Ev();
extern void _ZN7S3253C33v28Ev();
extern void _ZN7S3253C33v29Ev();
extern void _ZN7S3253C33v30Ev();
extern void _ZN7S3253C33v31Ev();
extern void _ZN7S3253C33v32Ev();
extern void _ZN7S3253C33v33Ev();
extern void _ZN7S3253C33v34Ev();
extern void _ZN7S3253C33v35Ev();
extern void _ZN7S3253C33v36Ev();
extern void _ZN7S3253C33v37Ev();
extern void _ZN7S3253C33v38Ev();
extern void _ZN7S3253C33v39Ev();
extern void _ZN7S3253C33v40Ev();
extern void _ZN7S3253C33v41Ev();
extern void _ZN7S3253C33v42Ev();
extern void _ZN7S3253C33v43Ev();
extern void _ZN7S3253C33v44Ev();
extern void _ZN7S3253C33v45Ev();
extern void _ZN7S3253C33v46Ev();
extern void _ZN7S3253C33v47Ev();
extern void _ZN7S3253C33v48Ev();
extern void _ZN7S3253C33v49Ev();
extern void _ZN7S3253C33v50Ev();
extern void _ZN7S3253C33v51Ev();
extern void _ZN7S3253C33v52Ev();
extern void _ZN7S3253C33v53Ev();
extern void _ZN7S3253C33v54Ev();
extern void _ZN7S3253C33v55Ev();
extern void _ZN7S3253C33v56Ev();
extern void _ZN7S3253C33v57Ev();
extern void _ZN7S3253C33v58Ev();
extern void _ZN7S3253C33v59Ev();
extern void _ZN7S3253C33v60Ev();
extern void _ZN7S3253C33v61Ev();
extern void _ZN7S3253C33v62Ev();
extern void _ZN7S3253C33v63Ev();
extern void _ZN7S3253C33v64Ev();
extern void _ZN7S3253C33v65Ev();
extern void _ZN7S3253C33v66Ev();
extern void _ZN7S3253C33v67Ev();
extern void _ZN7S3253C23v68Ev();
extern void _ZN7S3253C23v69Ev();
extern void _ZN7S3253C23v70Ev();
extern void _ZN7S3253C12v1Ev();
extern void _ZN7S3253C12v2Ev();
extern void _ZN7S3253C12v3Ev();
static  VTBL_ENTRY vtc_S3253C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3253C1[0]),
  (VTBL_ENTRY)&_ZN7S3253C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3253C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3253C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3253C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3253C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3253C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3253C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3253C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3253C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3253C23v68Ev,
  (VTBL_ENTRY)&_ZN7S3253C23v69Ev,
  (VTBL_ENTRY)&_ZN7S3253C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3253C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3253C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3253C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3253C1[];
extern  VTBL_ENTRY _ZTV7S3253C1[];
Class_Descriptor cd_S3253C1 = {  "S3253C1", // class name
  bases_S3253C1, 2,
  &(vtc_S3253C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3253C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3253C1),74, //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  S7819C4_nt  {
  virtual void  v9(); // _ZN10S7819C4_nt2v9Ev
  virtual void  v10(); // _ZN10S7819C4_nt3v10Ev
  virtual void  v11(); // _ZN10S7819C4_nt3v11Ev
  virtual void  v12(); // _ZN10S7819C4_nt3v12Ev
  ~S7819C4_nt(); // tgen
  S7819C4_nt(); // tgen
};
//SIG(-1 S7819C4_nt) C1{ v1 v2 v3 v4}


void  S7819C4_nt ::v9(){vfunc_called(this, "_ZN10S7819C4_nt2v9Ev");}
void  S7819C4_nt ::v10(){vfunc_called(this, "_ZN10S7819C4_nt3v10Ev");}
void  S7819C4_nt ::v11(){vfunc_called(this, "_ZN10S7819C4_nt3v11Ev");}
void  S7819C4_nt ::v12(){vfunc_called(this, "_ZN10S7819C4_nt3v12Ev");}
S7819C4_nt ::~S7819C4_nt(){ note_dtor("S7819C4_nt", this);} // tgen
S7819C4_nt ::S7819C4_nt(){ note_ctor("S7819C4_nt", this);} // tgen

//skip512 S7819C4_nt

#else // __cplusplus

extern void _ZN10S7819C4_ntC1Ev();
extern void _ZN10S7819C4_ntD1Ev();
Name_Map name_map_S7819C4_nt[] = {
  NSPAIR(_ZN10S7819C4_ntC1Ev),
  NSPAIR(_ZN10S7819C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7819C4_nt[];
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY vtc_S7819C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7819C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI10S7819C4_nt[];
VTBL_ENTRY *P__ZTI10S7819C4_nt = _ZTI10S7819C4_nt; 
extern  VTBL_ENTRY _ZTV10S7819C4_nt[];
Class_Descriptor cd_S7819C4_nt = {  "S7819C4_nt", // class name
  0,0,//no base classes
  &(vtc_S7819C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7819C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7819C4_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  S7819C5  {
  long double s7819c5f0;
  void *s7819c5f1;
  virtual void  v13(); // _ZN7S7819C53v13Ev
  virtual void  v14(); // _ZN7S7819C53v14Ev
  virtual void  v15(); // _ZN7S7819C53v15Ev
  virtual void  v16(); // _ZN7S7819C53v16Ev
  virtual void  v17(); // _ZN7S7819C53v17Ev
  virtual void  v18(); // _ZN7S7819C53v18Ev
  virtual void  v19(); // _ZN7S7819C53v19Ev
  ~S7819C5(); // tgen
  S7819C5(); // tgen
};
//SIG(-1 S7819C5) C1{ v1 v2 v3 v4 v5 v6 v7 FD Fp}


void  S7819C5 ::v13(){vfunc_called(this, "_ZN7S7819C53v13Ev");}
void  S7819C5 ::v14(){vfunc_called(this, "_ZN7S7819C53v14Ev");}
void  S7819C5 ::v15(){vfunc_called(this, "_ZN7S7819C53v15Ev");}
void  S7819C5 ::v16(){vfunc_called(this, "_ZN7S7819C53v16Ev");}
void  S7819C5 ::v17(){vfunc_called(this, "_ZN7S7819C53v17Ev");}
void  S7819C5 ::v18(){vfunc_called(this, "_ZN7S7819C53v18Ev");}
void  S7819C5 ::v19(){vfunc_called(this, "_ZN7S7819C53v19Ev");}
S7819C5 ::~S7819C5(){ note_dtor("S7819C5", this);} // tgen
S7819C5 ::S7819C5(){ note_ctor("S7819C5", this);} // tgen

static void Test_S7819C5()
{
  extern Class_Descriptor cd_S7819C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,6)];
    init_test(&cd_S7819C5, buf);
    S7819C5 *dp, &lv = *(dp=new (buf) S7819C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,20), "sizeof(S7819C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7819C5)");
    check_field_offset(lv, s7819c5f0, ABISELECT(16,4), "S7819C5.s7819c5f0");
    check_field_offset(lv, s7819c5f1, ABISELECT(32,16), "S7819C5.s7819c5f1");
    test_class_info(&lv, &cd_S7819C5);
    dp->~S7819C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7819C5(Test_S7819C5, "S7819C5", ABISELECT(48,20));

#else // __cplusplus

extern void _ZN7S7819C5C1Ev();
extern void _ZN7S7819C5D1Ev();
Name_Map name_map_S7819C5[] = {
  NSPAIR(_ZN7S7819C5C1Ev),
  NSPAIR(_ZN7S7819C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7819C5[];
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
static  VTBL_ENTRY vtc_S7819C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C5[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
};
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
Class_Descriptor cd_S7819C5 = {  "S7819C5", // class name
  0,0,//no base classes
  &(vtc_S7819C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,20), // object size
  NSPAIRA(_ZTI7S7819C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7819C5),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  S7819C7  : virtual S7819C4_nt , S7819C5 {
  virtual  ~S7819C7(); // _ZN7S7819C7D2Ev
  virtual void  v20(); // _ZN7S7819C73v20Ev
  virtual void  v21(); // _ZN7S7819C73v21Ev
  virtual void  v22(); // _ZN7S7819C73v22Ev
  S7819C7(); // tgen
};
//SIG(-1 S7819C7) C1{ VBC2{ v4 v5 v6 v7} BC3{ v8 v9 v10 v11 v12 v13 v14 FD Fp} vd v1 v2 v3}


 S7819C7 ::~S7819C7(){ note_dtor("S7819C7", this);}
void  S7819C7 ::v20(){vfunc_called(this, "_ZN7S7819C73v20Ev");}
void  S7819C7 ::v21(){vfunc_called(this, "_ZN7S7819C73v21Ev");}
void  S7819C7 ::v22(){vfunc_called(this, "_ZN7S7819C73v22Ev");}
S7819C7 ::S7819C7(){ note_ctor("S7819C7", this);} // tgen

static void Test_S7819C7()
{
  extern Class_Descriptor cd_S7819C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S7819C7, buf);
    S7819C7 *dp, &lv = *(dp=new (buf) S7819C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7819C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7819C7)");
    check_base_class_offset(lv, (S7819C4_nt*), ABISELECT(40,20), "S7819C7");
    check_base_class_offset(lv, (S7819C5*), 0, "S7819C7");
    test_class_info(&lv, &cd_S7819C7);
    dp->~S7819C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7819C7(Test_S7819C7, "S7819C7", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7819C7C1Ev();
extern void _ZN7S7819C7D2Ev();
Name_Map name_map_S7819C7[] = {
  NSPAIR(_ZN7S7819C7C1Ev),
  NSPAIR(_ZN7S7819C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7819C4_nt;
extern VTBL_ENTRY _ZTI10S7819C4_nt[];
extern  VTBL_ENTRY _ZTV10S7819C4_nt[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
static Base_Class bases_S7819C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7819C4_nt,    ABISELECT(40,20), //bcp->offset
    15, //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_S7819C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7819C7[];
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C7D1Ev();
extern void _ZN7S7819C7D0Ev();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY vtc_S7819C7[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern VTBL_ENTRY _ZTV7S7819C7[];
static  VTT_ENTRY vtt_S7819C7[] = {
  {&(_ZTV7S7819C7[3]),  3,25},
  {&(_ZTV7S7819C7[21]),  21,25},
};
extern VTBL_ENTRY _ZTI7S7819C7[];
extern  VTBL_ENTRY _ZTV7S7819C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C7[];
Class_Descriptor cd_S7819C7 = {  "S7819C7", // class name
  bases_S7819C7, 2,
  &(vtc_S7819C7[0]), // expected_vtbl_contents
  &(vtt_S7819C7[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7819C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7819C7),25, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7819C7),2, //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  S7819C6  : virtual S7819C7 {
  int s7819c6f0;
  __tsi64 s7819c6f1;
  virtual void  v23(); // _ZN7S7819C63v23Ev
  virtual void  v24(); // _ZN7S7819C63v24Ev
  virtual void  v25(); // _ZN7S7819C63v25Ev
  ~S7819C6(); // tgen
  S7819C6(); // tgen
};
//SIG(-1 S7819C6) C1{ VBC2{ VBC3{ v4 v5 v6 v7} BC4{ v8 v9 v10 v11 v12 v13 v14 FD Fp} vd v15 v16 v17} v1 v2 v3 Fi FL}


void  S7819C6 ::v23(){vfunc_called(this, "_ZN7S7819C63v23Ev");}
void  S7819C6 ::v24(){vfunc_called(this, "_ZN7S7819C63v24Ev");}
void  S7819C6 ::v25(){vfunc_called(this, "_ZN7S7819C63v25Ev");}
S7819C6 ::~S7819C6(){ note_dtor("S7819C6", this);} // tgen
S7819C6 ::S7819C6(){ note_ctor("S7819C6", this);} // tgen

static void Test_S7819C6()
{
  extern Class_Descriptor cd_S7819C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,10)];
    init_test(&cd_S7819C6, buf);
    S7819C6 *dp, &lv = *(dp=new (buf) S7819C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,36), "sizeof(S7819C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7819C6)");
    check_base_class_offset(lv, (S7819C4_nt*)(S7819C7*), 0, "S7819C6");
    check_base_class_offset(lv, (S7819C5*)(S7819C7*), ABISELECT(32,16), "S7819C6");
    check_base_class_offset(lv, (S7819C7*), ABISELECT(32,16), "S7819C6");
    check_field_offset(lv, s7819c6f0, ABISELECT(8,4), "S7819C6.s7819c6f0");
    check_field_offset(lv, s7819c6f1, ABISELECT(16,8), "S7819C6.s7819c6f1");
    test_class_info(&lv, &cd_S7819C6);
    dp->~S7819C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7819C6(Test_S7819C6, "S7819C6", ABISELECT(80,36));

#else // __cplusplus

extern void _ZN7S7819C6C1Ev();
extern void _ZN7S7819C6D1Ev();
Name_Map name_map_S7819C6[] = {
  NSPAIR(_ZN7S7819C6C1Ev),
  NSPAIR(_ZN7S7819C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7819C4_nt;
extern VTBL_ENTRY _ZTI10S7819C4_nt[];
extern  VTBL_ENTRY _ZTV10S7819C4_nt[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
extern Class_Descriptor cd_S7819C7;
extern VTBL_ENTRY _ZTI7S7819C7[];
extern  VTBL_ENTRY _ZTV7S7819C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C7[];
static Base_Class bases_S7819C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7819C4_nt,    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
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7819C5,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7819C7,    ABISELECT(32,16), //bcp->offset
    17, //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 _ZTI7S7819C6[];
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void _ZN7S7819C6D1Ev();
extern void _ZN7S7819C6D0Ev();
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S7819C6D1Ev,_ZThn16_N7S7819C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S7819C6D0Ev,_ZThn16_N7S7819C6D0Ev)() __attribute__((weak));
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY vtc_S7819C6[] = {
  0,
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7819C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C6D0Ev,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern VTBL_ENTRY _ZTV7S7819C6[];
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C7D1Ev();
extern void _ZN7S7819C7D0Ev();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__7S7819C6[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C7__7S7819C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
static  VTT_ENTRY vtt_S7819C6[] = {
  {&(_ZTV7S7819C6[8]),  8,43},
  {&(_ZTV7S7819C6[31]),  31,43},
  {&(_ZTV7S7819C6[8]),  8,43},
  {&(_tg__ZTV7S7819C7__7S7819C6[3]),  3,15},
  {&(_tg__ZTV10S7819C4_nt__7S7819C7__7S7819C6[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S7819C6[];
extern  VTBL_ENTRY _ZTV7S7819C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C6[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7819C6D0Ev,_ZThn16_N7S7819C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7819C6D1Ev,_ZThn16_N7S7819C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7819C6 = {  "S7819C6", // class name
  bases_S7819C6, 3,
  &(vtc_S7819C6[0]), // expected_vtbl_contents
  &(vtt_S7819C6[0]), // expected_vtt_contents
  ABISELECT(80,36), // object size
  NSPAIRA(_ZTI7S7819C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7819C6),43, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7819C6),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7819C3  : virtual S7819C4_nt , virtual S7819C5 , S7819C6 , S7819C7 {
  virtual void  v26(); // _ZN7S7819C33v26Ev
  virtual void  v27(); // _ZN7S7819C33v27Ev
  virtual void  v28(); // _ZN7S7819C33v28Ev
  virtual void  v29(); // _ZN7S7819C33v29Ev
  virtual void  v30(); // _ZN7S7819C33v30Ev
  virtual void  v31(); // _ZN7S7819C33v31Ev
  ~S7819C3(); // tgen
  S7819C3(); // tgen
};
//SIG(-1 S7819C3) C1{ VBC2{ v7 v8 v9 v10} VBC3{ v11 v12 v13 v14 v15 v16 v17 FD Fp} BC4{ VBC5{ VBC2 BC3 vd v18 v19 v20} v21 v22 v23 Fi FL} BC5 v1 v2 v3 v4 v5 v6}


void  S7819C3 ::v26(){vfunc_called(this, "_ZN7S7819C33v26Ev");}
void  S7819C3 ::v27(){vfunc_called(this, "_ZN7S7819C33v27Ev");}
void  S7819C3 ::v28(){vfunc_called(this, "_ZN7S7819C33v28Ev");}
void  S7819C3 ::v29(){vfunc_called(this, "_ZN7S7819C33v29Ev");}
void  S7819C3 ::v30(){vfunc_called(this, "_ZN7S7819C33v30Ev");}
void  S7819C3 ::v31(){vfunc_called(this, "_ZN7S7819C33v31Ev");}
S7819C3 ::~S7819C3(){ note_dtor("S7819C3", this);} // tgen
S7819C3 ::S7819C3(){ note_ctor("S7819C3", this);} // tgen

static void Test_S7819C3()
{
  extern Class_Descriptor cd_S7819C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,20)];
    init_test(&cd_S7819C3, buf);
    S7819C3 *dp, &lv = *(dp=new (buf) S7819C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,76), "sizeof(S7819C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7819C3)");
    check_base_class_offset(lv, (S7819C4_nt*), 0, "S7819C3");
    /*is_ambiguous_... S7819C3::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C4_nt*)(S7819C7*), 0, "S7819C3");
    /*is_ambiguous_... S7819C3::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C4_nt*)(S7819C7*), 0, "S7819C3");
    /*is_ambiguous_... S7819C3::S7819C5 */ AMB_check_base_class_offset(lv, (S7819C5*), ABISELECT(80,36), "S7819C3");
    /*is_ambiguous_... S7819C3::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C5*)(S7819C7*), ABISELECT(128,56), "S7819C3");
    check_base_class_offset(lv, (S7819C7*)(S7819C6*), ABISELECT(128,56), "S7819C3");
    check_base_class_offset(lv, (S7819C6*), 0, "S7819C3");
    /*is_ambiguous_... S7819C3::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C5*)(S7819C7*), ABISELECT(32,16), "S7819C3");
    /*is_ambiguous_... S7819C3::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C7*), ABISELECT(32,16), "S7819C3");
    test_class_info(&lv, &cd_S7819C3);
    dp->~S7819C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7819C3(Test_S7819C3, "S7819C3", ABISELECT(176,76));

#else // __cplusplus

extern void _ZN7S7819C3C1Ev();
extern void _ZN7S7819C3D1Ev();
Name_Map name_map_S7819C3[] = {
  NSPAIR(_ZN7S7819C3C1Ev),
  NSPAIR(_ZN7S7819C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7819C4_nt;
extern VTBL_ENTRY _ZTI10S7819C4_nt[];
extern  VTBL_ENTRY _ZTV10S7819C4_nt[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
extern Class_Descriptor cd_S7819C7;
extern VTBL_ENTRY _ZTI7S7819C7[];
extern  VTBL_ENTRY _ZTV7S7819C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C7[];
extern Class_Descriptor cd_S7819C6;
extern VTBL_ENTRY _ZTI7S7819C6[];
extern  VTBL_ENTRY _ZTV7S7819C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C6[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
extern Class_Descriptor cd_S7819C7;
extern VTBL_ENTRY _ZTI7S7819C7[];
extern  VTBL_ENTRY _ZTV7S7819C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C7[];
static Base_Class bases_S7819C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7819C4_nt,    0, //bcp->offset
    -1, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7819C5,    ABISELECT(80,36), //bcp->offset
    39, //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_S7819C5,    ABISELECT(128,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
    3, //immediately_derived
  0, 0},
  {&cd_S7819C7,    ABISELECT(128,56), //bcp->offset
    55, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7819C6,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7819C5,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7819C7,    ABISELECT(32,16), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7819C3[];
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void _ZN7S7819C3D1Ev();
extern void _ZN7S7819C3D0Ev();
extern void _ZN7S7819C33v26Ev();
extern void _ZN7S7819C33v27Ev();
extern void _ZN7S7819C33v28Ev();
extern void _ZN7S7819C33v29Ev();
extern void _ZN7S7819C33v30Ev();
extern void _ZN7S7819C33v31Ev();
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZThn32_N7S7819C3D1Ev,_ZThn16_N7S7819C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S7819C3D0Ev,_ZThn16_N7S7819C3D0Ev)();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N7S7819C3D1Ev,_ZTv0_n44_N7S7819C3D1Ev)();
extern void ABISELECT(_ZThn128_N7S7819C3D1Ev,_ZThn56_N7S7819C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7819C3D0Ev,_ZTv0_n44_N7S7819C3D0Ev)();
extern void ABISELECT(_ZThn128_N7S7819C3D0Ev,_ZThn56_N7S7819C3D0Ev)() __attribute__((weak));
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY vtc_S7819C3[] = {
  ABISELECT(80,36),
  0,
  ABISELECT(128,56),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7819C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v28Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v29Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v30Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v31Ev,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7819C3D1Ev,_ZThn16_N7S7819C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7819C3D0Ev,_ZThn16_N7S7819C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  0,
  0,
  0,
  ABISELECT(-128,-56),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-56),
  ABISELECT(-128,-56),
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C3D1Ev,_ZTv0_n44_N7S7819C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C3D0Ev,_ZTv0_n44_N7S7819C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern VTBL_ENTRY _ZTV7S7819C3[];
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void _ZN7S7819C6D1Ev();
extern void _ZN7S7819C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C6__7S7819C3[] = {
  0,
  ABISELECT(128,56),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7819C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C6D0Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev)();
extern void ABISELECT(_ZThn128_N7S7819C6D1Ev,_ZThn56_N7S7819C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev)();
extern void ABISELECT(_ZThn128_N7S7819C6D0Ev,_ZThn56_N7S7819C6D0Ev)() __attribute__((weak));
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__7S7819C6__7S7819C3[] = {
  0,
  0,
  0,
  ABISELECT(-128,-56),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-56),
  ABISELECT(-128,-56),
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C7D1Ev();
extern void _ZN7S7819C7D0Ev();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__A__7S7819C3[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C7__A__7S7819C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C7D1Ev();
extern void _ZN7S7819C7D0Ev();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__7S7819C3[] = {
  ABISELECT(-128,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C7__7S7819C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(128,56),
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
static  VTT_ENTRY vtt_S7819C3[] = {
  {&(_ZTV7S7819C3[9]),  9,81},
  {&(_tg__ZTV7S7819C6__7S7819C3[8]),  8,17},
  {&(_tg__ZTV7S7819C7__7S7819C6__7S7819C3[14]),  14,26},
  {&(_tg__ZTV7S7819C6__7S7819C3[8]),  8,17},
  {&(_tg__ZTV7S7819C7__A__7S7819C3[3]),  3,15},
  {&(_tg__ZTV10S7819C4_nt__7S7819C7__A__7S7819C3[6]),  6,10},
  {&(_ZTV7S7819C3[9]),  9,81},
  {&(_ZTV7S7819C3[48]),  48,81},
  {&(_ZTV7S7819C3[69]),  69,81},
  {&(_ZTV7S7819C3[27]),  27,81},
  {&(_tg__ZTV7S7819C7__7S7819C3[3]),  3,15},
  {&(_tg__ZTV10S7819C4_nt__7S7819C7__7S7819C3[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S7819C3[];
extern  VTBL_ENTRY _ZTV7S7819C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C3[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7819C6D0Ev,_ZThn56_N7S7819C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7819C6D1Ev,_ZThn56_N7S7819C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C3D0Ev,_ZTv0_n44_N7S7819C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7819C3D0Ev,_ZThn56_N7S7819C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C3D1Ev,_ZTv0_n44_N7S7819C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7819C3D1Ev,_ZThn56_N7S7819C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7819C3 = {  "S7819C3", // class name
  bases_S7819C3, 7,
  &(vtc_S7819C3[0]), // expected_vtbl_contents
  &(vtt_S7819C3[0]), // expected_vtt_contents
  ABISELECT(176,76), // object size
  NSPAIRA(_ZTI7S7819C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7819C3),81, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7819C3),12, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7819C2  : virtual S7819C3 {
  virtual void  v32(); // _ZN7S7819C23v32Ev
  ~S7819C2(); // tgen
  S7819C2(); // tgen
};
//SIG(-1 S7819C2) C1{ VBC2{ VBC3{ v2 v3 v4 v5} VBC4{ v6 v7 v8 v9 v10 v11 v12 FD Fp} BC5{ VBC6{ VBC3 BC4 vd v13 v14 v15} v16 v17 v18 Fi FL} BC6 v19 v20 v21 v22 v23 v24} v1}


void  S7819C2 ::v32(){vfunc_called(this, "_ZN7S7819C23v32Ev");}
S7819C2 ::~S7819C2(){ note_dtor("S7819C2", this);} // tgen
S7819C2 ::S7819C2(){ note_ctor("S7819C2", this);} // tgen

static void Test_S7819C2()
{
  extern Class_Descriptor cd_S7819C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,21)];
    init_test(&cd_S7819C2, buf);
    S7819C2 *dp, &lv = *(dp=new (buf) S7819C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,80), "sizeof(S7819C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7819C2)");
    check_base_class_offset(lv, (S7819C4_nt*)(S7819C3*), 0, "S7819C2");
    /*is_ambiguous_... S7819C2::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C4_nt*)(S7819C7*), 0, "S7819C2");
    /*is_ambiguous_... S7819C3::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C4_nt*)(S7819C7*)(S7819C3*), 0, "S7819C2");
    /*is_ambiguous_... S7819C3::S7819C5 */ AMB_check_base_class_offset(lv, (S7819C5*)(S7819C3*), ABISELECT(96,40), "S7819C2");
    /*is_ambiguous_... S7819C2::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C5*)(S7819C7*), ABISELECT(144,60), "S7819C2");
    check_base_class_offset(lv, (S7819C7*)(S7819C6*)(S7819C3*), ABISELECT(144,60), "S7819C2");
    check_base_class_offset(lv, (S7819C6*)(S7819C3*), ABISELECT(16,4), "S7819C2");
    /*is_ambiguous_... S7819C3::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C5*)(S7819C7*)(S7819C3*), ABISELECT(48,20), "S7819C2");
    /*is_ambiguous_... S7819C3::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C7*)(S7819C3*), ABISELECT(48,20), "S7819C2");
    check_base_class_offset(lv, (S7819C3*), ABISELECT(16,4), "S7819C2");
    test_class_info(&lv, &cd_S7819C2);
    dp->~S7819C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7819C2(Test_S7819C2, "S7819C2", ABISELECT(192,80));

#else // __cplusplus

extern void _ZN7S7819C2C1Ev();
extern void _ZN7S7819C2D1Ev();
Name_Map name_map_S7819C2[] = {
  NSPAIR(_ZN7S7819C2C1Ev),
  NSPAIR(_ZN7S7819C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7819C4_nt;
extern VTBL_ENTRY _ZTI10S7819C4_nt[];
extern  VTBL_ENTRY _ZTV10S7819C4_nt[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
extern Class_Descriptor cd_S7819C7;
extern VTBL_ENTRY _ZTI7S7819C7[];
extern  VTBL_ENTRY _ZTV7S7819C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C7[];
extern Class_Descriptor cd_S7819C6;
extern VTBL_ENTRY _ZTI7S7819C6[];
extern  VTBL_ENTRY _ZTV7S7819C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C6[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
extern Class_Descriptor cd_S7819C7;
extern VTBL_ENTRY _ZTI7S7819C7[];
extern  VTBL_ENTRY _ZTV7S7819C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C7[];
extern Class_Descriptor cd_S7819C3;
extern VTBL_ENTRY _ZTI7S7819C3[];
extern  VTBL_ENTRY _ZTV7S7819C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C3[];
static Base_Class bases_S7819C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7819C4_nt,    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
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7819C5,    ABISELECT(96,40), //bcp->offset
    76, //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
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7819C5,    ABISELECT(144,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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7819C7,    ABISELECT(144,60), //bcp->offset
    92, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7819C6,    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
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7819C5,    ABISELECT(48,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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7819C7,    ABISELECT(48,20), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7819C3,    ABISELECT(16,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    29, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7819C2[];
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C23v32Ev();
extern void _ZN7S7819C2D1Ev();
extern void _ZN7S7819C2D0Ev();
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void ABISELECT(_ZTv0_n104_N7S7819C2D1Ev,_ZTv0_n52_N7S7819C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7819C2D1Ev,_ZThn4_N7S7819C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7819C2D0Ev,_ZTv0_n52_N7S7819C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7819C2D0Ev,_ZThn4_N7S7819C2D0Ev)() __attribute__((weak));
extern void _ZN7S7819C33v26Ev();
extern void _ZN7S7819C33v27Ev();
extern void _ZN7S7819C33v28Ev();
extern void _ZN7S7819C33v29Ev();
extern void _ZN7S7819C33v30Ev();
extern void _ZN7S7819C33v31Ev();
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTvn32_n104_N7S7819C2D1Ev,_ZTvn16_n52_N7S7819C2D1Ev)();
extern void ABISELECT(_ZTvn32_n104_N7S7819C2D0Ev,_ZTvn16_n52_N7S7819C2D0Ev)();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N7S7819C2D1Ev,_ZTv0_n44_N7S7819C2D1Ev)();
extern void ABISELECT(_ZThn144_N7S7819C2D1Ev,_ZThn60_N7S7819C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7819C2D0Ev,_ZTv0_n44_N7S7819C2D0Ev)();
extern void ABISELECT(_ZThn144_N7S7819C2D0Ev,_ZThn60_N7S7819C2D0Ev)() __attribute__((weak));
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY vtc_S7819C2[] = {
  ABISELECT(144,60),
  ABISELECT(96,40),
  0,
  ABISELECT(16,4),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C2[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7819C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C2D0Ev,
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  0,
  0,
  0,
  ABISELECT(80,36),
  ABISELECT(-16,-4),
  ABISELECT(128,56),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7819C2[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7819C2D1Ev,_ZTv0_n52_N7S7819C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7819C2D0Ev,_ZTv0_n52_N7S7819C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v28Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v29Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v30Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v31Ev,
  ABISELECT(-48,-20),
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI7S7819C2[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N7S7819C2D1Ev,_ZTvn16_n52_N7S7819C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N7S7819C2D0Ev,_ZTvn16_n52_N7S7819C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-40),
  (VTBL_ENTRY)&(_ZTI7S7819C2[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  0,
  0,
  0,
  ABISELECT(-144,-60),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-60),
  ABISELECT(-144,-60),
  (VTBL_ENTRY)&(_ZTI7S7819C2[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C2D1Ev,_ZTv0_n44_N7S7819C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C2D0Ev,_ZTv0_n44_N7S7819C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern VTBL_ENTRY _ZTV7S7819C2[];
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void _ZN7S7819C3D1Ev();
extern void _ZN7S7819C3D0Ev();
extern void _ZN7S7819C33v26Ev();
extern void _ZN7S7819C33v27Ev();
extern void _ZN7S7819C33v28Ev();
extern void _ZN7S7819C33v29Ev();
extern void _ZN7S7819C33v30Ev();
extern void _ZN7S7819C33v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C3__7S7819C2[] = {
  ABISELECT(80,36),
  ABISELECT(-16,-4),
  ABISELECT(128,56),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7819C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v28Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v29Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v30Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v31Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void _ZN7S7819C6D1Ev();
extern void _ZN7S7819C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C67S7819C3__7S7819C2[] = {
  ABISELECT(-16,-4),
  ABISELECT(128,56),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7819C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C6D0Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev)();
extern void ABISELECT(_ZThn128_N7S7819C6D1Ev,_ZThn56_N7S7819C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev)();
extern void ABISELECT(_ZThn128_N7S7819C6D0Ev,_ZThn56_N7S7819C6D0Ev)() __attribute__((weak));
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__7S7819C67S7819C3__7S7819C2[] = {
  0,
  0,
  0,
  ABISELECT(-128,-56),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-60),
  ABISELECT(-128,-56),
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C67S7819C3__7S7819C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C7D1Ev();
extern void _ZN7S7819C7D0Ev();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C77S7819C3__A1__7S7819C2[] = {
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C77S7819C3__A1__7S7819C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C3__7S7819C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C5__7S7819C3__7S7819C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N7S7819C3D1Ev,_ZTv0_n44_N7S7819C3D1Ev)();
extern void ABISELECT(_ZThn128_N7S7819C3D1Ev,_ZThn56_N7S7819C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7819C3D0Ev,_ZTv0_n44_N7S7819C3D0Ev)();
extern void ABISELECT(_ZThn128_N7S7819C3D0Ev,_ZThn56_N7S7819C3D0Ev)() __attribute__((weak));
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__7S7819C3__7S7819C2[] = {
  0,
  0,
  0,
  ABISELECT(-128,-56),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-60),
  ABISELECT(-128,-56),
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C3D1Ev,_ZTv0_n44_N7S7819C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C3D0Ev,_ZTv0_n44_N7S7819C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZThn32_N7S7819C3D1Ev,_ZThn16_N7S7819C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S7819C3D0Ev,_ZThn16_N7S7819C3D0Ev)();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__A__7S7819C3__7S7819C2[] = {
  ABISELECT(-48,-20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7819C3D1Ev,_ZThn16_N7S7819C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7819C3D0Ev,_ZThn16_N7S7819C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C7D1Ev();
extern void _ZN7S7819C7D0Ev();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__7S7819C2[] = {
  ABISELECT(-144,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C7__7S7819C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(144,60),
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
static  VTT_ENTRY vtt_S7819C2[] = {
  {&(_ZTV7S7819C2[10]),  10,118},
  {&(_ZTV7S7819C2[46]),  46,118},
  {&(_ZTV7S7819C2[10]),  10,118},
  {&(_ZTV7S7819C2[85]),  85,118},
  {&(_ZTV7S7819C2[106]),  106,118},
  {&(_ZTV7S7819C2[64]),  64,118},
  {&(_tg__ZTV7S7819C3__7S7819C2[9]),  9,24},
  {&(_tg__ZTV7S7819C67S7819C3__7S7819C2[8]),  8,17},
  {&(_tg__ZTV7S7819C7__7S7819C67S7819C3__7S7819C2[14]),  14,26},
  {&(_tg__ZTV10S7819C4_nt__7S7819C67S7819C3__7S7819C2[6]),  6,10},
  {&(_tg__ZTV7S7819C77S7819C3__A1__7S7819C2[3]),  3,15},
  {&(_tg__ZTV10S7819C4_nt__7S7819C77S7819C3__A1__7S7819C2[6]),  6,10},
  {&(_tg__ZTV10S7819C4_nt__7S7819C3__7S7819C2[6]),  6,10},
  {&(_tg__ZTV7S7819C5__7S7819C3__7S7819C2[9]),  9,16},
  {&(_tg__ZTV7S7819C7__7S7819C3__7S7819C2[14]),  14,26},
  {&(_tg__ZTV7S7819C7__A__7S7819C3__7S7819C2[3]),  3,15},
  {&(_tg__ZTV7S7819C7__7S7819C2[3]),  3,15},
  {&(_tg__ZTV10S7819C4_nt__7S7819C7__7S7819C2[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S7819C2[];
extern  VTBL_ENTRY _ZTV7S7819C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C2[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C3D0Ev,_ZTv0_n44_N7S7819C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7819C3D0Ev,_ZThn56_N7S7819C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C3D1Ev,_ZTv0_n44_N7S7819C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7819C3D1Ev,_ZThn56_N7S7819C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7819C6D0Ev,_ZThn56_N7S7819C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7819C6D1Ev,_ZThn56_N7S7819C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C2D0Ev,_ZTv0_n44_N7S7819C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S7819C2D0Ev,_ZThn60_N7S7819C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C2D1Ev,_ZTv0_n44_N7S7819C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N7S7819C2D1Ev,_ZThn60_N7S7819C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7819C2D0Ev,_ZTv0_n52_N7S7819C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7819C2D0Ev,_ZThn4_N7S7819C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7819C2D1Ev,_ZTv0_n52_N7S7819C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7819C2D1Ev,_ZThn4_N7S7819C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7819C2 = {  "S7819C2", // class name
  bases_S7819C2, 8,
  &(vtc_S7819C2[0]), // expected_vtbl_contents
  &(vtt_S7819C2[0]), // expected_vtt_contents
  ABISELECT(192,80), // object size
  NSPAIRA(_ZTI7S7819C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7819C2),118, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7819C2),18, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7819C9_nt  {
  virtual void  v33(); // _ZN10S7819C9_nt3v33Ev
  ~S7819C9_nt(); // tgen
  S7819C9_nt(); // tgen
};
//SIG(-1 S7819C9_nt) C1{ v1}


void  S7819C9_nt ::v33(){vfunc_called(this, "_ZN10S7819C9_nt3v33Ev");}
S7819C9_nt ::~S7819C9_nt(){ note_dtor("S7819C9_nt", this);} // tgen
S7819C9_nt ::S7819C9_nt(){ note_ctor("S7819C9_nt", this);} // tgen

//skip512 S7819C9_nt

#else // __cplusplus

extern void _ZN10S7819C9_ntC1Ev();
extern void _ZN10S7819C9_ntD1Ev();
Name_Map name_map_S7819C9_nt[] = {
  NSPAIR(_ZN10S7819C9_ntC1Ev),
  NSPAIR(_ZN10S7819C9_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7819C9_nt[];
extern void _ZN10S7819C9_nt3v33Ev();
static  VTBL_ENTRY vtc_S7819C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7819C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S7819C9_nt3v33Ev,
};
extern VTBL_ENTRY _ZTI10S7819C9_nt[];
VTBL_ENTRY *P__ZTI10S7819C9_nt = _ZTI10S7819C9_nt; 
extern  VTBL_ENTRY _ZTV10S7819C9_nt[];
Class_Descriptor cd_S7819C9_nt = {  "S7819C9_nt", // class name
  0,0,//no base classes
  &(vtc_S7819C9_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7819C9_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7819C9_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  S7819C8  : S7819C7 , S7819C9_nt , virtual S7819C5 , virtual S7819C3 , S7819C4_nt {
  virtual void  v34(); // _ZN7S7819C83v34Ev
  virtual void  v35(); // _ZN7S7819C83v35Ev
  ~S7819C8(); // tgen
  S7819C8(); // tgen
};
//SIG(-1 S7819C8) C1{ BC2{ VBC3{ v3 v4 v5 v6} BC4{ v7 v8 v9 v10 v11 v12 v13 FD Fp} vd v14 v15 v16} BC5{ v17} VBC4 VBC6{ VBC3 VBC4 BC7{ VBC2 v18 v19 v20 Fi FL} BC2 v21 v22 v23 v24 v25 v26} BC3 v1 v2}


void  S7819C8 ::v34(){vfunc_called(this, "_ZN7S7819C83v34Ev");}
void  S7819C8 ::v35(){vfunc_called(this, "_ZN7S7819C83v35Ev");}
S7819C8 ::~S7819C8(){ note_dtor("S7819C8", this);} // tgen
S7819C8 ::S7819C8(){ note_ctor("S7819C8", this);} // tgen

static void Test_S7819C8()
{
  extern Class_Descriptor cd_S7819C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,27)];
    init_test(&cd_S7819C8, buf);
    S7819C8 *dp, &lv = *(dp=new (buf) S7819C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,104), "sizeof(S7819C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7819C8)");
    /*is_ambiguous_... S7819C8::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C4_nt*)(S7819C7*), ABISELECT(112,48), "S7819C8");
    check_base_class_offset(lv, (S7819C4_nt*)(S7819C3*), ABISELECT(112,48), "S7819C8");
    /*is_ambiguous_... S7819C8::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C4_nt*)(S7819C7*), ABISELECT(112,48), "S7819C8");
    /*is_ambiguous_... S7819C3::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C4_nt*)(S7819C7*)(S7819C3*), ABISELECT(112,48), "S7819C8");
    /*is_ambiguous_... S7819C8::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C5*)(S7819C7*), 0, "S7819C8");
    /*is_ambiguous_... S7819C8::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C7*), 0, "S7819C8");
    check_base_class_offset(lv, (S7819C9_nt*), ABISELECT(40,20), "S7819C8");
    /*is_ambiguous_... S7819C8::S7819C5 */ AMB_check_base_class_offset(lv, (S7819C5*), ABISELECT(64,28), "S7819C8");
    /*is_ambiguous_... S7819C3::S7819C5 */ AMB_check_base_class_offset(lv, (S7819C5*)(S7819C3*), ABISELECT(64,28), "S7819C8");
    /*is_ambiguous_... S7819C8::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C5*)(S7819C7*), ABISELECT(192,84), "S7819C8");
    check_base_class_offset(lv, (S7819C7*)(S7819C6*)(S7819C3*), ABISELECT(192,84), "S7819C8");
    check_base_class_offset(lv, (S7819C6*)(S7819C3*), ABISELECT(112,48), "S7819C8");
    /*is_ambiguous_... S7819C3::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C5*)(S7819C7*)(S7819C3*), ABISELECT(144,64), "S7819C8");
    /*is_ambiguous_... S7819C3::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C7*)(S7819C3*), ABISELECT(144,64), "S7819C8");
    check_base_class_offset(lv, (S7819C3*), ABISELECT(112,48), "S7819C8");
    /*is_ambiguous_... S7819C8::S7819C4_nt */ AMB_check_base_class_offset(lv, (S7819C4_nt*), ABISELECT(48,24), "S7819C8");
    test_class_info(&lv, &cd_S7819C8);
    dp->~S7819C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7819C8(Test_S7819C8, "S7819C8", ABISELECT(240,104));

#else // __cplusplus

extern void _ZN7S7819C8C1Ev();
extern void _ZN7S7819C8D1Ev();
Name_Map name_map_S7819C8[] = {
  NSPAIR(_ZN7S7819C8C1Ev),
  NSPAIR(_ZN7S7819C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7819C4_nt;
extern VTBL_ENTRY _ZTI10S7819C4_nt[];
extern  VTBL_ENTRY _ZTV10S7819C4_nt[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
extern Class_Descriptor cd_S7819C7;
extern VTBL_ENTRY _ZTI7S7819C7[];
extern  VTBL_ENTRY _ZTV7S7819C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C7[];
extern Class_Descriptor cd_S7819C9_nt;
extern VTBL_ENTRY _ZTI10S7819C9_nt[];
extern  VTBL_ENTRY _ZTV10S7819C9_nt[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
extern Class_Descriptor cd_S7819C7;
extern VTBL_ENTRY _ZTI7S7819C7[];
extern  VTBL_ENTRY _ZTV7S7819C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C7[];
extern Class_Descriptor cd_S7819C6;
extern VTBL_ENTRY _ZTI7S7819C6[];
extern  VTBL_ENTRY _ZTV7S7819C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C6[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
extern Class_Descriptor cd_S7819C7;
extern VTBL_ENTRY _ZTI7S7819C7[];
extern  VTBL_ENTRY _ZTV7S7819C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C7[];
extern Class_Descriptor cd_S7819C3;
extern VTBL_ENTRY _ZTI7S7819C3[];
extern  VTBL_ENTRY _ZTV7S7819C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C3[];
extern Class_Descriptor cd_S7819C4_nt;
extern VTBL_ENTRY _ZTI10S7819C4_nt[];
extern  VTBL_ENTRY _ZTV10S7819C4_nt[];
static Base_Class bases_S7819C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7819C4_nt,    ABISELECT(112,48), //bcp->offset
    -1, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7819C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S7819C7,    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_S7819C9_nt,    ABISELECT(40,20), //bcp->offset
    20, //bcp->virtual_function_table_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_S7819C5,    ABISELECT(64,28), //bcp->offset
    29, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7819C5,    ABISELECT(192,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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7819C7,    ABISELECT(192,84), //bcp->offset
    104, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7819C6,    ABISELECT(112,48), //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
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7819C5,    ABISELECT(144,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
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7819C7,    ABISELECT(144,64), //bcp->offset
    89, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7819C3,    ABISELECT(112,48), //bcp->offset
    45, //bcp->virtual_function_table_offset
    29, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7819C4_nt,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7819C8[];
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C8D1Ev();
extern void _ZN7S7819C8D0Ev();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
extern void _ZN7S7819C83v34Ev();
extern void _ZN7S7819C83v35Ev();
extern void _ZN10S7819C9_nt3v33Ev();
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void ABISELECT(_ZTv0_n104_N7S7819C8D1Ev,_ZTv0_n52_N7S7819C8D1Ev)();
extern void ABISELECT(_ZThn112_N7S7819C8D1Ev,_ZThn48_N7S7819C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7819C8D0Ev,_ZTv0_n52_N7S7819C8D0Ev)();
extern void ABISELECT(_ZThn112_N7S7819C8D0Ev,_ZThn48_N7S7819C8D0Ev)() __attribute__((weak));
extern void _ZN7S7819C33v26Ev();
extern void _ZN7S7819C33v27Ev();
extern void _ZN7S7819C33v28Ev();
extern void _ZN7S7819C33v29Ev();
extern void _ZN7S7819C33v30Ev();
extern void _ZN7S7819C33v31Ev();
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTvn32_n104_N7S7819C8D1Ev,_ZTvn16_n52_N7S7819C8D1Ev)();
extern void ABISELECT(_ZTvn32_n104_N7S7819C8D0Ev,_ZTvn16_n52_N7S7819C8D0Ev)();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N7S7819C8D1Ev,_ZTv0_n44_N7S7819C8D1Ev)();
extern void ABISELECT(_ZThn192_N7S7819C8D1Ev,_ZThn84_N7S7819C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7819C8D0Ev,_ZTv0_n44_N7S7819C8D0Ev)();
extern void ABISELECT(_ZThn192_N7S7819C8D0Ev,_ZThn84_N7S7819C8D0Ev)() __attribute__((weak));
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY vtc_S7819C8[] = {
  ABISELECT(192,84),
  ABISELECT(112,48),
  ABISELECT(64,28),
  ABISELECT(112,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C8[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7819C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7819C83v34Ev,
  (VTBL_ENTRY)&_ZN7S7819C83v35Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7819C8[0]),
  (VTBL_ENTRY)&_ZN10S7819C9_nt3v33Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7819C8[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI7S7819C8[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  0,
  0,
  0,
  ABISELECT(-48,-20),
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  (VTBL_ENTRY)&(_ZTI7S7819C8[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7819C8D1Ev,_ZTv0_n52_N7S7819C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7819C8D0Ev,_ZTv0_n52_N7S7819C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v28Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v29Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v30Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v31Ev,
  ABISELECT(-32,-16),
  ABISELECT(-144,-64),
  (VTBL_ENTRY)&(_ZTI7S7819C8[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N7S7819C8D1Ev,_ZTvn16_n52_N7S7819C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N7S7819C8D0Ev,_ZTvn16_n52_N7S7819C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
  0,
  0,
  0,
  ABISELECT(-192,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-192,-84),
  (VTBL_ENTRY)&(_ZTI7S7819C8[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C8D1Ev,_ZTv0_n44_N7S7819C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C8D0Ev,_ZTv0_n44_N7S7819C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern VTBL_ENTRY _ZTV7S7819C8[];
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C7D1Ev();
extern void _ZN7S7819C7D0Ev();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__A__7S7819C8[] = {
  ABISELECT(112,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C7__A__7S7819C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void _ZN7S7819C3D1Ev();
extern void _ZN7S7819C3D0Ev();
extern void _ZN7S7819C33v26Ev();
extern void _ZN7S7819C33v27Ev();
extern void _ZN7S7819C33v28Ev();
extern void _ZN7S7819C33v29Ev();
extern void _ZN7S7819C33v30Ev();
extern void _ZN7S7819C33v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C3__7S7819C8[] = {
  ABISELECT(-48,-20),
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7819C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v28Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v29Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v30Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v31Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void _ZN7S7819C6D1Ev();
extern void _ZN7S7819C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C67S7819C3__7S7819C8[] = {
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7819C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C6D0Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev)();
extern void ABISELECT(_ZThn80_N7S7819C6D1Ev,_ZThn36_N7S7819C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev)();
extern void ABISELECT(_ZThn80_N7S7819C6D0Ev,_ZThn36_N7S7819C6D0Ev)() __attribute__((weak));
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__7S7819C67S7819C3__7S7819C8[] = {
  0,
  0,
  0,
  ABISELECT(-80,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C7D1Ev();
extern void _ZN7S7819C7D0Ev();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C77S7819C3__A2__7S7819C8[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C77S7819C3__A2__7S7819C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C5__7S7819C3__7S7819C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N7S7819C3D1Ev,_ZTv0_n44_N7S7819C3D1Ev)();
extern void ABISELECT(_ZThn80_N7S7819C3D1Ev,_ZThn36_N7S7819C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7819C3D0Ev,_ZTv0_n44_N7S7819C3D0Ev)();
extern void ABISELECT(_ZThn80_N7S7819C3D0Ev,_ZThn36_N7S7819C3D0Ev)() __attribute__((weak));
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__7S7819C3__7S7819C8[] = {
  0,
  0,
  0,
  ABISELECT(-80,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C3D1Ev,_ZTv0_n44_N7S7819C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C3D0Ev,_ZTv0_n44_N7S7819C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZThn32_N7S7819C3D1Ev,_ZThn16_N7S7819C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S7819C3D0Ev,_ZThn16_N7S7819C3D0Ev)();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__A__7S7819C3__7S7819C8[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7819C3D1Ev,_ZThn16_N7S7819C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7819C3D0Ev,_ZThn16_N7S7819C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C7D1Ev();
extern void _ZN7S7819C7D0Ev();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__A1__7S7819C8[] = {
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C7__A1__7S7819C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
static  VTT_ENTRY vtt_S7819C8[] = {
  {&(_ZTV7S7819C8[6]),  6,130},
  {&(_tg__ZTV7S7819C7__A__7S7819C8[3]),  3,15},
  {&(_tg__ZTV10S7819C4_nt__7S7819C7__A__7S7819C8[6]),  6,10},
  {&(_ZTV7S7819C8[74]),  74,130},
  {&(_ZTV7S7819C8[38]),  38,130},
  {&(_ZTV7S7819C8[74]),  74,130},
  {&(_ZTV7S7819C8[118]),  118,130},
  {&(_ZTV7S7819C8[92]),  92,130},
  {&(_tg__ZTV7S7819C3__7S7819C8[9]),  9,24},
  {&(_tg__ZTV7S7819C67S7819C3__7S7819C8[8]),  8,17},
  {&(_tg__ZTV7S7819C7__7S7819C67S7819C3__7S7819C8[14]),  14,26},
  {&(_tg__ZTV7S7819C67S7819C3__7S7819C8[8]),  8,17},
  {&(_tg__ZTV7S7819C77S7819C3__A2__7S7819C8[3]),  3,15},
  {&(_tg__ZTV10S7819C4_nt__7S7819C77S7819C3__A2__7S7819C8[6]),  6,10},
  {&(_tg__ZTV7S7819C3__7S7819C8[9]),  9,24},
  {&(_tg__ZTV7S7819C5__7S7819C3__7S7819C8[9]),  9,16},
  {&(_tg__ZTV7S7819C7__7S7819C3__7S7819C8[14]),  14,26},
  {&(_tg__ZTV7S7819C7__A__7S7819C3__7S7819C8[3]),  3,15},
  {&(_tg__ZTV7S7819C7__A1__7S7819C8[3]),  3,15},
  {&(_tg__ZTV10S7819C4_nt__7S7819C7__A1__7S7819C8[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S7819C8[];
extern  VTBL_ENTRY _ZTV7S7819C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C8[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C3D0Ev,_ZTv0_n44_N7S7819C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7819C3D0Ev,_ZThn36_N7S7819C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C3D1Ev,_ZTv0_n44_N7S7819C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7819C3D1Ev,_ZThn36_N7S7819C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7819C6D0Ev,_ZThn36_N7S7819C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7819C6D1Ev,_ZThn36_N7S7819C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C8D0Ev,_ZTv0_n44_N7S7819C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7819C8D0Ev,_ZThn84_N7S7819C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C8D1Ev,_ZTv0_n44_N7S7819C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7819C8D1Ev,_ZThn84_N7S7819C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7819C8D0Ev,_ZTv0_n52_N7S7819C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7819C8D0Ev,_ZThn48_N7S7819C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7819C8D1Ev,_ZTv0_n52_N7S7819C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7819C8D1Ev,_ZThn48_N7S7819C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7819C8 = {  "S7819C8", // class name
  bases_S7819C8, 12,
  &(vtc_S7819C8[0]), // expected_vtbl_contents
  &(vtt_S7819C8[0]), // expected_vtt_contents
  ABISELECT(240,104), // object size
  NSPAIRA(_ZTI7S7819C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7819C8),130, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7819C8),20, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7819C10  : virtual S7819C6 , S7819C9_nt , virtual S7819C3 {
  ::S7819C4_nt s7819c10f0;
  virtual  ~S7819C10(); // _ZN8S7819C10D2Ev
  S7819C10(); // tgen
};
//SIG(-1 S7819C10) C1{ VBC2{ VBC3{ VBC4{ v1 v2 v3 v4} BC5{ v5 v6 v7 v8 v9 v10 v11 FD Fp} vd v12 v13 v14} v15 v16 v17 Fi FL} BC6{ v18} VBC7{ VBC4 VBC5 BC2 BC3 v19 v20 v21 v22 v23 v24} vd FC4}


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

static void Test_S7819C10()
{
  extern Class_Descriptor cd_S7819C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,26)];
    init_test(&cd_S7819C10, buf);
    S7819C10 *dp, &lv = *(dp=new (buf) S7819C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,100), "sizeof(S7819C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7819C10)");
    /*is_ambiguous_... S7819C10::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C4_nt*)(S7819C7*), ABISELECT(16,8), "S7819C10");
    check_base_class_offset(lv, (S7819C4_nt*)(S7819C3*), ABISELECT(16,8), "S7819C10");
    /*is_ambiguous_... S7819C3::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C4_nt*)(S7819C7*)(S7819C3*), ABISELECT(16,8), "S7819C10");
    /*is_ambiguous_... S7819C10::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C5*)(S7819C7*), ABISELECT(48,24), "S7819C10");
    /*is_ambiguous_... S7819C10::S7819C6 */ AMB_check_base_class_offset(lv, (S7819C7*)(S7819C6*), ABISELECT(48,24), "S7819C10");
    check_base_class_offset(lv, (S7819C7*)(S7819C6*)(S7819C3*), ABISELECT(48,24), "S7819C10");
    /*is_ambiguous_... S7819C10::S7819C6 */ AMB_check_base_class_offset(lv, (S7819C6*), ABISELECT(16,8), "S7819C10");
    check_base_class_offset(lv, (S7819C9_nt*), 0, "S7819C10");
    /*is_ambiguous_... S7819C3::S7819C5 */ AMB_check_base_class_offset(lv, (S7819C5*)(S7819C3*), ABISELECT(176,80), "S7819C10");
    check_base_class_offset(lv, (S7819C6*)(S7819C3*), ABISELECT(96,44), "S7819C10");
    /*is_ambiguous_... S7819C3::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C5*)(S7819C7*)(S7819C3*), ABISELECT(128,60), "S7819C10");
    /*is_ambiguous_... S7819C3::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C7*)(S7819C3*), ABISELECT(128,60), "S7819C10");
    check_base_class_offset(lv, (S7819C3*), ABISELECT(96,44), "S7819C10");
    check_field_offset(lv, s7819c10f0, ABISELECT(8,4), "S7819C10.s7819c10f0");
    test_class_info(&lv, &cd_S7819C10);
    dp->~S7819C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7819C10(Test_S7819C10, "S7819C10", ABISELECT(224,100));

#else // __cplusplus

extern void _ZN8S7819C10C1Ev();
extern void _ZN8S7819C10D2Ev();
Name_Map name_map_S7819C10[] = {
  NSPAIR(_ZN8S7819C10C1Ev),
  NSPAIR(_ZN8S7819C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7819C4_nt;
extern VTBL_ENTRY _ZTI10S7819C4_nt[];
extern  VTBL_ENTRY _ZTV10S7819C4_nt[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
extern Class_Descriptor cd_S7819C7;
extern VTBL_ENTRY _ZTI7S7819C7[];
extern  VTBL_ENTRY _ZTV7S7819C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C7[];
extern Class_Descriptor cd_S7819C6;
extern VTBL_ENTRY _ZTI7S7819C6[];
extern  VTBL_ENTRY _ZTV7S7819C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C6[];
extern Class_Descriptor cd_S7819C9_nt;
extern VTBL_ENTRY _ZTI10S7819C9_nt[];
extern  VTBL_ENTRY _ZTV10S7819C9_nt[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
extern Class_Descriptor cd_S7819C6;
extern VTBL_ENTRY _ZTI7S7819C6[];
extern  VTBL_ENTRY _ZTV7S7819C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C6[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
extern Class_Descriptor cd_S7819C7;
extern VTBL_ENTRY _ZTI7S7819C7[];
extern  VTBL_ENTRY _ZTV7S7819C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C7[];
extern Class_Descriptor cd_S7819C3;
extern VTBL_ENTRY _ZTI7S7819C3[];
extern  VTBL_ENTRY _ZTV7S7819C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C3[];
static Base_Class bases_S7819C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7819C4_nt,    ABISELECT(16,8), //bcp->offset
    -1, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7819C5,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7819C7,    ABISELECT(48,24), //bcp->offset
    31, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7819C6,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7819C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7819C5,    ABISELECT(176,80), //bcp->offset
    116, //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
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7819C6,    ABISELECT(96,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    9, //immediately_derived
  0, 0},
  {&cd_S7819C5,    ABISELECT(128,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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7819C7,    ABISELECT(128,60), //bcp->offset
    101, //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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7819C3,    ABISELECT(96,44), //bcp->offset
    57, //bcp->virtual_function_table_offset
    29, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7819C10[];
extern void _ZN10S7819C9_nt3v33Ev();
extern void _ZN8S7819C10D1Ev();
extern void _ZN8S7819C10D0Ev();
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void ABISELECT(_ZTv0_n96_N8S7819C10D1Ev,_ZTv0_n48_N8S7819C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S7819C10D1Ev,_ZThn8_N8S7819C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S7819C10D0Ev,_ZTv0_n48_N8S7819C10D0Ev)();
extern void ABISELECT(_ZThn16_N8S7819C10D0Ev,_ZThn8_N8S7819C10D0Ev)() __attribute__((weak));
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N8S7819C10D1Ev,_ZTv0_n44_N8S7819C10D1Ev)();
extern void ABISELECT(_ZThn48_N8S7819C10D1Ev,_ZThn24_N8S7819C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S7819C10D0Ev,_ZTv0_n44_N8S7819C10D0Ev)();
extern void ABISELECT(_ZThn48_N8S7819C10D0Ev,_ZThn24_N8S7819C10D0Ev)() __attribute__((weak));
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void ABISELECT(_ZTv0_n104_N8S7819C10D1Ev,_ZTv0_n52_N8S7819C10D1Ev)();
extern void ABISELECT(_ZThn96_N8S7819C10D1Ev,_ZThn44_N8S7819C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S7819C10D0Ev,_ZTv0_n52_N8S7819C10D0Ev)();
extern void ABISELECT(_ZThn96_N8S7819C10D0Ev,_ZThn44_N8S7819C10D0Ev)() __attribute__((weak));
extern void _ZN7S7819C33v26Ev();
extern void _ZN7S7819C33v27Ev();
extern void _ZN7S7819C33v28Ev();
extern void _ZN7S7819C33v29Ev();
extern void _ZN7S7819C33v30Ev();
extern void _ZN7S7819C33v31Ev();
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTvn32_n104_N8S7819C10D1Ev,_ZTvn16_n52_N8S7819C10D1Ev)();
extern void ABISELECT(_ZTvn32_n104_N8S7819C10D0Ev,_ZTvn16_n52_N8S7819C10D0Ev)();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
static  VTBL_ENTRY vtc_S7819C10[] = {
  ABISELECT(176,80),
  ABISELECT(96,44),
  ABISELECT(16,8),
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7819C10[0]),
  (VTBL_ENTRY)&_ZN10S7819C9_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S7819C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7819C10D0Ev,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7819C10[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7819C10D1Ev,_ZTv0_n48_N8S7819C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7819C10D0Ev,_ZTv0_n48_N8S7819C10D0Ev),
  0,
  0,
  0,
  ABISELECT(-48,-24),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7819C10[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S7819C10D1Ev,_ZTv0_n44_N8S7819C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S7819C10D0Ev,_ZTv0_n44_N8S7819C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-44),
  0,
  0,
  0,
  ABISELECT(80,36),
  ABISELECT(-80,-36),
  ABISELECT(-48,-20),
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S7819C10[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S7819C10D1Ev,_ZTv0_n52_N8S7819C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S7819C10D0Ev,_ZTv0_n52_N8S7819C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v28Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v29Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v30Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v31Ev,
  ABISELECT(-112,-52),
  ABISELECT(-128,-60),
  (VTBL_ENTRY)&(_ZTI8S7819C10[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N8S7819C10D1Ev,_ZTvn16_n52_N8S7819C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N8S7819C10D0Ev,_ZTvn16_n52_N8S7819C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-80),
  (VTBL_ENTRY)&(_ZTI8S7819C10[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
};
extern VTBL_ENTRY _ZTV8S7819C10[];
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void _ZN7S7819C6D1Ev();
extern void _ZN7S7819C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C6__8S7819C10[] = {
  0,
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7819C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C6D0Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S7819C6D1Ev,_ZThn16_N7S7819C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S7819C6D0Ev,_ZThn16_N7S7819C6D0Ev)() __attribute__((weak));
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__7S7819C6__8S7819C10[] = {
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C7D1Ev();
extern void _ZN7S7819C7D0Ev();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__8S7819C10[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C7__8S7819C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void _ZN7S7819C3D1Ev();
extern void _ZN7S7819C3D0Ev();
extern void _ZN7S7819C33v26Ev();
extern void _ZN7S7819C33v27Ev();
extern void _ZN7S7819C33v28Ev();
extern void _ZN7S7819C33v29Ev();
extern void _ZN7S7819C33v30Ev();
extern void _ZN7S7819C33v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C3__8S7819C10[] = {
  ABISELECT(80,36),
  ABISELECT(-80,-36),
  ABISELECT(-48,-20),
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7819C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v28Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v29Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v30Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v31Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void _ZN7S7819C6D1Ev();
extern void _ZN7S7819C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C67S7819C3__A1__8S7819C10[] = {
  ABISELECT(-80,-36),
  ABISELECT(-48,-20),
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7819C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C6D0Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev)();
extern void ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev)();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__7S7819C67S7819C3__A1__8S7819C10[] = {
  0,
  0,
  0,
  ABISELECT(48,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C67S7819C3__A1__8S7819C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C7D1Ev();
extern void _ZN7S7819C7D0Ev();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C77S7819C3__A1__8S7819C10[] = {
  ABISELECT(-112,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C77S7819C3__A1__8S7819C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(112,52),
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C3__8S7819C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C5__7S7819C3__8S7819C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N7S7819C3D1Ev,_ZTv0_n44_N7S7819C3D1Ev)();
extern void ABISELECT(_ZTv0_n88_N7S7819C3D0Ev,_ZTv0_n44_N7S7819C3D0Ev)();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__7S7819C3__8S7819C10[] = {
  0,
  0,
  0,
  ABISELECT(48,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C3D1Ev,_ZTv0_n44_N7S7819C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C3D0Ev,_ZTv0_n44_N7S7819C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZThn32_N7S7819C3D1Ev,_ZThn16_N7S7819C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S7819C3D0Ev,_ZThn16_N7S7819C3D0Ev)();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__A__7S7819C3__8S7819C10[] = {
  ABISELECT(-112,-52),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7819C3D1Ev,_ZThn16_N7S7819C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7819C3D0Ev,_ZThn16_N7S7819C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
static  VTT_ENTRY vtt_S7819C10[] = {
  {&(_ZTV8S7819C10[7]),  7,132},
  {&(_ZTV8S7819C10[22]),  22,132},
  {&(_ZTV8S7819C10[45]),  45,132},
  {&(_ZTV8S7819C10[22]),  22,132},
  {&(_ZTV8S7819C10[86]),  86,132},
  {&(_ZTV8S7819C10[125]),  125,132},
  {&(_ZTV8S7819C10[104]),  104,132},
  {&(_tg__ZTV7S7819C6__8S7819C10[8]),  8,17},
  {&(_tg__ZTV7S7819C7__7S7819C6__8S7819C10[14]),  14,26},
  {&(_tg__ZTV7S7819C6__8S7819C10[8]),  8,17},
  {&(_tg__ZTV7S7819C7__8S7819C10[3]),  3,15},
  {&(_tg__ZTV10S7819C4_nt__7S7819C7__8S7819C10[6]),  6,10},
  {&(_tg__ZTV7S7819C3__8S7819C10[9]),  9,24},
  {&(_tg__ZTV7S7819C67S7819C3__A1__8S7819C10[8]),  8,17},
  {&(_tg__ZTV7S7819C7__7S7819C67S7819C3__A1__8S7819C10[14]),  14,26},
  {&(_tg__ZTV10S7819C4_nt__7S7819C67S7819C3__A1__8S7819C10[6]),  6,10},
  {&(_tg__ZTV7S7819C77S7819C3__A1__8S7819C10[3]),  3,15},
  {&(_tg__ZTV10S7819C4_nt__7S7819C77S7819C3__A1__8S7819C10[6]),  6,10},
  {&(_tg__ZTV10S7819C4_nt__7S7819C3__8S7819C10[6]),  6,10},
  {&(_tg__ZTV7S7819C5__7S7819C3__8S7819C10[9]),  9,16},
  {&(_tg__ZTV7S7819C7__7S7819C3__8S7819C10[14]),  14,26},
  {&(_tg__ZTV7S7819C7__A__7S7819C3__8S7819C10[3]),  3,15},
};
extern VTBL_ENTRY _ZTI8S7819C10[];
extern  VTBL_ENTRY _ZTV8S7819C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7819C10[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7819C6D0Ev,_ZThn16_N7S7819C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7819C6D1Ev,_ZThn16_N7S7819C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S7819C10D0Ev,_ZTv0_n52_N8S7819C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7819C10D0Ev,_ZThn44_N8S7819C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S7819C10D1Ev,_ZTv0_n52_N8S7819C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7819C10D1Ev,_ZThn44_N8S7819C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S7819C10D0Ev,_ZTv0_n44_N8S7819C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7819C10D0Ev,_ZThn24_N8S7819C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S7819C10D1Ev,_ZTv0_n44_N8S7819C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7819C10D1Ev,_ZThn24_N8S7819C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7819C10D0Ev,_ZTv0_n48_N8S7819C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7819C10D0Ev,_ZThn8_N8S7819C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7819C10D1Ev,_ZTv0_n48_N8S7819C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7819C10D1Ev,_ZThn8_N8S7819C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7819C10 = {  "S7819C10", // class name
  bases_S7819C10, 10,
  &(vtc_S7819C10[0]), // expected_vtbl_contents
  &(vtt_S7819C10[0]), // expected_vtt_contents
  ABISELECT(224,100), // object size
  NSPAIRA(_ZTI8S7819C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7819C10),132, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7819C10),22, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7819C11  : virtual S7819C5 {
  virtual void  v36(); // _ZN8S7819C113v36Ev
  ~S7819C11(); // tgen
  S7819C11(); // tgen
};
//SIG(-1 S7819C11) C1{ VBC2{ v2 v3 v4 v5 v6 v7 v8 FD Fp} v1}


void  S7819C11 ::v36(){vfunc_called(this, "_ZN8S7819C113v36Ev");}
S7819C11 ::~S7819C11(){ note_dtor("S7819C11", this);} // tgen
S7819C11 ::S7819C11(){ note_ctor("S7819C11", this);} // tgen

static void Test_S7819C11()
{
  extern Class_Descriptor cd_S7819C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,7)];
    init_test(&cd_S7819C11, buf);
    S7819C11 *dp, &lv = *(dp=new (buf) S7819C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,24), "sizeof(S7819C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7819C11)");
    check_base_class_offset(lv, (S7819C5*), ABISELECT(16,4), "S7819C11");
    test_class_info(&lv, &cd_S7819C11);
    dp->~S7819C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7819C11(Test_S7819C11, "S7819C11", ABISELECT(64,24));

#else // __cplusplus

extern void _ZN8S7819C11C1Ev();
extern void _ZN8S7819C11D1Ev();
Name_Map name_map_S7819C11[] = {
  NSPAIR(_ZN8S7819C11C1Ev),
  NSPAIR(_ZN8S7819C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
static Base_Class bases_S7819C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7819C5,    ABISELECT(16,4), //bcp->offset
    4, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S7819C11[];
extern void _ZN8S7819C113v36Ev();
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
static  VTBL_ENTRY vtc_S7819C11[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7819C11[0]),
  (VTBL_ENTRY)&_ZN8S7819C113v36Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S7819C11[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
};
extern VTBL_ENTRY _ZTV8S7819C11[];
static  VTT_ENTRY vtt_S7819C11[] = {
  {&(_ZTV8S7819C11[3]),  3,20},
  {&(_ZTV8S7819C11[13]),  13,20},
};
extern VTBL_ENTRY _ZTI8S7819C11[];
extern  VTBL_ENTRY _ZTV8S7819C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7819C11[];
Class_Descriptor cd_S7819C11 = {  "S7819C11", // class name
  bases_S7819C11, 1,
  &(vtc_S7819C11[0]), // expected_vtbl_contents
  &(vtt_S7819C11[0]), // expected_vtt_contents
  ABISELECT(64,24), // object size
  NSPAIRA(_ZTI8S7819C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7819C11),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7819C11),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  S7819C1  : S7819C2 , S7819C8 , S7819C10 , S7819C11 , S7819C9_nt {
  virtual void  v1(); // _ZN7S7819C12v1Ev
  virtual void  v2(); // _ZN7S7819C12v2Ev
  virtual void  v3(); // _ZN7S7819C12v3Ev
  virtual void  v4(); // _ZN7S7819C12v4Ev
  virtual void  v5(); // _ZN7S7819C12v5Ev
  virtual void  v6(); // _ZN7S7819C12v6Ev
  virtual void  v7(); // _ZN7S7819C12v7Ev
  virtual void  v8(); // _ZN7S7819C12v8Ev
  ~S7819C1(); // tgen
  S7819C1(); // tgen
};
//SIG(1 S7819C1) C1{ BC2{ VBC3{ VBC4{ v9 v10 v11 v12} VBC5{ v13 v14 v15 v16 v17 v18 v19 FD Fp} BC6{ VBC7{ VBC4 BC5 vd v20 v21 v22} v23 v24 v25 Fi FL} BC7 v26 v27 v28 v29 v30 v31} v32} BC8{ BC7 BC9{ v33} VBC5 VBC3 BC4 v34 v35} BC10{ VBC6 BC9 VBC3 vd FC4} BC11{ VBC5 v36} BC9 v1 v2 v3 v4 v5 v6 v7 v8}


void  S7819C1 ::v1(){vfunc_called(this, "_ZN7S7819C12v1Ev");}
void  S7819C1 ::v2(){vfunc_called(this, "_ZN7S7819C12v2Ev");}
void  S7819C1 ::v3(){vfunc_called(this, "_ZN7S7819C12v3Ev");}
void  S7819C1 ::v4(){vfunc_called(this, "_ZN7S7819C12v4Ev");}
void  S7819C1 ::v5(){vfunc_called(this, "_ZN7S7819C12v5Ev");}
void  S7819C1 ::v6(){vfunc_called(this, "_ZN7S7819C12v6Ev");}
void  S7819C1 ::v7(){vfunc_called(this, "_ZN7S7819C12v7Ev");}
void  S7819C1 ::v8(){vfunc_called(this, "_ZN7S7819C12v8Ev");}
S7819C1 ::~S7819C1(){ note_dtor("S7819C1", this);} // tgen
S7819C1 ::S7819C1(){ note_ctor("S7819C1", this);} // tgen

static void Test_S7819C1()
{
  extern Class_Descriptor cd_S7819C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,36)];
    init_test(&cd_S7819C1, buf);
    S7819C1 *dp, &lv = *(dp=new (buf) S7819C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,140), "sizeof(S7819C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7819C1)");
    check_base_class_offset(lv, (S7819C4_nt*)(S7819C3*), 0, "S7819C1");
    /*is_ambiguous_... S7819C1::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C4_nt*)(S7819C7*), 0, "S7819C1");
    /*is_ambiguous_... S7819C3::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C4_nt*)(S7819C7*)(S7819C3*), 0, "S7819C1");
    /*is_ambiguous_... S7819C8::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C4_nt*)(S7819C7*)(S7819C8*), 0, "S7819C1");
    /*is_ambiguous_... S7819C3::S7819C5 */ AMB_check_base_class_offset(lv, (S7819C5*)(S7819C3*), ABISELECT(192,84), "S7819C1");
    /*is_ambiguous_... S7819C8::S7819C5 */ AMB_check_base_class_offset(lv, (S7819C5*)(S7819C8*), ABISELECT(192,84), "S7819C1");
    check_base_class_offset(lv, (S7819C5*)(S7819C11*), ABISELECT(192,84), "S7819C1");
    /*is_ambiguous_... S7819C1::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C5*)(S7819C7*), ABISELECT(240,104), "S7819C1");
    check_base_class_offset(lv, (S7819C7*)(S7819C6*)(S7819C3*), ABISELECT(240,104), "S7819C1");
    /*is_ambiguous_... S7819C1::S7819C6 */ AMB_check_base_class_offset(lv, (S7819C7*)(S7819C6*), ABISELECT(240,104), "S7819C1");
    check_base_class_offset(lv, (S7819C6*)(S7819C3*), ABISELECT(112,48), "S7819C1");
    /*is_ambiguous_... S7819C3::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C5*)(S7819C7*)(S7819C3*), ABISELECT(144,64), "S7819C1");
    /*is_ambiguous_... S7819C3::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C7*)(S7819C3*), ABISELECT(144,64), "S7819C1");
    check_base_class_offset(lv, (S7819C3*)(S7819C2*), ABISELECT(112,48), "S7819C1");
    check_base_class_offset(lv, (S7819C3*)(S7819C8*), ABISELECT(112,48), "S7819C1");
    check_base_class_offset(lv, (S7819C3*)(S7819C10*), ABISELECT(112,48), "S7819C1");
    check_base_class_offset(lv, (S7819C2*), 0, "S7819C1");
    /*is_ambiguous_... S7819C8::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C5*)(S7819C7*)(S7819C8*), ABISELECT(16,4), "S7819C1");
    /*is_ambiguous_... S7819C8::S7819C7 */ AMB_check_base_class_offset(lv, (S7819C7*)(S7819C8*), ABISELECT(16,4), "S7819C1");
    check_base_class_offset(lv, (S7819C9_nt*)(S7819C8*), ABISELECT(56,24), "S7819C1");
    /*is_ambiguous_... S7819C8::S7819C4_nt */ AMB_check_base_class_offset(lv, (S7819C4_nt*)(S7819C8*), ABISELECT(64,28), "S7819C1");
    check_base_class_offset(lv, (S7819C8*), ABISELECT(16,4), "S7819C1");
    /*is_ambiguous_... S7819C10::S7819C6 */ AMB_check_base_class_offset(lv, (S7819C6*)(S7819C10*), ABISELECT(280,124), "S7819C1");
    check_base_class_offset(lv, (S7819C9_nt*)(S7819C10*), ABISELECT(72,32), "S7819C1");
    check_base_class_offset(lv, (S7819C10*), ABISELECT(72,32), "S7819C1");
    check_base_class_offset(lv, (S7819C11*), ABISELECT(88,40), "S7819C1");
    /*is_ambiguous_... S7819C1::S7819C9_nt */ AMB_check_base_class_offset(lv, (S7819C9_nt*), ABISELECT(96,44), "S7819C1");
    test_class_info(&lv, &cd_S7819C1);
    dp->~S7819C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7819C1(Test_S7819C1, "S7819C1", ABISELECT(304,140));

#else // __cplusplus

extern void _ZN7S7819C1C1Ev();
extern void _ZN7S7819C1D1Ev();
Name_Map name_map_S7819C1[] = {
  NSPAIR(_ZN7S7819C1C1Ev),
  NSPAIR(_ZN7S7819C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7819C4_nt;
extern VTBL_ENTRY _ZTI10S7819C4_nt[];
extern  VTBL_ENTRY _ZTV10S7819C4_nt[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
extern Class_Descriptor cd_S7819C7;
extern VTBL_ENTRY _ZTI7S7819C7[];
extern  VTBL_ENTRY _ZTV7S7819C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C7[];
extern Class_Descriptor cd_S7819C6;
extern VTBL_ENTRY _ZTI7S7819C6[];
extern  VTBL_ENTRY _ZTV7S7819C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C6[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
extern Class_Descriptor cd_S7819C7;
extern VTBL_ENTRY _ZTI7S7819C7[];
extern  VTBL_ENTRY _ZTV7S7819C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C7[];
extern Class_Descriptor cd_S7819C3;
extern VTBL_ENTRY _ZTI7S7819C3[];
extern  VTBL_ENTRY _ZTV7S7819C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C3[];
extern Class_Descriptor cd_S7819C2;
extern VTBL_ENTRY _ZTI7S7819C2[];
extern  VTBL_ENTRY _ZTV7S7819C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C2[];
extern Class_Descriptor cd_S7819C5;
extern VTBL_ENTRY _ZTI7S7819C5[];
extern  VTBL_ENTRY _ZTV7S7819C5[];
extern Class_Descriptor cd_S7819C7;
extern VTBL_ENTRY _ZTI7S7819C7[];
extern  VTBL_ENTRY _ZTV7S7819C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C7[];
extern Class_Descriptor cd_S7819C9_nt;
extern VTBL_ENTRY _ZTI10S7819C9_nt[];
extern  VTBL_ENTRY _ZTV10S7819C9_nt[];
extern Class_Descriptor cd_S7819C4_nt;
extern VTBL_ENTRY _ZTI10S7819C4_nt[];
extern  VTBL_ENTRY _ZTV10S7819C4_nt[];
extern Class_Descriptor cd_S7819C8;
extern VTBL_ENTRY _ZTI7S7819C8[];
extern  VTBL_ENTRY _ZTV7S7819C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C8[];
extern Class_Descriptor cd_S7819C6;
extern VTBL_ENTRY _ZTI7S7819C6[];
extern  VTBL_ENTRY _ZTV7S7819C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C6[];
extern Class_Descriptor cd_S7819C9_nt;
extern VTBL_ENTRY _ZTI10S7819C9_nt[];
extern  VTBL_ENTRY _ZTV10S7819C9_nt[];
extern Class_Descriptor cd_S7819C10;
extern VTBL_ENTRY _ZTI8S7819C10[];
extern  VTBL_ENTRY _ZTV8S7819C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7819C10[];
extern Class_Descriptor cd_S7819C11;
extern VTBL_ENTRY _ZTI8S7819C11[];
extern  VTBL_ENTRY _ZTV8S7819C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7819C11[];
extern Class_Descriptor cd_S7819C9_nt;
extern VTBL_ENTRY _ZTI10S7819C9_nt[];
extern  VTBL_ENTRY _ZTV10S7819C9_nt[];
static Base_Class bases_S7819C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7819C4_nt,    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
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7819C5,    ABISELECT(192,84), //bcp->offset
    131, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7819C5,    ABISELECT(240,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_S7819C7,    ABISELECT(240,104), //bcp->offset
    147, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7819C6,    ABISELECT(112,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7819C5,    ABISELECT(144,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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7819C7,    ABISELECT(144,64), //bcp->offset
    116, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7819C3,    ABISELECT(112,48), //bcp->offset
    72, //bcp->virtual_function_table_offset
    29, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7819C2,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7819C5,    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
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7819C7,    ABISELECT(16,4), //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
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7819C9_nt,    ABISELECT(56,24), //bcp->offset
    46, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S7819C4_nt,    ABISELECT(64,28), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7819C8,    ABISELECT(16,4), //bcp->offset
    26, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7819C6,    ABISELECT(280,124), //bcp->offset
    173, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7819C9_nt,    ABISELECT(72,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
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7819C10,    ABISELECT(72,32), //bcp->offset
    55, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7819C11,    ABISELECT(88,40), //bcp->offset
    65, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7819C9_nt,    ABISELECT(96,44), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7819C1[];
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C23v32Ev();
extern void _ZN7S7819C1D1Ev();
extern void _ZN7S7819C1D0Ev();
extern void _ZN7S7819C12v1Ev();
extern void _ZN7S7819C12v2Ev();
extern void _ZN7S7819C12v3Ev();
extern void _ZN7S7819C12v4Ev();
extern void _ZN7S7819C12v5Ev();
extern void _ZN7S7819C12v6Ev();
extern void _ZN7S7819C12v7Ev();
extern void _ZN7S7819C12v8Ev();
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZThn16_N7S7819C1D1Ev,_ZThn4_N7S7819C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S7819C1D0Ev,_ZThn4_N7S7819C1D0Ev)();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
extern void _ZN7S7819C83v34Ev();
extern void _ZN7S7819C83v35Ev();
extern void _ZN10S7819C9_nt3v33Ev();
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN10S7819C9_nt3v33Ev();
extern void ABISELECT(_ZThn72_N7S7819C1D1Ev,_ZThn32_N7S7819C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S7819C1D0Ev,_ZThn32_N7S7819C1D0Ev)();
extern void _ZN8S7819C113v36Ev();
extern void _ZN10S7819C9_nt3v33Ev();
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void ABISELECT(_ZTv0_n104_N7S7819C1D1Ev,_ZTv0_n52_N7S7819C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S7819C1D1Ev,_ZThn48_N7S7819C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7819C1D0Ev,_ZTv0_n52_N7S7819C1D0Ev)();
extern void ABISELECT(_ZThn112_N7S7819C1D0Ev,_ZThn48_N7S7819C1D0Ev)() __attribute__((weak));
extern void _ZN7S7819C33v26Ev();
extern void _ZN7S7819C33v27Ev();
extern void _ZN7S7819C33v28Ev();
extern void _ZN7S7819C33v29Ev();
extern void _ZN7S7819C33v30Ev();
extern void _ZN7S7819C33v31Ev();
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTvn32_n104_N7S7819C1D1Ev,_ZTvn16_n52_N7S7819C1D1Ev)();
extern void ABISELECT(_ZTvn32_n104_N7S7819C1D0Ev,_ZTvn16_n52_N7S7819C1D0Ev)();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N7S7819C1D1Ev,_ZTv0_n44_N7S7819C1D1Ev)();
extern void ABISELECT(_ZThn240_N7S7819C1D1Ev,_ZThn104_N7S7819C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7819C1D0Ev,_ZTv0_n44_N7S7819C1D0Ev)();
extern void ABISELECT(_ZThn240_N7S7819C1D0Ev,_ZThn104_N7S7819C1D0Ev)() __attribute__((weak));
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void ABISELECT(_ZTv0_n96_N7S7819C1D1Ev,_ZTv0_n48_N7S7819C1D1Ev)();
extern void ABISELECT(_ZThn280_N7S7819C1D1Ev,_ZThn124_N7S7819C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7819C1D0Ev,_ZTv0_n48_N7S7819C1D0Ev)();
extern void ABISELECT(_ZThn280_N7S7819C1D0Ev,_ZThn124_N7S7819C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7819C1[] = {
  ABISELECT(280,124),
  ABISELECT(240,104),
  ABISELECT(192,84),
  0,
  ABISELECT(112,48),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C1[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7819C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7819C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7819C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7819C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7819C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7819C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7819C12v7Ev,
  (VTBL_ENTRY)&_ZN7S7819C12v8Ev,
  ABISELECT(224,100),
  ABISELECT(96,44),
  ABISELECT(176,80),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7819C1[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7819C1D1Ev,_ZThn4_N7S7819C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7819C1D0Ev,_ZThn4_N7S7819C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7819C83v34Ev,
  (VTBL_ENTRY)&_ZN7S7819C83v35Ev,
  ABISELECT(-56,-24),
  (VTBL_ENTRY)&(_ZTI7S7819C1[0]),
  (VTBL_ENTRY)&_ZN10S7819C9_nt3v33Ev,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI7S7819C1[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  ABISELECT(120,52),
  ABISELECT(40,16),
  ABISELECT(-72,-32),
  ABISELECT(168,72),
  ABISELECT(208,92),
  ABISELECT(-72,-32),
  (VTBL_ENTRY)&(_ZTI7S7819C1[0]),
  (VTBL_ENTRY)&_ZN10S7819C9_nt3v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S7819C1D1Ev,_ZThn32_N7S7819C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S7819C1D0Ev,_ZThn32_N7S7819C1D0Ev),
  ABISELECT(104,44),
  ABISELECT(-88,-40),
  (VTBL_ENTRY)&(_ZTI7S7819C1[0]),
  (VTBL_ENTRY)&_ZN8S7819C113v36Ev,
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI7S7819C1[0]),
  (VTBL_ENTRY)&_ZN10S7819C9_nt3v33Ev,
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  0,
  0,
  0,
  ABISELECT(80,36),
  ABISELECT(-112,-48),
  ABISELECT(128,56),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  (VTBL_ENTRY)&(_ZTI7S7819C1[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7819C1D1Ev,_ZTv0_n52_N7S7819C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7819C1D0Ev,_ZTv0_n52_N7S7819C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v28Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v29Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v30Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v31Ev,
  ABISELECT(-144,-64),
  ABISELECT(-144,-64),
  (VTBL_ENTRY)&(_ZTI7S7819C1[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N7S7819C1D1Ev,_ZTvn16_n52_N7S7819C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N7S7819C1D0Ev,_ZTvn16_n52_N7S7819C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-84),
  (VTBL_ENTRY)&(_ZTI7S7819C1[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  0,
  0,
  0,
  ABISELECT(-240,-104),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-104),
  ABISELECT(-240,-104),
  (VTBL_ENTRY)&(_ZTI7S7819C1[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C1D1Ev,_ZTv0_n44_N7S7819C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C1D0Ev,_ZTv0_n44_N7S7819C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
  ABISELECT(-280,-124),
  0,
  0,
  0,
  ABISELECT(-280,-124),
  ABISELECT(-40,-20),
  ABISELECT(-280,-124),
  ABISELECT(-280,-124),
  ABISELECT(-280,-124),
  ABISELECT(-280,-124),
  ABISELECT(-280,-124),
  (VTBL_ENTRY)&(_ZTI7S7819C1[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7819C1D1Ev,_ZTv0_n48_N7S7819C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7819C1D0Ev,_ZTv0_n48_N7S7819C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7819C1[];
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C23v32Ev();
extern void _ZN7S7819C2D1Ev();
extern void _ZN7S7819C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C2__7S7819C1[] = {
  ABISELECT(240,104),
  ABISELECT(192,84),
  0,
  ABISELECT(112,48),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C2[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7819C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C2D0Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void ABISELECT(_ZTv0_n104_N7S7819C2D1Ev,_ZTv0_n52_N7S7819C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S7819C2D1Ev,_ZThn48_N7S7819C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7819C2D0Ev,_ZTv0_n52_N7S7819C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S7819C2D0Ev,_ZThn48_N7S7819C2D0Ev)() __attribute__((weak));
extern void _ZN7S7819C33v26Ev();
extern void _ZN7S7819C33v27Ev();
extern void _ZN7S7819C33v28Ev();
extern void _ZN7S7819C33v29Ev();
extern void _ZN7S7819C33v30Ev();
extern void _ZN7S7819C33v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C3__7S7819C2__7S7819C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  0,
  0,
  0,
  ABISELECT(80,36),
  ABISELECT(-112,-48),
  ABISELECT(128,56),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  (VTBL_ENTRY)&(_ZTI7S7819C2[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7819C2D1Ev,_ZTv0_n52_N7S7819C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7819C2D0Ev,_ZTv0_n52_N7S7819C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v28Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v29Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v30Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v31Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C5__7S7819C2__7S7819C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-84),
  (VTBL_ENTRY)&(_ZTI7S7819C2[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N7S7819C2D1Ev,_ZTv0_n44_N7S7819C2D1Ev)();
extern void ABISELECT(_ZThn240_N7S7819C2D1Ev,_ZThn104_N7S7819C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7819C2D0Ev,_ZTv0_n44_N7S7819C2D0Ev)();
extern void ABISELECT(_ZThn240_N7S7819C2D0Ev,_ZThn104_N7S7819C2D0Ev)() __attribute__((weak));
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__7S7819C2__7S7819C1[] = {
  0,
  0,
  0,
  ABISELECT(-240,-104),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-104),
  ABISELECT(-240,-104),
  (VTBL_ENTRY)&(_ZTI7S7819C2[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C2D1Ev,_ZTv0_n44_N7S7819C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C2D0Ev,_ZTv0_n44_N7S7819C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTvn32_n104_N7S7819C2D1Ev,_ZTvn16_n52_N7S7819C2D1Ev)();
extern void ABISELECT(_ZTvn32_n104_N7S7819C2D0Ev,_ZTvn16_n52_N7S7819C2D0Ev)();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C77S7819C3__A1__7S7819C2__7S7819C1[] = {
  ABISELECT(-144,-64),
  ABISELECT(-144,-64),
  (VTBL_ENTRY)&(_ZTI7S7819C2[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N7S7819C2D1Ev,_ZTvn16_n52_N7S7819C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N7S7819C2D0Ev,_ZTvn16_n52_N7S7819C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C8D1Ev();
extern void _ZN7S7819C8D0Ev();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
extern void _ZN7S7819C83v34Ev();
extern void _ZN7S7819C83v35Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C8__7S7819C1[] = {
  ABISELECT(224,100),
  ABISELECT(96,44),
  ABISELECT(176,80),
  ABISELECT(-16,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C8[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7819C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7819C83v34Ev,
  (VTBL_ENTRY)&_ZN7S7819C83v35Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C7D1Ev();
extern void _ZN7S7819C7D0Ev();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C77S7819C8__A2__7S7819C1[] = {
  ABISELECT(-16,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C77S7819C8__A2__7S7819C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C8__7S7819C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI7S7819C8[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C5__A1__7S7819C8__7S7819C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-80),
  (VTBL_ENTRY)&(_ZTI7S7819C8[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void ABISELECT(_ZTv0_n104_N7S7819C8D1Ev,_ZTv0_n52_N7S7819C8D1Ev)();
extern void ABISELECT(_ZThn96_N7S7819C8D1Ev,_ZThn44_N7S7819C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7819C8D0Ev,_ZTv0_n52_N7S7819C8D0Ev)();
extern void ABISELECT(_ZThn96_N7S7819C8D0Ev,_ZThn44_N7S7819C8D0Ev)() __attribute__((weak));
extern void _ZN7S7819C33v26Ev();
extern void _ZN7S7819C33v27Ev();
extern void _ZN7S7819C33v28Ev();
extern void _ZN7S7819C33v29Ev();
extern void _ZN7S7819C33v30Ev();
extern void _ZN7S7819C33v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C3__7S7819C8__7S7819C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-44),
  0,
  0,
  0,
  ABISELECT(80,36),
  ABISELECT(-112,-48),
  ABISELECT(128,56),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI7S7819C8[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7819C8D1Ev,_ZTv0_n52_N7S7819C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7819C8D0Ev,_ZTv0_n52_N7S7819C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v28Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v29Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v30Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v31Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N7S7819C8D1Ev,_ZTv0_n44_N7S7819C8D1Ev)();
extern void ABISELECT(_ZThn224_N7S7819C8D1Ev,_ZThn100_N7S7819C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7819C8D0Ev,_ZTv0_n44_N7S7819C8D0Ev)();
extern void ABISELECT(_ZThn224_N7S7819C8D0Ev,_ZThn100_N7S7819C8D0Ev)() __attribute__((weak));
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__A1__7S7819C8__7S7819C1[] = {
  0,
  0,
  0,
  ABISELECT(-224,-100),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-104),
  ABISELECT(-224,-100),
  (VTBL_ENTRY)&(_ZTI7S7819C8[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C8D1Ev,_ZTv0_n44_N7S7819C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C8D0Ev,_ZTv0_n44_N7S7819C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTvn32_n104_N7S7819C8D1Ev,_ZTvn16_n52_N7S7819C8D1Ev)();
extern void ABISELECT(_ZTvn32_n104_N7S7819C8D0Ev,_ZTvn16_n52_N7S7819C8D0Ev)();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C77S7819C3__A2__7S7819C8__7S7819C1[] = {
  ABISELECT(-144,-64),
  ABISELECT(-128,-60),
  (VTBL_ENTRY)&(_ZTI7S7819C8[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N7S7819C8D1Ev,_ZTvn16_n52_N7S7819C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N7S7819C8D0Ev,_ZTvn16_n52_N7S7819C8D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C9_nt3v33Ev();
extern void _ZN8S7819C10D1Ev();
extern void _ZN8S7819C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7819C10__7S7819C1[] = {
  ABISELECT(120,52),
  ABISELECT(40,16),
  ABISELECT(-72,-32),
  ABISELECT(168,72),
  ABISELECT(208,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S7819C10[0]),
  (VTBL_ENTRY)&_ZN10S7819C9_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S7819C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7819C10D0Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void ABISELECT(_ZTv0_n96_N8S7819C10D1Ev,_ZTv0_n48_N8S7819C10D1Ev)();
extern void ABISELECT(_ZThn208_N8S7819C10D1Ev,_ZThn92_N8S7819C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S7819C10D0Ev,_ZTv0_n48_N8S7819C10D0Ev)();
extern void ABISELECT(_ZThn208_N8S7819C10D0Ev,_ZThn92_N8S7819C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7819C6__8S7819C10__7S7819C1[] = {
  ABISELECT(-208,-92),
  0,
  0,
  0,
  ABISELECT(-280,-124),
  ABISELECT(-40,-20),
  ABISELECT(-280,-124),
  ABISELECT(-280,-124),
  ABISELECT(-280,-124),
  ABISELECT(-280,-124),
  ABISELECT(-208,-92),
  (VTBL_ENTRY)&(_ZTI8S7819C10[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7819C10D1Ev,_ZTv0_n48_N8S7819C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S7819C10D0Ev,_ZTv0_n48_N8S7819C10D0Ev),
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N8S7819C10D1Ev,_ZTv0_n44_N8S7819C10D1Ev)();
extern void ABISELECT(_ZThn168_N8S7819C10D1Ev,_ZThn72_N8S7819C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S7819C10D0Ev,_ZTv0_n44_N8S7819C10D0Ev)();
extern void ABISELECT(_ZThn168_N8S7819C10D0Ev,_ZThn72_N8S7819C10D0Ev)() __attribute__((weak));
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__8S7819C10__7S7819C1[] = {
  0,
  0,
  0,
  ABISELECT(-168,-72),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-104),
  ABISELECT(-168,-72),
  (VTBL_ENTRY)&(_ZTI8S7819C10[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S7819C10D1Ev,_ZTv0_n44_N8S7819C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S7819C10D0Ev,_ZTv0_n44_N8S7819C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__8S7819C10__7S7819C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(72,32),
  (VTBL_ENTRY)&(_ZTI8S7819C10[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void ABISELECT(_ZTv0_n104_N8S7819C10D1Ev,_ZTv0_n52_N8S7819C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S7819C10D1Ev,_ZThn16_N8S7819C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S7819C10D0Ev,_ZTv0_n52_N8S7819C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S7819C10D0Ev,_ZThn16_N8S7819C10D0Ev)() __attribute__((weak));
extern void _ZN7S7819C33v26Ev();
extern void _ZN7S7819C33v27Ev();
extern void _ZN7S7819C33v28Ev();
extern void _ZN7S7819C33v29Ev();
extern void _ZN7S7819C33v30Ev();
extern void _ZN7S7819C33v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C3__8S7819C10__7S7819C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-16),
  0,
  0,
  0,
  ABISELECT(80,36),
  ABISELECT(-112,-48),
  ABISELECT(128,56),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  ABISELECT(-40,-16),
  (VTBL_ENTRY)&(_ZTI8S7819C10[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S7819C10D1Ev,_ZTv0_n52_N8S7819C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S7819C10D0Ev,_ZTv0_n52_N8S7819C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v28Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v29Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v30Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v31Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C5__A1__8S7819C10__7S7819C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-52),
  (VTBL_ENTRY)&(_ZTI8S7819C10[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTvn32_n104_N8S7819C10D1Ev,_ZTvn16_n52_N8S7819C10D1Ev)();
extern void ABISELECT(_ZTvn32_n104_N8S7819C10D0Ev,_ZTvn16_n52_N8S7819C10D0Ev)();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C77S7819C3__A1__8S7819C10__7S7819C1[] = {
  ABISELECT(-144,-64),
  ABISELECT(-72,-32),
  (VTBL_ENTRY)&(_ZTI8S7819C10[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N8S7819C10D1Ev,_ZTvn16_n52_N8S7819C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N8S7819C10D0Ev,_ZTvn16_n52_N8S7819C10D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN8S7819C113v36Ev();
static  VTBL_ENTRY _tg__ZTV8S7819C11__7S7819C1[] = {
  ABISELECT(104,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S7819C11[0]),
  (VTBL_ENTRY)&_ZN8S7819C113v36Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C5__8S7819C11__7S7819C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-44),
  (VTBL_ENTRY)&(_ZTI8S7819C11[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void _ZN7S7819C3D1Ev();
extern void _ZN7S7819C3D0Ev();
extern void _ZN7S7819C33v26Ev();
extern void _ZN7S7819C33v27Ev();
extern void _ZN7S7819C33v28Ev();
extern void _ZN7S7819C33v29Ev();
extern void _ZN7S7819C33v30Ev();
extern void _ZN7S7819C33v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C3__7S7819C1[] = {
  ABISELECT(80,36),
  ABISELECT(-112,-48),
  ABISELECT(128,56),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7819C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v27Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v28Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v29Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v30Ev,
  (VTBL_ENTRY)&_ZN7S7819C33v31Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void _ZN7S7819C6D1Ev();
extern void _ZN7S7819C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C67S7819C3__7S7819C1[] = {
  ABISELECT(-112,-48),
  ABISELECT(128,56),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  ABISELECT(-112,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7819C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C6D0Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev)();
extern void ABISELECT(_ZThn128_N7S7819C6D1Ev,_ZThn56_N7S7819C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev)();
extern void ABISELECT(_ZThn128_N7S7819C6D0Ev,_ZThn56_N7S7819C6D0Ev)() __attribute__((weak));
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__7S7819C67S7819C3__7S7819C1[] = {
  0,
  0,
  0,
  ABISELECT(-128,-56),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-104),
  ABISELECT(-128,-56),
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C67S7819C3__7S7819C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(112,48),
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C7D1Ev();
extern void _ZN7S7819C7D0Ev();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C77S7819C3__A1__7S7819C1[] = {
  ABISELECT(-144,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C77S7819C3__A1__7S7819C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(144,64),
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C3__7S7819C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(112,48),
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C5__7S7819C3__7S7819C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N7S7819C3D1Ev,_ZTv0_n44_N7S7819C3D1Ev)();
extern void ABISELECT(_ZThn128_N7S7819C3D1Ev,_ZThn56_N7S7819C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7819C3D0Ev,_ZTv0_n44_N7S7819C3D0Ev)();
extern void ABISELECT(_ZThn128_N7S7819C3D0Ev,_ZThn56_N7S7819C3D0Ev)() __attribute__((weak));
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__7S7819C3__7S7819C1[] = {
  0,
  0,
  0,
  ABISELECT(-128,-56),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-104),
  ABISELECT(-128,-56),
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C3D1Ev,_ZTv0_n44_N7S7819C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C3D0Ev,_ZTv0_n44_N7S7819C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZThn32_N7S7819C3D1Ev,_ZThn16_N7S7819C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S7819C3D0Ev,_ZThn16_N7S7819C3D0Ev)();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__A__7S7819C3__7S7819C1[] = {
  ABISELECT(-144,-64),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7819C3[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7819C3D1Ev,_ZThn16_N7S7819C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7819C3D0Ev,_ZThn16_N7S7819C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void _ZN7S7819C7D1Ev();
extern void _ZN7S7819C7D0Ev();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__7S7819C1[] = {
  ABISELECT(-240,-104),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C7__7S7819C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(240,104),
  (VTBL_ENTRY)&(_ZTI7S7819C7[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
extern void _ZN7S7819C63v23Ev();
extern void _ZN7S7819C63v24Ev();
extern void _ZN7S7819C63v25Ev();
extern void _ZN7S7819C6D1Ev();
extern void _ZN7S7819C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C6__A1__7S7819C1[] = {
  ABISELECT(-280,-124),
  ABISELECT(-40,-20),
  ABISELECT(-280,-124),
  ABISELECT(-280,-124),
  ABISELECT(-280,-124),
  ABISELECT(-280,-124),
  0,
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7819C63v25Ev,
  (VTBL_ENTRY)&_ZN7S7819C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7819C6D0Ev,
};
extern void _ZN7S7819C53v13Ev();
extern void _ZN7S7819C53v14Ev();
extern void _ZN7S7819C53v15Ev();
extern void _ZN7S7819C53v16Ev();
extern void _ZN7S7819C53v17Ev();
extern void _ZN7S7819C53v18Ev();
extern void _ZN7S7819C53v19Ev();
extern void ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev)();
extern void ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev)();
extern void _ZN7S7819C73v20Ev();
extern void _ZN7S7819C73v21Ev();
extern void _ZN7S7819C73v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7819C7__7S7819C6__A1__7S7819C1[] = {
  0,
  0,
  0,
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-104),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN7S7819C53v13Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v14Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7819C53v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7819C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7819C73v22Ev,
};
extern void _ZN10S7819C4_nt2v9Ev();
extern void _ZN10S7819C4_nt3v10Ev();
extern void _ZN10S7819C4_nt3v11Ev();
extern void _ZN10S7819C4_nt3v12Ev();
static  VTBL_ENTRY _tg__ZTV10S7819C4_nt__7S7819C6__A1__7S7819C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(280,124),
  (VTBL_ENTRY)&(_ZTI7S7819C6[0]),
  (VTBL_ENTRY)&_ZN10S7819C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7819C4_nt3v12Ev,
};
static  VTT_ENTRY vtt_S7819C1[] = {
  {&(_ZTV7S7819C1[11]),  11,194},
  {&(_tg__ZTV7S7819C2__7S7819C1[10]),  10,17},
  {&(_tg__ZTV7S7819C3__7S7819C2__7S7819C1[29]),  29,44},
  {&(_tg__ZTV7S7819C2__7S7819C1[10]),  10,17},
  {&(_tg__ZTV7S7819C5__7S7819C2__7S7819C1[9]),  9,16},
  {&(_tg__ZTV7S7819C7__7S7819C2__7S7819C1[14]),  14,26},
  {&(_tg__ZTV7S7819C77S7819C3__A1__7S7819C2__7S7819C1[3]),  3,15},
  {&(_tg__ZTV7S7819C8__7S7819C1[6]),  6,20},
  {&(_tg__ZTV7S7819C77S7819C8__A2__7S7819C1[3]),  3,15},
  {&(_tg__ZTV10S7819C4_nt__7S7819C77S7819C8__A2__7S7819C1[6]),  6,10},
  {&(_tg__ZTV10S7819C4_nt__7S7819C8__7S7819C1[6]),  6,10},
  {&(_tg__ZTV7S7819C5__A1__7S7819C8__7S7819C1[9]),  9,16},
  {&(_tg__ZTV7S7819C3__7S7819C8__7S7819C1[29]),  29,44},
  {&(_tg__ZTV7S7819C7__A1__7S7819C8__7S7819C1[14]),  14,26},
  {&(_tg__ZTV7S7819C77S7819C3__A2__7S7819C8__7S7819C1[3]),  3,15},
  {&(_tg__ZTV8S7819C10__7S7819C1[7]),  7,10},
  {&(_tg__ZTV7S7819C6__8S7819C10__7S7819C1[12]),  12,21},
  {&(_tg__ZTV7S7819C7__8S7819C10__7S7819C1[14]),  14,26},
  {&(_tg__ZTV10S7819C4_nt__8S7819C10__7S7819C1[6]),  6,10},
  {&(_tg__ZTV7S7819C3__8S7819C10__7S7819C1[29]),  29,44},
  {&(_tg__ZTV7S7819C5__A1__8S7819C10__7S7819C1[9]),  9,16},
  {&(_tg__ZTV7S7819C77S7819C3__A1__8S7819C10__7S7819C1[3]),  3,15},
  {&(_tg__ZTV8S7819C11__7S7819C1[3]),  3,4},
  {&(_tg__ZTV7S7819C5__8S7819C11__7S7819C1[9]),  9,16},
  {&(_ZTV7S7819C1[101]),  101,194},
  {&(_ZTV7S7819C1[11]),  11,194},
  {&(_ZTV7S7819C1[140]),  140,194},
  {&(_ZTV7S7819C1[161]),  161,194},
  {&(_ZTV7S7819C1[119]),  119,194},
  {&(_ZTV7S7819C1[32]),  32,194},
  {&(_ZTV7S7819C1[62]),  62,194},
  {&(_ZTV7S7819C1[185]),  185,194},
  {&(_ZTV7S7819C1[68]),  68,194},
  {&(_tg__ZTV7S7819C3__7S7819C1[9]),  9,24},
  {&(_tg__ZTV7S7819C67S7819C3__7S7819C1[8]),  8,17},
  {&(_tg__ZTV7S7819C7__7S7819C67S7819C3__7S7819C1[14]),  14,26},
  {&(_tg__ZTV10S7819C4_nt__7S7819C67S7819C3__7S7819C1[6]),  6,10},
  {&(_tg__ZTV7S7819C77S7819C3__A1__7S7819C1[3]),  3,15},
  {&(_tg__ZTV10S7819C4_nt__7S7819C77S7819C3__A1__7S7819C1[6]),  6,10},
  {&(_tg__ZTV10S7819C4_nt__7S7819C3__7S7819C1[6]),  6,10},
  {&(_tg__ZTV7S7819C5__7S7819C3__7S7819C1[9]),  9,16},
  {&(_tg__ZTV7S7819C7__7S7819C3__7S7819C1[14]),  14,26},
  {&(_tg__ZTV7S7819C7__A__7S7819C3__7S7819C1[3]),  3,15},
  {&(_tg__ZTV7S7819C7__7S7819C1[3]),  3,15},
  {&(_tg__ZTV10S7819C4_nt__7S7819C7__7S7819C1[6]),  6,10},
  {&(_tg__ZTV7S7819C6__A1__7S7819C1[8]),  8,17},
  {&(_tg__ZTV7S7819C7__7S7819C6__A1__7S7819C1[14]),  14,26},
  {&(_tg__ZTV10S7819C4_nt__7S7819C6__A1__7S7819C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S7819C1[];
extern  VTBL_ENTRY _ZTV7S7819C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7819C1[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C3D0Ev,_ZTv0_n44_N7S7819C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7819C3D0Ev,_ZThn56_N7S7819C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C3D1Ev,_ZTv0_n44_N7S7819C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7819C3D1Ev,_ZThn56_N7S7819C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C6D0Ev,_ZTv0_n44_N7S7819C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7819C6D0Ev,_ZThn56_N7S7819C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C6D1Ev,_ZTv0_n44_N7S7819C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7819C6D1Ev,_ZThn56_N7S7819C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S7819C10D0Ev,_ZTv0_n52_N8S7819C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7819C10D0Ev,_ZThn16_N8S7819C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S7819C10D1Ev,_ZTv0_n52_N8S7819C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7819C10D1Ev,_ZThn16_N8S7819C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S7819C10D0Ev,_ZTv0_n44_N8S7819C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S7819C10D0Ev,_ZThn72_N8S7819C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S7819C10D1Ev,_ZTv0_n44_N8S7819C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N8S7819C10D1Ev,_ZThn72_N8S7819C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7819C10D0Ev,_ZTv0_n48_N8S7819C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S7819C10D0Ev,_ZThn92_N8S7819C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S7819C10D1Ev,_ZTv0_n48_N8S7819C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S7819C10D1Ev,_ZThn92_N8S7819C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C8D0Ev,_ZTv0_n44_N7S7819C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7819C8D0Ev,_ZThn100_N7S7819C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C8D1Ev,_ZTv0_n44_N7S7819C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7819C8D1Ev,_ZThn100_N7S7819C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7819C8D0Ev,_ZTv0_n52_N7S7819C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7819C8D0Ev,_ZThn44_N7S7819C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7819C8D1Ev,_ZTv0_n52_N7S7819C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7819C8D1Ev,_ZThn44_N7S7819C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C2D0Ev,_ZTv0_n44_N7S7819C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7819C2D0Ev,_ZThn104_N7S7819C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C2D1Ev,_ZTv0_n44_N7S7819C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7819C2D1Ev,_ZThn104_N7S7819C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7819C2D0Ev,_ZTv0_n52_N7S7819C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7819C2D0Ev,_ZThn48_N7S7819C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7819C2D1Ev,_ZTv0_n52_N7S7819C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7819C2D1Ev,_ZThn48_N7S7819C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7819C1D0Ev,_ZTv0_n48_N7S7819C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7819C1D0Ev,_ZThn124_N7S7819C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7819C1D1Ev,_ZTv0_n48_N7S7819C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7819C1D1Ev,_ZThn124_N7S7819C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C1D0Ev,_ZTv0_n44_N7S7819C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7819C1D0Ev,_ZThn104_N7S7819C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7819C1D1Ev,_ZTv0_n44_N7S7819C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7819C1D1Ev,_ZThn104_N7S7819C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7819C1D0Ev,_ZTv0_n52_N7S7819C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7819C1D0Ev,_ZThn48_N7S7819C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7819C1D1Ev,_ZTv0_n52_N7S7819C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7819C1D1Ev,_ZThn48_N7S7819C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7819C1 = {  "S7819C1", // class name
  bases_S7819C1, 19,
  &(vtc_S7819C1[0]), // expected_vtbl_contents
  &(vtt_S7819C1[0]), // expected_vtt_contents
  ABISELECT(304,140), // object size
  NSPAIRA(_ZTI7S7819C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7819C1),194, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7819C1),48, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18876C3  {
  virtual void  v9(); // _ZN8S18876C32v9Ev
  virtual void  v10(); // _ZN8S18876C33v10Ev
  virtual void  v11(); // _ZN8S18876C33v11Ev
  virtual void  v12(); // _ZN8S18876C33v12Ev
  ~S18876C3(); // tgen
  S18876C3(); // tgen
};
//SIG(-1 S18876C3) C1{ v1 v2 v3 v4}


void  S18876C3 ::v9(){vfunc_called(this, "_ZN8S18876C32v9Ev");}
void  S18876C3 ::v10(){vfunc_called(this, "_ZN8S18876C33v10Ev");}
void  S18876C3 ::v11(){vfunc_called(this, "_ZN8S18876C33v11Ev");}
void  S18876C3 ::v12(){vfunc_called(this, "_ZN8S18876C33v12Ev");}
S18876C3 ::~S18876C3(){ note_dtor("S18876C3", this);} // tgen
S18876C3 ::S18876C3(){ note_ctor("S18876C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S18876C3C1Ev();
extern void _ZN8S18876C3D1Ev();
Name_Map name_map_S18876C3[] = {
  NSPAIR(_ZN8S18876C3C1Ev),
  NSPAIR(_ZN8S18876C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18876C3[];
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
static  VTBL_ENTRY vtc_S18876C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C3[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
};
extern VTBL_ENTRY _ZTI8S18876C3[];
extern  VTBL_ENTRY _ZTV8S18876C3[];
Class_Descriptor cd_S18876C3 = {  "S18876C3", // class name
  0,0,//no base classes
  &(vtc_S18876C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S18876C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18876C3),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  S18876C4  {
  long double s18876c4f0;
  void *s18876c4f1;
  virtual void  v13(); // _ZN8S18876C43v13Ev
  virtual void  v14(); // _ZN8S18876C43v14Ev
  virtual void  v15(); // _ZN8S18876C43v15Ev
  virtual void  v16(); // _ZN8S18876C43v16Ev
  virtual void  v17(); // _ZN8S18876C43v17Ev
  virtual void  v18(); // _ZN8S18876C43v18Ev
  virtual void  v19(); // _ZN8S18876C43v19Ev
  ~S18876C4(); // tgen
  S18876C4(); // tgen
};
//SIG(-1 S18876C4) C1{ v1 v2 v3 v4 v5 v6 v7 FD Fp}


void  S18876C4 ::v13(){vfunc_called(this, "_ZN8S18876C43v13Ev");}
void  S18876C4 ::v14(){vfunc_called(this, "_ZN8S18876C43v14Ev");}
void  S18876C4 ::v15(){vfunc_called(this, "_ZN8S18876C43v15Ev");}
void  S18876C4 ::v16(){vfunc_called(this, "_ZN8S18876C43v16Ev");}
void  S18876C4 ::v17(){vfunc_called(this, "_ZN8S18876C43v17Ev");}
void  S18876C4 ::v18(){vfunc_called(this, "_ZN8S18876C43v18Ev");}
void  S18876C4 ::v19(){vfunc_called(this, "_ZN8S18876C43v19Ev");}
S18876C4 ::~S18876C4(){ note_dtor("S18876C4", this);} // tgen
S18876C4 ::S18876C4(){ note_ctor("S18876C4", this);} // tgen

static void Test_S18876C4()
{
  extern Class_Descriptor cd_S18876C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,6)];
    init_test(&cd_S18876C4, buf);
    S18876C4 *dp, &lv = *(dp=new (buf) S18876C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,20), "sizeof(S18876C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18876C4)");
    check_field_offset(lv, s18876c4f0, ABISELECT(16,4), "S18876C4.s18876c4f0");
    check_field_offset(lv, s18876c4f1, ABISELECT(32,16), "S18876C4.s18876c4f1");
    test_class_info(&lv, &cd_S18876C4);
    dp->~S18876C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18876C4(Test_S18876C4, "S18876C4", ABISELECT(48,20));

#else // __cplusplus

extern void _ZN8S18876C4C1Ev();
extern void _ZN8S18876C4D1Ev();
Name_Map name_map_S18876C4[] = {
  NSPAIR(_ZN8S18876C4C1Ev),
  NSPAIR(_ZN8S18876C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18876C4[];
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
static  VTBL_ENTRY vtc_S18876C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C4[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
};
extern VTBL_ENTRY _ZTI8S18876C4[];
extern  VTBL_ENTRY _ZTV8S18876C4[];
Class_Descriptor cd_S18876C4 = {  "S18876C4", // class name
  0,0,//no base classes
  &(vtc_S18876C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,20), // object size
  NSPAIRA(_ZTI8S18876C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18876C4),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  S18876C2  : virtual S18876C3 , S18876C4 {
  virtual  ~S18876C2(); // _ZN8S18876C2D2Ev
  virtual void  v6(); // _ZN8S18876C22v6Ev
  virtual void  v7(); // _ZN8S18876C22v7Ev
  virtual void  v8(); // _ZN8S18876C22v8Ev
  S18876C2(); // tgen
};
//SIG(-1 S18876C2) C1{ VBC2{ v4 v5 v6 v7} BC3{ v8 v9 v10 v11 v12 v13 v14 FD Fp} vd v1 v2 v3}


 S18876C2 ::~S18876C2(){ note_dtor("S18876C2", this);}
void  S18876C2 ::v6(){vfunc_called(this, "_ZN8S18876C22v6Ev");}
void  S18876C2 ::v7(){vfunc_called(this, "_ZN8S18876C22v7Ev");}
void  S18876C2 ::v8(){vfunc_called(this, "_ZN8S18876C22v8Ev");}
S18876C2 ::S18876C2(){ note_ctor("S18876C2", this);} // tgen

static void Test_S18876C2()
{
  extern Class_Descriptor cd_S18876C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S18876C2, buf);
    S18876C2 *dp, &lv = *(dp=new (buf) S18876C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S18876C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18876C2)");
    check_base_class_offset(lv, (S18876C3*), ABISELECT(40,20), "S18876C2");
    check_base_class_offset(lv, (S18876C4*), 0, "S18876C2");
    test_class_info(&lv, &cd_S18876C2);
    dp->~S18876C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18876C2(Test_S18876C2, "S18876C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S18876C2C1Ev();
extern void _ZN8S18876C2D2Ev();
Name_Map name_map_S18876C2[] = {
  NSPAIR(_ZN8S18876C2C1Ev),
  NSPAIR(_ZN8S18876C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18876C3;
extern VTBL_ENTRY _ZTI8S18876C3[];
extern  VTBL_ENTRY _ZTV8S18876C3[];
extern Class_Descriptor cd_S18876C4;
extern VTBL_ENTRY _ZTI8S18876C4[];
extern  VTBL_ENTRY _ZTV8S18876C4[];
static Base_Class bases_S18876C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18876C3,    ABISELECT(40,20), //bcp->offset
    15, //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_S18876C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S18876C2[];
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void _ZN8S18876C2D1Ev();
extern void _ZN8S18876C2D0Ev();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
static  VTBL_ENTRY vtc_S18876C2[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
};
extern VTBL_ENTRY _ZTV8S18876C2[];
static  VTT_ENTRY vtt_S18876C2[] = {
  {&(_ZTV8S18876C2[3]),  3,25},
  {&(_ZTV8S18876C2[21]),  21,25},
};
extern VTBL_ENTRY _ZTI8S18876C2[];
extern  VTBL_ENTRY _ZTV8S18876C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C2[];
Class_Descriptor cd_S18876C2 = {  "S18876C2", // class name
  bases_S18876C2, 2,
  &(vtc_S18876C2[0]), // expected_vtbl_contents
  &(vtt_S18876C2[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S18876C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18876C2),25, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18876C2),2, //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  S18876C6  : virtual S18876C4 {
  virtual void  v24(); // _ZN8S18876C63v24Ev
  ~S18876C6(); // tgen
  S18876C6(); // tgen
};
//SIG(-1 S18876C6) C1{ VBC2{ v2 v3 v4 v5 v6 v7 v8 FD Fp} v1}


void  S18876C6 ::v24(){vfunc_called(this, "_ZN8S18876C63v24Ev");}
S18876C6 ::~S18876C6(){ note_dtor("S18876C6", this);} // tgen
S18876C6 ::S18876C6(){ note_ctor("S18876C6", this);} // tgen

static void Test_S18876C6()
{
  extern Class_Descriptor cd_S18876C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,7)];
    init_test(&cd_S18876C6, buf);
    S18876C6 *dp, &lv = *(dp=new (buf) S18876C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,24), "sizeof(S18876C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18876C6)");
    check_base_class_offset(lv, (S18876C4*), ABISELECT(16,4), "S18876C6");
    test_class_info(&lv, &cd_S18876C6);
    dp->~S18876C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18876C6(Test_S18876C6, "S18876C6", ABISELECT(64,24));

#else // __cplusplus

extern void _ZN8S18876C6C1Ev();
extern void _ZN8S18876C6D1Ev();
Name_Map name_map_S18876C6[] = {
  NSPAIR(_ZN8S18876C6C1Ev),
  NSPAIR(_ZN8S18876C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18876C4;
extern VTBL_ENTRY _ZTI8S18876C4[];
extern  VTBL_ENTRY _ZTV8S18876C4[];
static Base_Class bases_S18876C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18876C4,    ABISELECT(16,4), //bcp->offset
    4, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S18876C6[];
extern void _ZN8S18876C63v24Ev();
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
static  VTBL_ENTRY vtc_S18876C6[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C6[0]),
  (VTBL_ENTRY)&_ZN8S18876C63v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S18876C6[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
};
extern VTBL_ENTRY _ZTV8S18876C6[];
static  VTT_ENTRY vtt_S18876C6[] = {
  {&(_ZTV8S18876C6[3]),  3,20},
  {&(_ZTV8S18876C6[13]),  13,20},
};
extern VTBL_ENTRY _ZTI8S18876C6[];
extern  VTBL_ENTRY _ZTV8S18876C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C6[];
Class_Descriptor cd_S18876C6 = {  "S18876C6", // class name
  bases_S18876C6, 1,
  &(vtc_S18876C6[0]), // expected_vtbl_contents
  &(vtt_S18876C6[0]), // expected_vtt_contents
  ABISELECT(64,24), // object size
  NSPAIRA(_ZTI8S18876C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S18876C6),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18876C6),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  S18876C8  {
  virtual void  v25(); // _ZN8S18876C83v25Ev
  ~S18876C8(); // tgen
  S18876C8(); // tgen
};
//SIG(-1 S18876C8) C1{ v1}


void  S18876C8 ::v25(){vfunc_called(this, "_ZN8S18876C83v25Ev");}
S18876C8 ::~S18876C8(){ note_dtor("S18876C8", this);} // tgen
S18876C8 ::S18876C8(){ note_ctor("S18876C8", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S18876C8C1Ev();
extern void _ZN8S18876C8D1Ev();
Name_Map name_map_S18876C8[] = {
  NSPAIR(_ZN8S18876C8C1Ev),
  NSPAIR(_ZN8S18876C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18876C8[];
extern void _ZN8S18876C83v25Ev();
static  VTBL_ENTRY vtc_S18876C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C8[0]),
  (VTBL_ENTRY)&_ZN8S18876C83v25Ev,
};
extern VTBL_ENTRY _ZTI8S18876C8[];
extern  VTBL_ENTRY _ZTV8S18876C8[];
Class_Descriptor cd_S18876C8 = {  "S18876C8", // class name
  0,0,//no base classes
  &(vtc_S18876C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S18876C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18876C8),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  S18876C10  : virtual S18876C2 {
  int s18876c10f0;
  __tsi64 s18876c10f1;
  virtual void  v26(); // _ZN9S18876C103v26Ev
  virtual void  v27(); // _ZN9S18876C103v27Ev
  virtual void  v28(); // _ZN9S18876C103v28Ev
  ~S18876C10(); // tgen
  S18876C10(); // tgen
};
//SIG(-1 S18876C10) C1{ VBC2{ VBC3{ v4 v5 v6 v7} BC4{ v8 v9 v10 v11 v12 v13 v14 FD Fp} vd v15 v16 v17} v1 v2 v3 Fi FL}


void  S18876C10 ::v26(){vfunc_called(this, "_ZN9S18876C103v26Ev");}
void  S18876C10 ::v27(){vfunc_called(this, "_ZN9S18876C103v27Ev");}
void  S18876C10 ::v28(){vfunc_called(this, "_ZN9S18876C103v28Ev");}
S18876C10 ::~S18876C10(){ note_dtor("S18876C10", this);} // tgen
S18876C10 ::S18876C10(){ note_ctor("S18876C10", this);} // tgen

static void Test_S18876C10()
{
  extern Class_Descriptor cd_S18876C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,10)];
    init_test(&cd_S18876C10, buf);
    S18876C10 *dp, &lv = *(dp=new (buf) S18876C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,36), "sizeof(S18876C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18876C10)");
    check_base_class_offset(lv, (S18876C3*)(S18876C2*), 0, "S18876C10");
    check_base_class_offset(lv, (S18876C4*)(S18876C2*), ABISELECT(32,16), "S18876C10");
    check_base_class_offset(lv, (S18876C2*), ABISELECT(32,16), "S18876C10");
    check_field_offset(lv, s18876c10f0, ABISELECT(8,4), "S18876C10.s18876c10f0");
    check_field_offset(lv, s18876c10f1, ABISELECT(16,8), "S18876C10.s18876c10f1");
    test_class_info(&lv, &cd_S18876C10);
    dp->~S18876C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18876C10(Test_S18876C10, "S18876C10", ABISELECT(80,36));

#else // __cplusplus

extern void _ZN9S18876C10C1Ev();
extern void _ZN9S18876C10D1Ev();
Name_Map name_map_S18876C10[] = {
  NSPAIR(_ZN9S18876C10C1Ev),
  NSPAIR(_ZN9S18876C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18876C3;
extern VTBL_ENTRY _ZTI8S18876C3[];
extern  VTBL_ENTRY _ZTV8S18876C3[];
extern Class_Descriptor cd_S18876C4;
extern VTBL_ENTRY _ZTI8S18876C4[];
extern  VTBL_ENTRY _ZTV8S18876C4[];
extern Class_Descriptor cd_S18876C2;
extern VTBL_ENTRY _ZTI8S18876C2[];
extern  VTBL_ENTRY _ZTV8S18876C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C2[];
static Base_Class bases_S18876C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18876C3,    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
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S18876C4,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S18876C2,    ABISELECT(32,16), //bcp->offset
    17, //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 _ZTI9S18876C10[];
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
extern void _ZN9S18876C103v26Ev();
extern void _ZN9S18876C103v27Ev();
extern void _ZN9S18876C103v28Ev();
extern void _ZN9S18876C10D1Ev();
extern void _ZN9S18876C10D0Ev();
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZTv0_n88_N9S18876C10D1Ev,_ZTv0_n44_N9S18876C10D1Ev)();
extern void ABISELECT(_ZThn32_N9S18876C10D1Ev,_ZThn16_N9S18876C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N9S18876C10D0Ev,_ZTv0_n44_N9S18876C10D0Ev)();
extern void ABISELECT(_ZThn32_N9S18876C10D0Ev,_ZThn16_N9S18876C10D0Ev)() __attribute__((weak));
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY vtc_S18876C10[] = {
  0,
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S18876C10[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v26Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v27Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v28Ev,
  (VTBL_ENTRY)&_ZN9S18876C10D1Ev,
  (VTBL_ENTRY)&_ZN9S18876C10D0Ev,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S18876C10[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N9S18876C10D1Ev,_ZTv0_n44_N9S18876C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N9S18876C10D0Ev,_ZTv0_n44_N9S18876C10D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern VTBL_ENTRY _ZTV9S18876C10[];
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void _ZN8S18876C2D1Ev();
extern void _ZN8S18876C2D0Ev();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C2__9S18876C10[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C3__8S18876C2__9S18876C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
};
static  VTT_ENTRY vtt_S18876C10[] = {
  {&(_ZTV9S18876C10[8]),  8,43},
  {&(_ZTV9S18876C10[31]),  31,43},
  {&(_ZTV9S18876C10[8]),  8,43},
  {&(_tg__ZTV8S18876C2__9S18876C10[3]),  3,15},
  {&(_tg__ZTV8S18876C3__8S18876C2__9S18876C10[6]),  6,10},
};
extern VTBL_ENTRY _ZTI9S18876C10[];
extern  VTBL_ENTRY _ZTV9S18876C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18876C10[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N9S18876C10D0Ev,_ZTv0_n44_N9S18876C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S18876C10D0Ev,_ZThn16_N9S18876C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N9S18876C10D1Ev,_ZTv0_n44_N9S18876C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S18876C10D1Ev,_ZThn16_N9S18876C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18876C10 = {  "S18876C10", // class name
  bases_S18876C10, 3,
  &(vtc_S18876C10[0]), // expected_vtbl_contents
  &(vtt_S18876C10[0]), // expected_vtt_contents
  ABISELECT(80,36), // object size
  NSPAIRA(_ZTI9S18876C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S18876C10),43, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S18876C10),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18876C9  : virtual S18876C3 , virtual S18876C4 , S18876C10 , S18876C2 {
  virtual void  v29(); // _ZN8S18876C93v29Ev
  virtual void  v30(); // _ZN8S18876C93v30Ev
  virtual void  v31(); // _ZN8S18876C93v31Ev
  virtual void  v32(); // _ZN8S18876C93v32Ev
  virtual void  v33(); // _ZN8S18876C93v33Ev
  virtual void  v34(); // _ZN8S18876C93v34Ev
  ~S18876C9(); // tgen
  S18876C9(); // tgen
};
//SIG(-1 S18876C9) C1{ VBC2{ v7 v8 v9 v10} VBC3{ v11 v12 v13 v14 v15 v16 v17 FD Fp} BC4{ VBC5{ VBC2 BC3 vd v18 v19 v20} v21 v22 v23 Fi FL} BC5 v1 v2 v3 v4 v5 v6}


void  S18876C9 ::v29(){vfunc_called(this, "_ZN8S18876C93v29Ev");}
void  S18876C9 ::v30(){vfunc_called(this, "_ZN8S18876C93v30Ev");}
void  S18876C9 ::v31(){vfunc_called(this, "_ZN8S18876C93v31Ev");}
void  S18876C9 ::v32(){vfunc_called(this, "_ZN8S18876C93v32Ev");}
void  S18876C9 ::v33(){vfunc_called(this, "_ZN8S18876C93v33Ev");}
void  S18876C9 ::v34(){vfunc_called(this, "_ZN8S18876C93v34Ev");}
S18876C9 ::~S18876C9(){ note_dtor("S18876C9", this);} // tgen
S18876C9 ::S18876C9(){ note_ctor("S18876C9", this);} // tgen

static void Test_S18876C9()
{
  extern Class_Descriptor cd_S18876C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,20)];
    init_test(&cd_S18876C9, buf);
    S18876C9 *dp, &lv = *(dp=new (buf) S18876C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,76), "sizeof(S18876C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18876C9)");
    check_base_class_offset(lv, (S18876C3*), 0, "S18876C9");
    /*is_ambiguous_... S18876C9::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C3*)(S18876C2*), 0, "S18876C9");
    /*is_ambiguous_... S18876C9::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C3*)(S18876C2*), 0, "S18876C9");
    /*is_ambiguous_... S18876C9::S18876C4 */ AMB_check_base_class_offset(lv, (S18876C4*), ABISELECT(80,36), "S18876C9");
    /*is_ambiguous_... S18876C9::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C4*)(S18876C2*), ABISELECT(128,56), "S18876C9");
    check_base_class_offset(lv, (S18876C2*)(S18876C10*), ABISELECT(128,56), "S18876C9");
    check_base_class_offset(lv, (S18876C10*), 0, "S18876C9");
    /*is_ambiguous_... S18876C9::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C4*)(S18876C2*), ABISELECT(32,16), "S18876C9");
    /*is_ambiguous_... S18876C9::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C2*), ABISELECT(32,16), "S18876C9");
    test_class_info(&lv, &cd_S18876C9);
    dp->~S18876C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18876C9(Test_S18876C9, "S18876C9", ABISELECT(176,76));

#else // __cplusplus

extern void _ZN8S18876C9C1Ev();
extern void _ZN8S18876C9D1Ev();
Name_Map name_map_S18876C9[] = {
  NSPAIR(_ZN8S18876C9C1Ev),
  NSPAIR(_ZN8S18876C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18876C3;
extern VTBL_ENTRY _ZTI8S18876C3[];
extern  VTBL_ENTRY _ZTV8S18876C3[];
extern Class_Descriptor cd_S18876C4;
extern VTBL_ENTRY _ZTI8S18876C4[];
extern  VTBL_ENTRY _ZTV8S18876C4[];
extern Class_Descriptor cd_S18876C4;
extern VTBL_ENTRY _ZTI8S18876C4[];
extern  VTBL_ENTRY _ZTV8S18876C4[];
extern Class_Descriptor cd_S18876C2;
extern VTBL_ENTRY _ZTI8S18876C2[];
extern  VTBL_ENTRY _ZTV8S18876C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C2[];
extern Class_Descriptor cd_S18876C10;
extern VTBL_ENTRY _ZTI9S18876C10[];
extern  VTBL_ENTRY _ZTV9S18876C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18876C10[];
extern Class_Descriptor cd_S18876C4;
extern VTBL_ENTRY _ZTI8S18876C4[];
extern  VTBL_ENTRY _ZTV8S18876C4[];
extern Class_Descriptor cd_S18876C2;
extern VTBL_ENTRY _ZTI8S18876C2[];
extern  VTBL_ENTRY _ZTV8S18876C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C2[];
static Base_Class bases_S18876C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18876C3,    0, //bcp->offset
    -1, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18876C4,    ABISELECT(80,36), //bcp->offset
    39, //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_S18876C4,    ABISELECT(128,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
    3, //immediately_derived
  0, 0},
  {&cd_S18876C2,    ABISELECT(128,56), //bcp->offset
    55, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S18876C10,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18876C4,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S18876C2,    ABISELECT(32,16), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18876C9[];
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
extern void _ZN9S18876C103v26Ev();
extern void _ZN9S18876C103v27Ev();
extern void _ZN9S18876C103v28Ev();
extern void _ZN8S18876C9D1Ev();
extern void _ZN8S18876C9D0Ev();
extern void _ZN8S18876C93v29Ev();
extern void _ZN8S18876C93v30Ev();
extern void _ZN8S18876C93v31Ev();
extern void _ZN8S18876C93v32Ev();
extern void _ZN8S18876C93v33Ev();
extern void _ZN8S18876C93v34Ev();
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZThn32_N8S18876C9D1Ev,_ZThn16_N8S18876C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S18876C9D0Ev,_ZThn16_N8S18876C9D0Ev)();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZTv0_n88_N8S18876C9D1Ev,_ZTv0_n44_N8S18876C9D1Ev)();
extern void ABISELECT(_ZThn128_N8S18876C9D1Ev,_ZThn56_N8S18876C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S18876C9D0Ev,_ZTv0_n44_N8S18876C9D0Ev)();
extern void ABISELECT(_ZThn128_N8S18876C9D0Ev,_ZThn56_N8S18876C9D0Ev)() __attribute__((weak));
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY vtc_S18876C9[] = {
  ABISELECT(80,36),
  0,
  ABISELECT(128,56),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C9[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v26Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v27Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v28Ev,
  (VTBL_ENTRY)&_ZN8S18876C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C9D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v29Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v30Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v31Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v32Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v33Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v34Ev,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S18876C9[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S18876C9D1Ev,_ZThn16_N8S18876C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S18876C9D0Ev,_ZThn16_N8S18876C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S18876C9[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  0,
  0,
  0,
  ABISELECT(-128,-56),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-56),
  ABISELECT(-128,-56),
  (VTBL_ENTRY)&(_ZTI8S18876C9[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18876C9D1Ev,_ZTv0_n44_N8S18876C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18876C9D0Ev,_ZTv0_n44_N8S18876C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern VTBL_ENTRY _ZTV8S18876C9[];
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
extern void _ZN9S18876C103v26Ev();
extern void _ZN9S18876C103v27Ev();
extern void _ZN9S18876C103v28Ev();
extern void _ZN9S18876C10D1Ev();
extern void _ZN9S18876C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18876C10__8S18876C9[] = {
  0,
  ABISELECT(128,56),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S18876C10[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v26Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v27Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v28Ev,
  (VTBL_ENTRY)&_ZN9S18876C10D1Ev,
  (VTBL_ENTRY)&_ZN9S18876C10D0Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZTv0_n88_N9S18876C10D1Ev,_ZTv0_n44_N9S18876C10D1Ev)();
extern void ABISELECT(_ZThn128_N9S18876C10D1Ev,_ZThn56_N9S18876C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N9S18876C10D0Ev,_ZTv0_n44_N9S18876C10D0Ev)();
extern void ABISELECT(_ZThn128_N9S18876C10D0Ev,_ZThn56_N9S18876C10D0Ev)() __attribute__((weak));
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C2__9S18876C10__8S18876C9[] = {
  0,
  0,
  0,
  ABISELECT(-128,-56),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-56),
  ABISELECT(-128,-56),
  (VTBL_ENTRY)&(_ZTI9S18876C10[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N9S18876C10D1Ev,_ZTv0_n44_N9S18876C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N9S18876C10D0Ev,_ZTv0_n44_N9S18876C10D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void _ZN8S18876C2D1Ev();
extern void _ZN8S18876C2D0Ev();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C2__A__8S18876C9[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C3__8S18876C2__A__8S18876C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void _ZN8S18876C2D1Ev();
extern void _ZN8S18876C2D0Ev();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C2__8S18876C9[] = {
  ABISELECT(-128,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C3__8S18876C2__8S18876C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(128,56),
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
};
static  VTT_ENTRY vtt_S18876C9[] = {
  {&(_ZTV8S18876C9[9]),  9,81},
  {&(_tg__ZTV9S18876C10__8S18876C9[8]),  8,17},
  {&(_tg__ZTV8S18876C2__9S18876C10__8S18876C9[14]),  14,26},
  {&(_tg__ZTV9S18876C10__8S18876C9[8]),  8,17},
  {&(_tg__ZTV8S18876C2__A__8S18876C9[3]),  3,15},
  {&(_tg__ZTV8S18876C3__8S18876C2__A__8S18876C9[6]),  6,10},
  {&(_ZTV8S18876C9[9]),  9,81},
  {&(_ZTV8S18876C9[48]),  48,81},
  {&(_ZTV8S18876C9[69]),  69,81},
  {&(_ZTV8S18876C9[27]),  27,81},
  {&(_tg__ZTV8S18876C2__8S18876C9[3]),  3,15},
  {&(_tg__ZTV8S18876C3__8S18876C2__8S18876C9[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S18876C9[];
extern  VTBL_ENTRY _ZTV8S18876C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C9[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N9S18876C10D0Ev,_ZTv0_n44_N9S18876C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S18876C10D0Ev,_ZThn56_N9S18876C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N9S18876C10D1Ev,_ZTv0_n44_N9S18876C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N9S18876C10D1Ev,_ZThn56_N9S18876C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18876C9D0Ev,_ZTv0_n44_N8S18876C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S18876C9D0Ev,_ZThn56_N8S18876C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18876C9D1Ev,_ZTv0_n44_N8S18876C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S18876C9D1Ev,_ZThn56_N8S18876C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18876C9 = {  "S18876C9", // class name
  bases_S18876C9, 7,
  &(vtc_S18876C9[0]), // expected_vtbl_contents
  &(vtt_S18876C9[0]), // expected_vtt_contents
  ABISELECT(176,76), // object size
  NSPAIRA(_ZTI8S18876C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S18876C9),81, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18876C9),12, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18876C7  : S18876C2 , S18876C8 , virtual S18876C4 , virtual S18876C9 , S18876C3 {
  virtual void  v35(); // _ZN8S18876C73v35Ev
  virtual void  v36(); // _ZN8S18876C73v36Ev
  ~S18876C7(); // tgen
  S18876C7(); // tgen
};
//SIG(-1 S18876C7) C1{ BC2{ VBC3{ v3 v4 v5 v6} BC4{ v7 v8 v9 v10 v11 v12 v13 FD Fp} vd v14 v15 v16} BC5{ v17} VBC4 VBC6{ VBC3 VBC4 BC7{ VBC2 v18 v19 v20 Fi FL} BC2 v21 v22 v23 v24 v25 v26} BC3 v1 v2}


void  S18876C7 ::v35(){vfunc_called(this, "_ZN8S18876C73v35Ev");}
void  S18876C7 ::v36(){vfunc_called(this, "_ZN8S18876C73v36Ev");}
S18876C7 ::~S18876C7(){ note_dtor("S18876C7", this);} // tgen
S18876C7 ::S18876C7(){ note_ctor("S18876C7", this);} // tgen

static void Test_S18876C7()
{
  extern Class_Descriptor cd_S18876C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,27)];
    init_test(&cd_S18876C7, buf);
    S18876C7 *dp, &lv = *(dp=new (buf) S18876C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,104), "sizeof(S18876C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18876C7)");
    /*is_ambiguous_... S18876C7::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C3*)(S18876C2*), ABISELECT(112,48), "S18876C7");
    check_base_class_offset(lv, (S18876C3*)(S18876C9*), ABISELECT(112,48), "S18876C7");
    /*is_ambiguous_... S18876C7::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C3*)(S18876C2*), ABISELECT(112,48), "S18876C7");
    /*is_ambiguous_... S18876C9::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C3*)(S18876C2*)(S18876C9*), ABISELECT(112,48), "S18876C7");
    /*is_ambiguous_... S18876C7::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C4*)(S18876C2*), 0, "S18876C7");
    /*is_ambiguous_... S18876C7::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C2*), 0, "S18876C7");
    check_base_class_offset(lv, (S18876C8*), ABISELECT(40,20), "S18876C7");
    /*is_ambiguous_... S18876C7::S18876C4 */ AMB_check_base_class_offset(lv, (S18876C4*), ABISELECT(64,28), "S18876C7");
    /*is_ambiguous_... S18876C9::S18876C4 */ AMB_check_base_class_offset(lv, (S18876C4*)(S18876C9*), ABISELECT(64,28), "S18876C7");
    /*is_ambiguous_... S18876C7::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C4*)(S18876C2*), ABISELECT(192,84), "S18876C7");
    check_base_class_offset(lv, (S18876C2*)(S18876C10*)(S18876C9*), ABISELECT(192,84), "S18876C7");
    check_base_class_offset(lv, (S18876C10*)(S18876C9*), ABISELECT(112,48), "S18876C7");
    /*is_ambiguous_... S18876C9::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C4*)(S18876C2*)(S18876C9*), ABISELECT(144,64), "S18876C7");
    /*is_ambiguous_... S18876C9::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C2*)(S18876C9*), ABISELECT(144,64), "S18876C7");
    check_base_class_offset(lv, (S18876C9*), ABISELECT(112,48), "S18876C7");
    /*is_ambiguous_... S18876C7::S18876C3 */ AMB_check_base_class_offset(lv, (S18876C3*), ABISELECT(48,24), "S18876C7");
    test_class_info(&lv, &cd_S18876C7);
    dp->~S18876C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18876C7(Test_S18876C7, "S18876C7", ABISELECT(240,104));

#else // __cplusplus

extern void _ZN8S18876C7C1Ev();
extern void _ZN8S18876C7D1Ev();
Name_Map name_map_S18876C7[] = {
  NSPAIR(_ZN8S18876C7C1Ev),
  NSPAIR(_ZN8S18876C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18876C3;
extern VTBL_ENTRY _ZTI8S18876C3[];
extern  VTBL_ENTRY _ZTV8S18876C3[];
extern Class_Descriptor cd_S18876C4;
extern VTBL_ENTRY _ZTI8S18876C4[];
extern  VTBL_ENTRY _ZTV8S18876C4[];
extern Class_Descriptor cd_S18876C2;
extern VTBL_ENTRY _ZTI8S18876C2[];
extern  VTBL_ENTRY _ZTV8S18876C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C2[];
extern Class_Descriptor cd_S18876C8;
extern VTBL_ENTRY _ZTI8S18876C8[];
extern  VTBL_ENTRY _ZTV8S18876C8[];
extern Class_Descriptor cd_S18876C4;
extern VTBL_ENTRY _ZTI8S18876C4[];
extern  VTBL_ENTRY _ZTV8S18876C4[];
extern Class_Descriptor cd_S18876C4;
extern VTBL_ENTRY _ZTI8S18876C4[];
extern  VTBL_ENTRY _ZTV8S18876C4[];
extern Class_Descriptor cd_S18876C2;
extern VTBL_ENTRY _ZTI8S18876C2[];
extern  VTBL_ENTRY _ZTV8S18876C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C2[];
extern Class_Descriptor cd_S18876C10;
extern VTBL_ENTRY _ZTI9S18876C10[];
extern  VTBL_ENTRY _ZTV9S18876C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18876C10[];
extern Class_Descriptor cd_S18876C4;
extern VTBL_ENTRY _ZTI8S18876C4[];
extern  VTBL_ENTRY _ZTV8S18876C4[];
extern Class_Descriptor cd_S18876C2;
extern VTBL_ENTRY _ZTI8S18876C2[];
extern  VTBL_ENTRY _ZTV8S18876C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C2[];
extern Class_Descriptor cd_S18876C9;
extern VTBL_ENTRY _ZTI8S18876C9[];
extern  VTBL_ENTRY _ZTV8S18876C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C9[];
extern Class_Descriptor cd_S18876C3;
extern VTBL_ENTRY _ZTI8S18876C3[];
extern  VTBL_ENTRY _ZTV8S18876C3[];
static Base_Class bases_S18876C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18876C3,    ABISELECT(112,48), //bcp->offset
    -1, //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
    2, //immediately_derived
  0, 1},
  {&cd_S18876C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S18876C2,    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_S18876C8,    ABISELECT(40,20), //bcp->offset
    20, //bcp->virtual_function_table_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_S18876C4,    ABISELECT(64,28), //bcp->offset
    29, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18876C4,    ABISELECT(192,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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S18876C2,    ABISELECT(192,84), //bcp->offset
    104, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S18876C10,    ABISELECT(112,48), //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
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S18876C4,    ABISELECT(144,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
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S18876C2,    ABISELECT(144,64), //bcp->offset
    89, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S18876C9,    ABISELECT(112,48), //bcp->offset
    45, //bcp->virtual_function_table_offset
    29, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18876C3,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18876C7[];
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void _ZN8S18876C7D1Ev();
extern void _ZN8S18876C7D0Ev();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
extern void _ZN8S18876C73v35Ev();
extern void _ZN8S18876C73v36Ev();
extern void _ZN8S18876C83v25Ev();
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
extern void _ZN9S18876C103v26Ev();
extern void _ZN9S18876C103v27Ev();
extern void _ZN9S18876C103v28Ev();
extern void ABISELECT(_ZTv0_n104_N8S18876C7D1Ev,_ZTv0_n52_N8S18876C7D1Ev)();
extern void ABISELECT(_ZThn112_N8S18876C7D1Ev,_ZThn48_N8S18876C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S18876C7D0Ev,_ZTv0_n52_N8S18876C7D0Ev)();
extern void ABISELECT(_ZThn112_N8S18876C7D0Ev,_ZThn48_N8S18876C7D0Ev)() __attribute__((weak));
extern void _ZN8S18876C93v29Ev();
extern void _ZN8S18876C93v30Ev();
extern void _ZN8S18876C93v31Ev();
extern void _ZN8S18876C93v32Ev();
extern void _ZN8S18876C93v33Ev();
extern void _ZN8S18876C93v34Ev();
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZTvn32_n104_N8S18876C7D1Ev,_ZTvn16_n52_N8S18876C7D1Ev)();
extern void ABISELECT(_ZTvn32_n104_N8S18876C7D0Ev,_ZTvn16_n52_N8S18876C7D0Ev)();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZTv0_n88_N8S18876C7D1Ev,_ZTv0_n44_N8S18876C7D1Ev)();
extern void ABISELECT(_ZThn192_N8S18876C7D1Ev,_ZThn84_N8S18876C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S18876C7D0Ev,_ZTv0_n44_N8S18876C7D0Ev)();
extern void ABISELECT(_ZThn192_N8S18876C7D0Ev,_ZThn84_N8S18876C7D0Ev)() __attribute__((weak));
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY vtc_S18876C7[] = {
  ABISELECT(192,84),
  ABISELECT(112,48),
  ABISELECT(64,28),
  ABISELECT(112,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C7[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18876C7D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C7D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
  (VTBL_ENTRY)&_ZN8S18876C73v35Ev,
  (VTBL_ENTRY)&_ZN8S18876C73v36Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18876C7[0]),
  (VTBL_ENTRY)&_ZN8S18876C83v25Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S18876C7[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S18876C7[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  0,
  0,
  0,
  ABISELECT(-48,-20),
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  (VTBL_ENTRY)&(_ZTI8S18876C7[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v26Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v27Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S18876C7D1Ev,_ZTv0_n52_N8S18876C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S18876C7D0Ev,_ZTv0_n52_N8S18876C7D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C93v29Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v30Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v31Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v32Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v33Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v34Ev,
  ABISELECT(-32,-16),
  ABISELECT(-144,-64),
  (VTBL_ENTRY)&(_ZTI8S18876C7[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N8S18876C7D1Ev,_ZTvn16_n52_N8S18876C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N8S18876C7D0Ev,_ZTvn16_n52_N8S18876C7D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
  0,
  0,
  0,
  ABISELECT(-192,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-192,-84),
  (VTBL_ENTRY)&(_ZTI8S18876C7[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18876C7D1Ev,_ZTv0_n44_N8S18876C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18876C7D0Ev,_ZTv0_n44_N8S18876C7D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern VTBL_ENTRY _ZTV8S18876C7[];
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void _ZN8S18876C2D1Ev();
extern void _ZN8S18876C2D0Ev();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C2__A__8S18876C7[] = {
  ABISELECT(112,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C3__8S18876C2__A__8S18876C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
extern void _ZN9S18876C103v26Ev();
extern void _ZN9S18876C103v27Ev();
extern void _ZN9S18876C103v28Ev();
extern void _ZN8S18876C9D1Ev();
extern void _ZN8S18876C9D0Ev();
extern void _ZN8S18876C93v29Ev();
extern void _ZN8S18876C93v30Ev();
extern void _ZN8S18876C93v31Ev();
extern void _ZN8S18876C93v32Ev();
extern void _ZN8S18876C93v33Ev();
extern void _ZN8S18876C93v34Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C9__8S18876C7[] = {
  ABISELECT(-48,-20),
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C9[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v26Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v27Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v28Ev,
  (VTBL_ENTRY)&_ZN8S18876C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C9D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v29Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v30Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v31Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v32Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v33Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v34Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
extern void _ZN9S18876C103v26Ev();
extern void _ZN9S18876C103v27Ev();
extern void _ZN9S18876C103v28Ev();
extern void _ZN9S18876C10D1Ev();
extern void _ZN9S18876C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18876C108S18876C9__8S18876C7[] = {
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S18876C10[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v26Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v27Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v28Ev,
  (VTBL_ENTRY)&_ZN9S18876C10D1Ev,
  (VTBL_ENTRY)&_ZN9S18876C10D0Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZTv0_n88_N9S18876C10D1Ev,_ZTv0_n44_N9S18876C10D1Ev)();
extern void ABISELECT(_ZThn80_N9S18876C10D1Ev,_ZThn36_N9S18876C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N9S18876C10D0Ev,_ZTv0_n44_N9S18876C10D0Ev)();
extern void ABISELECT(_ZThn80_N9S18876C10D0Ev,_ZThn36_N9S18876C10D0Ev)() __attribute__((weak));
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C2__9S18876C108S18876C9__8S18876C7[] = {
  0,
  0,
  0,
  ABISELECT(-80,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI9S18876C10[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N9S18876C10D1Ev,_ZTv0_n44_N9S18876C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N9S18876C10D0Ev,_ZTv0_n44_N9S18876C10D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void _ZN8S18876C2D1Ev();
extern void _ZN8S18876C2D0Ev();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C28S18876C9__A2__8S18876C7[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C3__8S18876C28S18876C9__A2__8S18876C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C4__8S18876C9__8S18876C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI8S18876C9[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZTv0_n88_N8S18876C9D1Ev,_ZTv0_n44_N8S18876C9D1Ev)();
extern void ABISELECT(_ZThn80_N8S18876C9D1Ev,_ZThn36_N8S18876C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S18876C9D0Ev,_ZTv0_n44_N8S18876C9D0Ev)();
extern void ABISELECT(_ZThn80_N8S18876C9D0Ev,_ZThn36_N8S18876C9D0Ev)() __attribute__((weak));
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C2__8S18876C9__8S18876C7[] = {
  0,
  0,
  0,
  ABISELECT(-80,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S18876C9[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18876C9D1Ev,_ZTv0_n44_N8S18876C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18876C9D0Ev,_ZTv0_n44_N8S18876C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZThn32_N8S18876C9D1Ev,_ZThn16_N8S18876C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S18876C9D0Ev,_ZThn16_N8S18876C9D0Ev)();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C2__A__8S18876C9__8S18876C7[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S18876C9[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S18876C9D1Ev,_ZThn16_N8S18876C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S18876C9D0Ev,_ZThn16_N8S18876C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void _ZN8S18876C2D1Ev();
extern void _ZN8S18876C2D0Ev();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C2__A1__8S18876C7[] = {
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C3__8S18876C2__A1__8S18876C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
};
static  VTT_ENTRY vtt_S18876C7[] = {
  {&(_ZTV8S18876C7[6]),  6,130},
  {&(_tg__ZTV8S18876C2__A__8S18876C7[3]),  3,15},
  {&(_tg__ZTV8S18876C3__8S18876C2__A__8S18876C7[6]),  6,10},
  {&(_ZTV8S18876C7[74]),  74,130},
  {&(_ZTV8S18876C7[38]),  38,130},
  {&(_ZTV8S18876C7[74]),  74,130},
  {&(_ZTV8S18876C7[118]),  118,130},
  {&(_ZTV8S18876C7[92]),  92,130},
  {&(_tg__ZTV8S18876C9__8S18876C7[9]),  9,24},
  {&(_tg__ZTV9S18876C108S18876C9__8S18876C7[8]),  8,17},
  {&(_tg__ZTV8S18876C2__9S18876C108S18876C9__8S18876C7[14]),  14,26},
  {&(_tg__ZTV9S18876C108S18876C9__8S18876C7[8]),  8,17},
  {&(_tg__ZTV8S18876C28S18876C9__A2__8S18876C7[3]),  3,15},
  {&(_tg__ZTV8S18876C3__8S18876C28S18876C9__A2__8S18876C7[6]),  6,10},
  {&(_tg__ZTV8S18876C9__8S18876C7[9]),  9,24},
  {&(_tg__ZTV8S18876C4__8S18876C9__8S18876C7[9]),  9,16},
  {&(_tg__ZTV8S18876C2__8S18876C9__8S18876C7[14]),  14,26},
  {&(_tg__ZTV8S18876C2__A__8S18876C9__8S18876C7[3]),  3,15},
  {&(_tg__ZTV8S18876C2__A1__8S18876C7[3]),  3,15},
  {&(_tg__ZTV8S18876C3__8S18876C2__A1__8S18876C7[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S18876C7[];
extern  VTBL_ENTRY _ZTV8S18876C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C7[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18876C9D0Ev,_ZTv0_n44_N8S18876C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S18876C9D0Ev,_ZThn36_N8S18876C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18876C9D1Ev,_ZTv0_n44_N8S18876C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S18876C9D1Ev,_ZThn36_N8S18876C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N9S18876C10D0Ev,_ZTv0_n44_N9S18876C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S18876C10D0Ev,_ZThn36_N9S18876C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N9S18876C10D1Ev,_ZTv0_n44_N9S18876C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S18876C10D1Ev,_ZThn36_N9S18876C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18876C7D0Ev,_ZTv0_n44_N8S18876C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S18876C7D0Ev,_ZThn84_N8S18876C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18876C7D1Ev,_ZTv0_n44_N8S18876C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S18876C7D1Ev,_ZThn84_N8S18876C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S18876C7D0Ev,_ZTv0_n52_N8S18876C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S18876C7D0Ev,_ZThn48_N8S18876C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S18876C7D1Ev,_ZTv0_n52_N8S18876C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S18876C7D1Ev,_ZThn48_N8S18876C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18876C7 = {  "S18876C7", // class name
  bases_S18876C7, 12,
  &(vtc_S18876C7[0]), // expected_vtbl_contents
  &(vtt_S18876C7[0]), // expected_vtt_contents
  ABISELECT(240,104), // object size
  NSPAIRA(_ZTI8S18876C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S18876C7),130, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18876C7),20, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18876C5  : virtual S18876C6 , S18876C2 , virtual S18876C7 , S18876C9 {
  virtual void  v20(); // _ZN8S18876C53v20Ev
  virtual void  v21(); // _ZN8S18876C53v21Ev
  virtual void  v22(); // _ZN8S18876C53v22Ev
  virtual void  v23(); // _ZN8S18876C53v23Ev
  ~S18876C5(); // tgen
  S18876C5(); // tgen
};
//SIG(1 S18876C5) C1{ VBC2{ VBC3{ v5 v6 v7 v8 v9 v10 v11 FD Fp} v12} BC4{ VBC5{ v13 v14 v15 v16} BC3 vd v17 v18 v19} VBC6{ BC4 BC7{ v20} VBC3 VBC8{ VBC5 VBC3 BC9{ VBC4 v21 v22 v23 Fi FL} BC4 v24 v25 v26 v27 v28 v29} BC5 v30 v31} BC8 v1 v2 v3 v4}


void  S18876C5 ::v20(){vfunc_called(this, "_ZN8S18876C53v20Ev");}
void  S18876C5 ::v21(){vfunc_called(this, "_ZN8S18876C53v21Ev");}
void  S18876C5 ::v22(){vfunc_called(this, "_ZN8S18876C53v22Ev");}
void  S18876C5 ::v23(){vfunc_called(this, "_ZN8S18876C53v23Ev");}
S18876C5 ::~S18876C5(){ note_dtor("S18876C5", this);} // tgen
S18876C5 ::S18876C5(){ note_ctor("S18876C5", this);} // tgen

static void Test_S18876C5()
{
  extern Class_Descriptor cd_S18876C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,42)];
    init_test(&cd_S18876C5, buf);
    S18876C5 *dp, &lv = *(dp=new (buf) S18876C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,164), "sizeof(S18876C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18876C5)");
    check_base_class_offset(lv, (S18876C4*)(S18876C6*), ABISELECT(128,60), "S18876C5");
    /*is_ambiguous_... S18876C7::S18876C4 */ AMB_check_base_class_offset(lv, (S18876C4*)(S18876C7*), ABISELECT(128,60), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C9 */ AMB_check_base_class_offset(lv, (S18876C4*)(S18876C9*), ABISELECT(128,60), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C9 */ AMB_check_base_class_offset(lv, (S18876C4*)(S18876C9*), ABISELECT(128,60), "S18876C5");
    check_base_class_offset(lv, (S18876C6*), ABISELECT(120,56), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C3*)(S18876C2*), ABISELECT(240,108), "S18876C5");
    /*is_ambiguous_... S18876C7::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C3*)(S18876C2*)(S18876C7*), ABISELECT(240,108), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C9 */ AMB_check_base_class_offset(lv, (S18876C3*)(S18876C9*), ABISELECT(240,108), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C3*)(S18876C2*), ABISELECT(240,108), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C9 */ AMB_check_base_class_offset(lv, (S18876C3*)(S18876C2*)(S18876C9*), ABISELECT(240,108), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C9 */ AMB_check_base_class_offset(lv, (S18876C3*)(S18876C9*), ABISELECT(240,108), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C9 */ AMB_check_base_class_offset(lv, (S18876C3*)(S18876C2*)(S18876C9*), ABISELECT(240,108), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C4*)(S18876C2*), 0, "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C2*), 0, "S18876C5");
    /*is_ambiguous_... S18876C7::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C4*)(S18876C2*)(S18876C7*), ABISELECT(176,80), "S18876C5");
    /*is_ambiguous_... S18876C7::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C2*)(S18876C7*), ABISELECT(176,80), "S18876C5");
    check_base_class_offset(lv, (S18876C8*)(S18876C7*), ABISELECT(216,100), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C2 */ AMB_check_base_class_offset(lv, (S18876C4*)(S18876C2*), ABISELECT(320,144), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C9 */ AMB_check_base_class_offset(lv, (S18876C2*)(S18876C10*)(S18876C9*), ABISELECT(320,144), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C9 */ AMB_check_base_class_offset(lv, (S18876C2*)(S18876C10*)(S18876C9*), ABISELECT(320,144), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C9 */ AMB_check_base_class_offset(lv, (S18876C10*)(S18876C9*), ABISELECT(240,108), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C9 */ AMB_check_base_class_offset(lv, (S18876C4*)(S18876C2*)(S18876C9*), ABISELECT(272,124), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C9 */ AMB_check_base_class_offset(lv, (S18876C2*)(S18876C9*), ABISELECT(272,124), "S18876C5");
    check_base_class_offset(lv, (S18876C9*)(S18876C7*), ABISELECT(240,108), "S18876C5");
    /*is_ambiguous_... S18876C7::S18876C3 */ AMB_check_base_class_offset(lv, (S18876C3*)(S18876C7*), ABISELECT(224,104), "S18876C5");
    check_base_class_offset(lv, (S18876C7*), ABISELECT(176,80), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C9 */ AMB_check_base_class_offset(lv, (S18876C10*)(S18876C9*), ABISELECT(48,20), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C9 */ AMB_check_base_class_offset(lv, (S18876C4*)(S18876C2*)(S18876C9*), ABISELECT(80,36), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C9 */ AMB_check_base_class_offset(lv, (S18876C2*)(S18876C9*), ABISELECT(80,36), "S18876C5");
    /*is_ambiguous_... S18876C5::S18876C9 */ AMB_check_base_class_offset(lv, (S18876C9*), ABISELECT(48,20), "S18876C5");
    test_class_info(&lv, &cd_S18876C5);
    dp->~S18876C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18876C5(Test_S18876C5, "S18876C5", ABISELECT(368,164));

#else // __cplusplus

extern void _ZN8S18876C5C1Ev();
extern void _ZN8S18876C5D1Ev();
Name_Map name_map_S18876C5[] = {
  NSPAIR(_ZN8S18876C5C1Ev),
  NSPAIR(_ZN8S18876C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18876C4;
extern VTBL_ENTRY _ZTI8S18876C4[];
extern  VTBL_ENTRY _ZTV8S18876C4[];
extern Class_Descriptor cd_S18876C6;
extern VTBL_ENTRY _ZTI8S18876C6[];
extern  VTBL_ENTRY _ZTV8S18876C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C6[];
extern Class_Descriptor cd_S18876C3;
extern VTBL_ENTRY _ZTI8S18876C3[];
extern  VTBL_ENTRY _ZTV8S18876C3[];
extern Class_Descriptor cd_S18876C4;
extern VTBL_ENTRY _ZTI8S18876C4[];
extern  VTBL_ENTRY _ZTV8S18876C4[];
extern Class_Descriptor cd_S18876C2;
extern VTBL_ENTRY _ZTI8S18876C2[];
extern  VTBL_ENTRY _ZTV8S18876C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C2[];
extern Class_Descriptor cd_S18876C4;
extern VTBL_ENTRY _ZTI8S18876C4[];
extern  VTBL_ENTRY _ZTV8S18876C4[];
extern Class_Descriptor cd_S18876C2;
extern VTBL_ENTRY _ZTI8S18876C2[];
extern  VTBL_ENTRY _ZTV8S18876C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C2[];
extern Class_Descriptor cd_S18876C8;
extern VTBL_ENTRY _ZTI8S18876C8[];
extern  VTBL_ENTRY _ZTV8S18876C8[];
extern Class_Descriptor cd_S18876C4;
extern VTBL_ENTRY _ZTI8S18876C4[];
extern  VTBL_ENTRY _ZTV8S18876C4[];
extern Class_Descriptor cd_S18876C2;
extern VTBL_ENTRY _ZTI8S18876C2[];
extern  VTBL_ENTRY _ZTV8S18876C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C2[];
extern Class_Descriptor cd_S18876C10;
extern VTBL_ENTRY _ZTI9S18876C10[];
extern  VTBL_ENTRY _ZTV9S18876C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18876C10[];
extern Class_Descriptor cd_S18876C4;
extern VTBL_ENTRY _ZTI8S18876C4[];
extern  VTBL_ENTRY _ZTV8S18876C4[];
extern Class_Descriptor cd_S18876C2;
extern VTBL_ENTRY _ZTI8S18876C2[];
extern  VTBL_ENTRY _ZTV8S18876C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C2[];
extern Class_Descriptor cd_S18876C9;
extern VTBL_ENTRY _ZTI8S18876C9[];
extern  VTBL_ENTRY _ZTV8S18876C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C9[];
extern Class_Descriptor cd_S18876C3;
extern VTBL_ENTRY _ZTI8S18876C3[];
extern  VTBL_ENTRY _ZTV8S18876C3[];
extern Class_Descriptor cd_S18876C7;
extern VTBL_ENTRY _ZTI8S18876C7[];
extern  VTBL_ENTRY _ZTV8S18876C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C7[];
extern Class_Descriptor cd_S18876C10;
extern VTBL_ENTRY _ZTI9S18876C10[];
extern  VTBL_ENTRY _ZTV9S18876C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S18876C10[];
extern Class_Descriptor cd_S18876C4;
extern VTBL_ENTRY _ZTI8S18876C4[];
extern  VTBL_ENTRY _ZTV8S18876C4[];
extern Class_Descriptor cd_S18876C2;
extern VTBL_ENTRY _ZTI8S18876C2[];
extern  VTBL_ENTRY _ZTV8S18876C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C2[];
extern Class_Descriptor cd_S18876C9;
extern VTBL_ENTRY _ZTI8S18876C9[];
extern  VTBL_ENTRY _ZTV8S18876C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C9[];
static Base_Class bases_S18876C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18876C4,    ABISELECT(128,60), //bcp->offset
    68, //bcp->virtual_function_table_offset
    9, //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_S18876C6,    ABISELECT(120,56), //bcp->offset
    63, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18876C3,    ABISELECT(240,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S18876C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S18876C2,    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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18876C4,    ABISELECT(176,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
    10, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S18876C2,    ABISELECT(176,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S18876C8,    ABISELECT(216,100), //bcp->offset
    122, //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
    12, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S18876C4,    ABISELECT(320,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
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S18876C2,    ABISELECT(320,144), //bcp->offset
    190, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S18876C10,    ABISELECT(240,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S18876C4,    ABISELECT(272,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
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S18876C2,    ABISELECT(272,124), //bcp->offset
    175, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S18876C9,    ABISELECT(240,108), //bcp->offset
    131, //bcp->virtual_function_table_offset
    29, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S18876C3,    ABISELECT(224,104), //bcp->offset
    125, //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
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S18876C7,    ABISELECT(176,80), //bcp->offset
    84, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18876C10,    ABISELECT(48,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S18876C4,    ABISELECT(80,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
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S18876C2,    ABISELECT(80,36), //bcp->offset
    48, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S18876C9,    ABISELECT(48,20), //bcp->offset
    24, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18876C5[];
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void _ZN8S18876C5D1Ev();
extern void _ZN8S18876C5D0Ev();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
extern void _ZN8S18876C53v20Ev();
extern void _ZN8S18876C53v21Ev();
extern void _ZN8S18876C53v22Ev();
extern void _ZN8S18876C53v23Ev();
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
extern void _ZN9S18876C103v26Ev();
extern void _ZN9S18876C103v27Ev();
extern void _ZN9S18876C103v28Ev();
extern void ABISELECT(_ZThn48_N8S18876C5D1Ev,_ZThn20_N8S18876C5D1Ev)();
extern void ABISELECT(_ZThn48_N8S18876C5D0Ev,_ZThn20_N8S18876C5D0Ev)();
extern void _ZN8S18876C93v29Ev();
extern void _ZN8S18876C93v30Ev();
extern void _ZN8S18876C93v31Ev();
extern void _ZN8S18876C93v32Ev();
extern void _ZN8S18876C93v33Ev();
extern void _ZN8S18876C93v34Ev();
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZThn80_N8S18876C5D1Ev,_ZThn36_N8S18876C5D1Ev)();
extern void ABISELECT(_ZThn80_N8S18876C5D0Ev,_ZThn36_N8S18876C5D0Ev)();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
extern void _ZN8S18876C63v24Ev();
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZTv0_n112_N8S18876C5D1Ev,_ZTv0_n56_N8S18876C5D1Ev)();
extern void ABISELECT(_ZThn176_N8S18876C5D1Ev,_ZThn80_N8S18876C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S18876C5D0Ev,_ZTv0_n56_N8S18876C5D0Ev)();
extern void ABISELECT(_ZThn176_N8S18876C5D0Ev,_ZThn80_N8S18876C5D0Ev)() __attribute__((weak));
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
extern void _ZN8S18876C73v35Ev();
extern void _ZN8S18876C73v36Ev();
extern void _ZN8S18876C83v25Ev();
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
extern void _ZN9S18876C103v26Ev();
extern void _ZN9S18876C103v27Ev();
extern void _ZN9S18876C103v28Ev();
extern void ABISELECT(_ZTv0_n104_N8S18876C5D1Ev,_ZTv0_n52_N8S18876C5D1Ev)();
extern void ABISELECT(_ZThn240_N8S18876C5D1Ev,_ZThn108_N8S18876C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S18876C5D0Ev,_ZTv0_n52_N8S18876C5D0Ev)();
extern void ABISELECT(_ZThn240_N8S18876C5D0Ev,_ZThn108_N8S18876C5D0Ev)() __attribute__((weak));
extern void _ZN8S18876C93v29Ev();
extern void _ZN8S18876C93v30Ev();
extern void _ZN8S18876C93v31Ev();
extern void _ZN8S18876C93v32Ev();
extern void _ZN8S18876C93v33Ev();
extern void _ZN8S18876C93v34Ev();
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZTvn32_n104_N8S18876C5D1Ev,_ZTvn16_n52_N8S18876C5D1Ev)();
extern void ABISELECT(_ZTvn32_n104_N8S18876C5D0Ev,_ZTvn16_n52_N8S18876C5D0Ev)();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZTv0_n88_N8S18876C5D1Ev,_ZTv0_n44_N8S18876C5D1Ev)();
extern void ABISELECT(_ZThn320_N8S18876C5D1Ev,_ZThn144_N8S18876C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S18876C5D0Ev,_ZTv0_n44_N8S18876C5D0Ev)();
extern void ABISELECT(_ZThn320_N8S18876C5D0Ev,_ZThn144_N8S18876C5D0Ev)() __attribute__((weak));
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY vtc_S18876C5[] = {
  ABISELECT(320,144),
  ABISELECT(240,108),
  ABISELECT(176,80),
  ABISELECT(128,60),
  ABISELECT(120,56),
  ABISELECT(240,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C5[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18876C5D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C5D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
  (VTBL_ENTRY)&_ZN8S18876C53v20Ev,
  (VTBL_ENTRY)&_ZN8S18876C53v21Ev,
  (VTBL_ENTRY)&_ZN8S18876C53v22Ev,
  (VTBL_ENTRY)&_ZN8S18876C53v23Ev,
  ABISELECT(80,40),
  ABISELECT(192,88),
  ABISELECT(272,124),
  ABISELECT(192,88),
  ABISELECT(192,88),
  ABISELECT(192,88),
  ABISELECT(192,88),
  ABISELECT(-48,-20),
  (VTBL_ENTRY)&(_ZTI8S18876C5[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v26Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v27Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S18876C5D1Ev,_ZThn20_N8S18876C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S18876C5D0Ev,_ZThn20_N8S18876C5D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C93v29Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v30Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v31Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v32Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v33Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v34Ev,
  ABISELECT(160,72),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S18876C5[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S18876C5D1Ev,_ZThn36_N8S18876C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S18876C5D0Ev,_ZThn36_N8S18876C5D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
  0,
  ABISELECT(8,4),
  ABISELECT(-120,-56),
  (VTBL_ENTRY)&(_ZTI8S18876C5[0]),
  (VTBL_ENTRY)&_ZN8S18876C63v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-60),
  (VTBL_ENTRY)&(_ZTI8S18876C5[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-80),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(144,64),
  ABISELECT(64,28),
  ABISELECT(-48,-20),
  ABISELECT(64,28),
  ABISELECT(-176,-80),
  (VTBL_ENTRY)&(_ZTI8S18876C5[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S18876C5D1Ev,_ZTv0_n56_N8S18876C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S18876C5D0Ev,_ZTv0_n56_N8S18876C5D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
  (VTBL_ENTRY)&_ZN8S18876C73v35Ev,
  (VTBL_ENTRY)&_ZN8S18876C73v36Ev,
  ABISELECT(-216,-100),
  (VTBL_ENTRY)&(_ZTI8S18876C5[0]),
  (VTBL_ENTRY)&_ZN8S18876C83v25Ev,
  ABISELECT(-224,-104),
  (VTBL_ENTRY)&(_ZTI8S18876C5[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-108),
  0,
  0,
  0,
  ABISELECT(-112,-48),
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  ABISELECT(-240,-108),
  (VTBL_ENTRY)&(_ZTI8S18876C5[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v26Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v27Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S18876C5D1Ev,_ZTv0_n52_N8S18876C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S18876C5D0Ev,_ZTv0_n52_N8S18876C5D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C93v29Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v30Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v31Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v32Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v33Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v34Ev,
  ABISELECT(-32,-16),
  ABISELECT(-272,-124),
  (VTBL_ENTRY)&(_ZTI8S18876C5[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N8S18876C5D1Ev,_ZTvn16_n52_N8S18876C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N8S18876C5D0Ev,_ZTvn16_n52_N8S18876C5D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
  0,
  0,
  0,
  ABISELECT(-320,-144),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-320,-144),
  (VTBL_ENTRY)&(_ZTI8S18876C5[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18876C5D1Ev,_ZTv0_n44_N8S18876C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18876C5D0Ev,_ZTv0_n44_N8S18876C5D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern VTBL_ENTRY _ZTV8S18876C5[];
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void _ZN8S18876C2D1Ev();
extern void _ZN8S18876C2D0Ev();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C2__A__8S18876C5[] = {
  ABISELECT(240,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C3__8S18876C2__A__8S18876C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-240,-108),
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
extern void _ZN9S18876C103v26Ev();
extern void _ZN9S18876C103v27Ev();
extern void _ZN9S18876C103v28Ev();
extern void _ZN8S18876C9D1Ev();
extern void _ZN8S18876C9D0Ev();
extern void _ZN8S18876C93v29Ev();
extern void _ZN8S18876C93v30Ev();
extern void _ZN8S18876C93v31Ev();
extern void _ZN8S18876C93v32Ev();
extern void _ZN8S18876C93v33Ev();
extern void _ZN8S18876C93v34Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C9__A__8S18876C5[] = {
  ABISELECT(80,40),
  ABISELECT(192,88),
  ABISELECT(272,124),
  ABISELECT(192,88),
  ABISELECT(192,88),
  ABISELECT(192,88),
  ABISELECT(192,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C9[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v26Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v27Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v28Ev,
  (VTBL_ENTRY)&_ZN8S18876C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C9D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v29Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v30Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v31Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v32Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v33Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v34Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
extern void _ZN9S18876C103v26Ev();
extern void _ZN9S18876C103v27Ev();
extern void _ZN9S18876C103v28Ev();
extern void _ZN9S18876C10D1Ev();
extern void _ZN9S18876C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18876C108S18876C9__A1__8S18876C5[] = {
  ABISELECT(192,88),
  ABISELECT(272,124),
  ABISELECT(192,88),
  ABISELECT(192,88),
  ABISELECT(192,88),
  ABISELECT(192,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S18876C10[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v26Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v27Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v28Ev,
  (VTBL_ENTRY)&_ZN9S18876C10D1Ev,
  (VTBL_ENTRY)&_ZN9S18876C10D0Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZTv0_n88_N9S18876C10D1Ev,_ZTv0_n44_N9S18876C10D1Ev)();
extern void ABISELECT(_ZThn272_N9S18876C10D1Ev,_ZThn124_N9S18876C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N9S18876C10D0Ev,_ZTv0_n44_N9S18876C10D0Ev)();
extern void ABISELECT(_ZThn272_N9S18876C10D0Ev,_ZThn124_N9S18876C10D0Ev)() __attribute__((weak));
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C2__9S18876C108S18876C9__A1__8S18876C5[] = {
  0,
  0,
  0,
  ABISELECT(-272,-124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-272,-124),
  (VTBL_ENTRY)&(_ZTI9S18876C10[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N9S18876C10D1Ev,_ZTv0_n44_N9S18876C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N9S18876C10D0Ev,_ZTv0_n44_N9S18876C10D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C3__9S18876C108S18876C9__A1__8S18876C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-192,-88),
  (VTBL_ENTRY)&(_ZTI9S18876C10[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void _ZN8S18876C2D1Ev();
extern void _ZN8S18876C2D0Ev();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C28S18876C9__A4__8S18876C5[] = {
  ABISELECT(160,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C3__8S18876C28S18876C9__A4__8S18876C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-160,-72),
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C3__8S18876C9__A__8S18876C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-192,-88),
  (VTBL_ENTRY)&(_ZTI8S18876C9[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C4__8S18876C9__A__8S18876C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S18876C9[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZTv0_n88_N8S18876C9D1Ev,_ZTv0_n44_N8S18876C9D1Ev)();
extern void ABISELECT(_ZThn272_N8S18876C9D1Ev,_ZThn124_N8S18876C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S18876C9D0Ev,_ZTv0_n44_N8S18876C9D0Ev)();
extern void ABISELECT(_ZThn272_N8S18876C9D0Ev,_ZThn124_N8S18876C9D0Ev)() __attribute__((weak));
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C2__8S18876C9__A__8S18876C5[] = {
  0,
  0,
  0,
  ABISELECT(-272,-124),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-272,-124),
  (VTBL_ENTRY)&(_ZTI8S18876C9[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18876C9D1Ev,_ZTv0_n44_N8S18876C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18876C9D0Ev,_ZTv0_n44_N8S18876C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZThn32_N8S18876C9D1Ev,_ZThn16_N8S18876C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S18876C9D0Ev,_ZThn16_N8S18876C9D0Ev)();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C2__A__8S18876C9__A__8S18876C5[] = {
  ABISELECT(160,72),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S18876C9[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S18876C9D1Ev,_ZThn16_N8S18876C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S18876C9D0Ev,_ZThn16_N8S18876C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C63v24Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C6__8S18876C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C6[0]),
  (VTBL_ENTRY)&_ZN8S18876C63v24Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C4__8S18876C6__8S18876C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S18876C6[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void _ZN8S18876C7D1Ev();
extern void _ZN8S18876C7D0Ev();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
extern void _ZN8S18876C73v35Ev();
extern void _ZN8S18876C73v36Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C7__8S18876C5[] = {
  ABISELECT(144,64),
  ABISELECT(64,28),
  ABISELECT(-48,-20),
  ABISELECT(64,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C7[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18876C7D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C7D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
  (VTBL_ENTRY)&_ZN8S18876C73v35Ev,
  (VTBL_ENTRY)&_ZN8S18876C73v36Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void _ZN8S18876C2D1Ev();
extern void _ZN8S18876C2D0Ev();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C28S18876C7__A1__8S18876C5[] = {
  ABISELECT(64,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C3__8S18876C28S18876C7__A1__8S18876C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
extern void _ZN9S18876C103v26Ev();
extern void _ZN9S18876C103v27Ev();
extern void _ZN9S18876C103v28Ev();
extern void ABISELECT(_ZTv0_n104_N8S18876C7D1Ev,_ZTv0_n52_N8S18876C7D1Ev)();
extern void ABISELECT(_ZThn64_N8S18876C7D1Ev,_ZThn28_N8S18876C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S18876C7D0Ev,_ZTv0_n52_N8S18876C7D0Ev)();
extern void ABISELECT(_ZThn64_N8S18876C7D0Ev,_ZThn28_N8S18876C7D0Ev)() __attribute__((weak));
extern void _ZN8S18876C93v29Ev();
extern void _ZN8S18876C93v30Ev();
extern void _ZN8S18876C93v31Ev();
extern void _ZN8S18876C93v32Ev();
extern void _ZN8S18876C93v33Ev();
extern void _ZN8S18876C93v34Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C9__8S18876C7__8S18876C5[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-28),
  0,
  0,
  0,
  ABISELECT(-112,-48),
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S18876C7[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v26Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v27Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v28Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S18876C7D1Ev,_ZTv0_n52_N8S18876C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S18876C7D0Ev,_ZTv0_n52_N8S18876C7D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C93v29Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v30Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v31Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v32Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v33Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v34Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C4__A1__8S18876C7__8S18876C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI8S18876C7[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZTv0_n88_N8S18876C7D1Ev,_ZTv0_n44_N8S18876C7D1Ev)();
extern void ABISELECT(_ZThn144_N8S18876C7D1Ev,_ZThn64_N8S18876C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S18876C7D0Ev,_ZTv0_n44_N8S18876C7D0Ev)();
extern void ABISELECT(_ZThn144_N8S18876C7D0Ev,_ZThn64_N8S18876C7D0Ev)() __attribute__((weak));
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C2__A1__8S18876C7__8S18876C5[] = {
  0,
  0,
  0,
  ABISELECT(-144,-64),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-144,-64),
  (VTBL_ENTRY)&(_ZTI8S18876C7[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18876C7D1Ev,_ZTv0_n44_N8S18876C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18876C7D0Ev,_ZTv0_n44_N8S18876C7D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZTvn32_n104_N8S18876C7D1Ev,_ZTvn16_n52_N8S18876C7D1Ev)();
extern void ABISELECT(_ZTvn32_n104_N8S18876C7D0Ev,_ZTvn16_n52_N8S18876C7D0Ev)();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C28S18876C9__A2__8S18876C7__8S18876C5[] = {
  ABISELECT(-32,-16),
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI8S18876C7[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N8S18876C7D1Ev,_ZTvn16_n52_N8S18876C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N8S18876C7D0Ev,_ZTvn16_n52_N8S18876C7D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
extern void _ZN9S18876C103v26Ev();
extern void _ZN9S18876C103v27Ev();
extern void _ZN9S18876C103v28Ev();
extern void _ZN8S18876C9D1Ev();
extern void _ZN8S18876C9D0Ev();
extern void _ZN8S18876C93v29Ev();
extern void _ZN8S18876C93v30Ev();
extern void _ZN8S18876C93v31Ev();
extern void _ZN8S18876C93v32Ev();
extern void _ZN8S18876C93v33Ev();
extern void _ZN8S18876C93v34Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C9__8S18876C5[] = {
  ABISELECT(-112,-48),
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C9[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v26Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v27Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v28Ev,
  (VTBL_ENTRY)&_ZN8S18876C9D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C9D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v29Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v30Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v31Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v32Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v33Ev,
  (VTBL_ENTRY)&_ZN8S18876C93v34Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
extern void _ZN9S18876C103v26Ev();
extern void _ZN9S18876C103v27Ev();
extern void _ZN9S18876C103v28Ev();
extern void _ZN9S18876C10D1Ev();
extern void _ZN9S18876C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S18876C108S18876C9__8S18876C5[] = {
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S18876C10[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v26Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v27Ev,
  (VTBL_ENTRY)&_ZN9S18876C103v28Ev,
  (VTBL_ENTRY)&_ZN9S18876C10D1Ev,
  (VTBL_ENTRY)&_ZN9S18876C10D0Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZTv0_n88_N9S18876C10D1Ev,_ZTv0_n44_N9S18876C10D1Ev)();
extern void ABISELECT(_ZThn80_N9S18876C10D1Ev,_ZThn36_N9S18876C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N9S18876C10D0Ev,_ZTv0_n44_N9S18876C10D0Ev)();
extern void ABISELECT(_ZThn80_N9S18876C10D0Ev,_ZThn36_N9S18876C10D0Ev)() __attribute__((weak));
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C2__9S18876C108S18876C9__8S18876C5[] = {
  0,
  0,
  0,
  ABISELECT(-80,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI9S18876C10[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N9S18876C10D1Ev,_ZTv0_n44_N9S18876C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N9S18876C10D0Ev,_ZTv0_n44_N9S18876C10D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void _ZN8S18876C2D1Ev();
extern void _ZN8S18876C2D0Ev();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C28S18876C9__A3__8S18876C5[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C3__8S18876C28S18876C9__A3__8S18876C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C4__8S18876C9__8S18876C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(112,48),
  (VTBL_ENTRY)&(_ZTI8S18876C9[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZTv0_n88_N8S18876C9D1Ev,_ZTv0_n44_N8S18876C9D1Ev)();
extern void ABISELECT(_ZThn80_N8S18876C9D1Ev,_ZThn36_N8S18876C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S18876C9D0Ev,_ZTv0_n44_N8S18876C9D0Ev)();
extern void ABISELECT(_ZThn80_N8S18876C9D0Ev,_ZThn36_N8S18876C9D0Ev)() __attribute__((weak));
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C2__8S18876C9__8S18876C5[] = {
  0,
  0,
  0,
  ABISELECT(-80,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S18876C9[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18876C9D1Ev,_ZTv0_n44_N8S18876C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18876C9D0Ev,_ZTv0_n44_N8S18876C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void ABISELECT(_ZThn32_N8S18876C9D1Ev,_ZThn16_N8S18876C9D1Ev)();
extern void ABISELECT(_ZThn32_N8S18876C9D0Ev,_ZThn16_N8S18876C9D0Ev)();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C2__A__8S18876C9__8S18876C5[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S18876C9[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S18876C9D1Ev,_ZThn16_N8S18876C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S18876C9D0Ev,_ZThn16_N8S18876C9D0Ev),
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C43v13Ev();
extern void _ZN8S18876C43v14Ev();
extern void _ZN8S18876C43v15Ev();
extern void _ZN8S18876C43v16Ev();
extern void _ZN8S18876C43v17Ev();
extern void _ZN8S18876C43v18Ev();
extern void _ZN8S18876C43v19Ev();
extern void _ZN8S18876C2D1Ev();
extern void _ZN8S18876C2D0Ev();
extern void _ZN8S18876C22v6Ev();
extern void _ZN8S18876C22v7Ev();
extern void _ZN8S18876C22v8Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C2__A2__8S18876C5[] = {
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v15Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v16Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18876C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v6Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v7Ev,
  (VTBL_ENTRY)&_ZN8S18876C22v8Ev,
};
extern void _ZN8S18876C32v9Ev();
extern void _ZN8S18876C33v10Ev();
extern void _ZN8S18876C33v11Ev();
extern void _ZN8S18876C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S18876C3__8S18876C2__A2__8S18876C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI8S18876C2[0]),
  (VTBL_ENTRY)&_ZN8S18876C32v9Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v10Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v11Ev,
  (VTBL_ENTRY)&_ZN8S18876C33v12Ev,
};
static  VTT_ENTRY vtt_S18876C5[] = {
  {&(_ZTV8S18876C5[8]),  8,216},
  {&(_tg__ZTV8S18876C2__A__8S18876C5[3]),  3,15},
  {&(_tg__ZTV8S18876C3__8S18876C2__A__8S18876C5[6]),  6,10},
  {&(_tg__ZTV8S18876C9__A__8S18876C5[9]),  9,24},
  {&(_tg__ZTV9S18876C108S18876C9__A1__8S18876C5[8]),  8,17},
  {&(_tg__ZTV8S18876C2__9S18876C108S18876C9__A1__8S18876C5[14]),  14,26},
  {&(_tg__ZTV8S18876C3__9S18876C108S18876C9__A1__8S18876C5[6]),  6,10},
  {&(_tg__ZTV8S18876C28S18876C9__A4__8S18876C5[3]),  3,15},
  {&(_tg__ZTV8S18876C3__8S18876C28S18876C9__A4__8S18876C5[6]),  6,10},
  {&(_tg__ZTV8S18876C3__8S18876C9__A__8S18876C5[6]),  6,10},
  {&(_tg__ZTV8S18876C4__8S18876C9__A__8S18876C5[9]),  9,16},
  {&(_tg__ZTV8S18876C2__8S18876C9__A__8S18876C5[14]),  14,26},
  {&(_tg__ZTV8S18876C2__A__8S18876C9__A__8S18876C5[3]),  3,15},
  {&(_ZTV8S18876C5[67]),  67,216},
  {&(_ZTV8S18876C5[77]),  77,216},
  {&(_ZTV8S18876C5[160]),  160,216},
  {&(_ZTV8S18876C5[108]),  108,216},
  {&(_ZTV8S18876C5[124]),  124,216},
  {&(_ZTV8S18876C5[160]),  160,216},
  {&(_ZTV8S18876C5[204]),  204,216},
  {&(_ZTV8S18876C5[178]),  178,216},
  {&(_ZTV8S18876C5[127]),  127,216},
  {&(_ZTV8S18876C5[33]),  33,216},
  {&(_ZTV8S18876C5[51]),  51,216},
  {&(_tg__ZTV8S18876C6__8S18876C5[3]),  3,4},
  {&(_tg__ZTV8S18876C4__8S18876C6__8S18876C5[9]),  9,16},
  {&(_tg__ZTV8S18876C7__8S18876C5[6]),  6,20},
  {&(_tg__ZTV8S18876C28S18876C7__A1__8S18876C5[3]),  3,15},
  {&(_tg__ZTV8S18876C3__8S18876C28S18876C7__A1__8S18876C5[6]),  6,10},
  {&(_tg__ZTV8S18876C9__8S18876C7__8S18876C5[29]),  29,44},
  {&(_tg__ZTV8S18876C4__A1__8S18876C7__8S18876C5[9]),  9,16},
  {&(_tg__ZTV8S18876C9__8S18876C7__8S18876C5[29]),  29,44},
  {&(_tg__ZTV8S18876C2__A1__8S18876C7__8S18876C5[14]),  14,26},
  {&(_tg__ZTV8S18876C28S18876C9__A2__8S18876C7__8S18876C5[3]),  3,15},
  {&(_tg__ZTV8S18876C9__8S18876C5[9]),  9,24},
  {&(_tg__ZTV9S18876C108S18876C9__8S18876C5[8]),  8,17},
  {&(_tg__ZTV8S18876C2__9S18876C108S18876C9__8S18876C5[14]),  14,26},
  {&(_tg__ZTV9S18876C108S18876C9__8S18876C5[8]),  8,17},
  {&(_tg__ZTV8S18876C28S18876C9__A3__8S18876C5[3]),  3,15},
  {&(_tg__ZTV8S18876C3__8S18876C28S18876C9__A3__8S18876C5[6]),  6,10},
  {&(_tg__ZTV8S18876C9__8S18876C5[9]),  9,24},
  {&(_tg__ZTV8S18876C4__8S18876C9__8S18876C5[9]),  9,16},
  {&(_tg__ZTV8S18876C2__8S18876C9__8S18876C5[14]),  14,26},
  {&(_tg__ZTV8S18876C2__A__8S18876C9__8S18876C5[3]),  3,15},
  {&(_tg__ZTV8S18876C2__A2__8S18876C5[3]),  3,15},
  {&(_tg__ZTV8S18876C3__8S18876C2__A2__8S18876C5[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S18876C5[];
extern  VTBL_ENTRY _ZTV8S18876C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18876C5[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18876C7D0Ev,_ZTv0_n44_N8S18876C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S18876C7D0Ev,_ZThn64_N8S18876C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18876C7D1Ev,_ZTv0_n44_N8S18876C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S18876C7D1Ev,_ZThn64_N8S18876C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S18876C7D0Ev,_ZTv0_n52_N8S18876C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S18876C7D0Ev,_ZThn28_N8S18876C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S18876C7D1Ev,_ZTv0_n52_N8S18876C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S18876C7D1Ev,_ZThn28_N8S18876C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18876C9D0Ev,_ZTv0_n44_N8S18876C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S18876C9D0Ev,_ZThn36_N8S18876C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S18876C9D0Ev,_ZThn124_N8S18876C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18876C9D1Ev,_ZTv0_n44_N8S18876C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S18876C9D1Ev,_ZThn36_N8S18876C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S18876C9D1Ev,_ZThn124_N8S18876C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N9S18876C10D0Ev,_ZTv0_n44_N9S18876C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S18876C10D0Ev,_ZThn36_N9S18876C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S18876C10D0Ev,_ZThn124_N9S18876C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N9S18876C10D1Ev,_ZTv0_n44_N9S18876C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S18876C10D1Ev,_ZThn36_N9S18876C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N9S18876C10D1Ev,_ZThn124_N9S18876C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18876C5D0Ev,_ZTv0_n44_N8S18876C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S18876C5D0Ev,_ZThn144_N8S18876C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18876C5D1Ev,_ZTv0_n44_N8S18876C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S18876C5D1Ev,_ZThn144_N8S18876C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S18876C5D0Ev,_ZTv0_n52_N8S18876C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S18876C5D0Ev,_ZThn108_N8S18876C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S18876C5D1Ev,_ZTv0_n52_N8S18876C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S18876C5D1Ev,_ZThn108_N8S18876C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S18876C5D0Ev,_ZTv0_n56_N8S18876C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S18876C5D0Ev,_ZThn80_N8S18876C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S18876C5D1Ev,_ZTv0_n56_N8S18876C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S18876C5D1Ev,_ZThn80_N8S18876C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18876C5 = {  "S18876C5", // class name
  bases_S18876C5, 20,
  &(vtc_S18876C5[0]), // expected_vtbl_contents
  &(vtt_S18876C5[0]), // expected_vtt_contents
  ABISELECT(368,164), // object size
  NSPAIRA(_ZTI8S18876C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S18876C5),216, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18876C5),46, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18876C1  {
  ::S18876C2 s18876c1f0;
  ::S18876C5 s18876c1f1[2];
  long double s18876c1f2;
  int s18876c1f3:17;
  void *s18876c1f4;
  virtual  ~S18876C1(); // _ZN8S18876C1D1Ev
  virtual void  v1(); // _ZN8S18876C12v1Ev
  virtual void  v2(); // _ZN8S18876C12v2Ev
  virtual void  v3(); // _ZN8S18876C12v3Ev
  virtual void  v4(); // _ZN8S18876C12v4Ev
  virtual void  v5(); // _ZN8S18876C12v5Ev
  S18876C1(); // tgen
};
//SIG(1 S18876C1) C1{ vd v1 v2 v3 v4 v5 FC2{ VBC3{ v9 v10 v11 v12} BC4{ v13 v14 v15 v16 v17 v18 v19 FD Fp} vd v6 v7 v8} FC5{ VBC6{ VBC4 v24} BC2 VBC7{ BC2 BC8{ v25} VBC4 VBC9{ VBC3 VBC4 BC10{ VBC2 v26 v27 v28 Fi FL} BC2 v29 v30 v31 v32 v33 v34} BC3 v35 v36} BC9 v20 v21 v22 v23}[2] FD Fi:17 Fp}


 S18876C1 ::~S18876C1(){ note_dtor("S18876C1", this);}
void  S18876C1 ::v1(){vfunc_called(this, "_ZN8S18876C12v1Ev");}
void  S18876C1 ::v2(){vfunc_called(this, "_ZN8S18876C12v2Ev");}
void  S18876C1 ::v3(){vfunc_called(this, "_ZN8S18876C12v3Ev");}
void  S18876C1 ::v4(){vfunc_called(this, "_ZN8S18876C12v4Ev");}
void  S18876C1 ::v5(){vfunc_called(this, "_ZN8S18876C12v5Ev");}
S18876C1 ::S18876C1(){ note_ctor("S18876C1", this);} // tgen

static void Test_S18876C1()
{
  extern Class_Descriptor cd_S18876C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,95)];
    init_test(&cd_S18876C1, buf);
    S18876C1 *dp, &lv = *(dp=new (buf) S18876C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,376), "sizeof(S18876C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18876C1)");
    check_field_offset(lv, s18876c1f0, ABISELECT(16,4), "S18876C1.s18876c1f0");
    check_field_offset(lv, s18876c1f1, ABISELECT(64,28), "S18876C1.s18876c1f1");
    check_field_offset(lv, s18876c1f2, ABISELECT(800,356), "S18876C1.s18876c1f2");
    set_bf_and_test(lv, s18876c1f3, ABISELECT(816,368), 0, 17, 1, "S18876C1");
    set_bf_and_test(lv, s18876c1f3, ABISELECT(816,368), 0, 17, hide_sll(1LL<<16), "S18876C1");
    check_field_offset(lv, s18876c1f4, ABISELECT(824,372), "S18876C1.s18876c1f4");
    test_class_info(&lv, &cd_S18876C1);
    dp->~S18876C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18876C1(Test_S18876C1, "S18876C1", ABISELECT(832,376));

#else // __cplusplus

extern void _ZN8S18876C1C1Ev();
extern void _ZN8S18876C1D1Ev();
Name_Map name_map_S18876C1[] = {
  NSPAIR(_ZN8S18876C1C1Ev),
  NSPAIR(_ZN8S18876C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18876C1[];
extern void _ZN8S18876C1D1Ev();
extern void _ZN8S18876C1D0Ev();
extern void _ZN8S18876C12v1Ev();
extern void _ZN8S18876C12v2Ev();
extern void _ZN8S18876C12v3Ev();
extern void _ZN8S18876C12v4Ev();
extern void _ZN8S18876C12v5Ev();
static  VTBL_ENTRY vtc_S18876C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18876C1[0]),
  (VTBL_ENTRY)&_ZN8S18876C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18876C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18876C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18876C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18876C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18876C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18876C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S18876C1[];
extern  VTBL_ENTRY _ZTV8S18876C1[];
Class_Descriptor cd_S18876C1 = {  "S18876C1", // class name
  0,0,//no base classes
  &(vtc_S18876C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,376), // object size
  NSPAIRA(_ZTI8S18876C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18876C1),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  S21197C4  : S19917C5 {
  int s21197c4f0;
  void *s21197c4f1[4];
  long double s21197c4f2[5];
  void *s21197c4f3[2];
  ::S19917C5 s21197c4f4;
  long s21197c4f5[3];
  virtual  ~S21197C4(); // _ZN8S21197C4D1Ev
  virtual void  v2(); // _ZN8S21197C42v2Ev
  virtual void  v3(); // _ZN8S21197C42v3Ev
  S21197C4(); // tgen
};
//SIG(-1 S21197C4) C1{ BC2{ vd m Fp FD Fi Fp} vd v1 v2 Fi Fp[4] FD[5] Fp[2] FC2 Fl[3]}


 S21197C4 ::~S21197C4(){ note_dtor("S21197C4", this);}
void  S21197C4 ::v2(){vfunc_called(this, "_ZN8S21197C42v2Ev");}
void  S21197C4 ::v3(){vfunc_called(this, "_ZN8S21197C42v3Ev");}
S21197C4 ::S21197C4(){ note_ctor("S21197C4", this);} // tgen

static void Test_S21197C4()
{
  extern Class_Descriptor cd_S21197C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,40)];
    init_test(&cd_S21197C4, buf);
    S21197C4 *dp, &lv = *(dp=new (buf) S21197C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,156), "sizeof(S21197C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21197C4)");
    check_base_class_offset(lv, (S19917C5*), 0, "S21197C4");
    check_field_offset(lv, s21197c4f0, ABISELECT(48,28), "S21197C4.s21197c4f0");
    check_field_offset(lv, s21197c4f1, ABISELECT(56,32), "S21197C4.s21197c4f1");
    check_field_offset(lv, s21197c4f2, ABISELECT(96,48), "S21197C4.s21197c4f2");
    check_field_offset(lv, s21197c4f3, ABISELECT(176,108), "S21197C4.s21197c4f3");
    check_field_offset(lv, s21197c4f4, ABISELECT(192,116), "S21197C4.s21197c4f4");
    check_field_offset(lv, s21197c4f5, ABISELECT(240,144), "S21197C4.s21197c4f5");
    test_class_info(&lv, &cd_S21197C4);
    dp->~S21197C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21197C4(Test_S21197C4, "S21197C4", ABISELECT(272,156));

#else // __cplusplus

extern void _ZN8S21197C4C1Ev();
extern void _ZN8S21197C4D1Ev();
Name_Map name_map_S21197C4[] = {
  NSPAIR(_ZN8S21197C4C1Ev),
  NSPAIR(_ZN8S21197C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
static Base_Class bases_S21197C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S21197C4[];
extern void _ZN8S21197C4D1Ev();
extern void _ZN8S21197C4D0Ev();
extern void _ZN8S21197C42v2Ev();
extern void _ZN8S21197C42v3Ev();
static  VTBL_ENTRY vtc_S21197C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21197C4[0]),
  (VTBL_ENTRY)&_ZN8S21197C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21197C4D0Ev,
  (VTBL_ENTRY)&_ZN8S21197C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21197C42v3Ev,
};
extern VTBL_ENTRY _ZTI8S21197C4[];
extern  VTBL_ENTRY _ZTV8S21197C4[];
Class_Descriptor cd_S21197C4 = {  "S21197C4", // class name
  bases_S21197C4, 1,
  &(vtc_S21197C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,156), // object size
  NSPAIRA(_ZTI8S21197C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S21197C4),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  S21197C5  {
  __tsi64 s21197c5f0;
  int s21197c5f1;
  ::S21197C4 s21197c5f2;
  int s21197c5f3;
  ::S19917C5 s21197c5f4;
  void *s21197c5f5;
  int s21197c5f6;
  ::S21197C4 s21197c5f7;
  long double s21197c5f8;
  virtual  ~S21197C5(); // _ZN8S21197C5D1Ev
  virtual void  v1(); // _ZN8S21197C52v1Ev
  S21197C5(); // tgen
};
//SIG(-1 S21197C5) C1{ vd v1 FL Fi FC2{ BC3{ vd m Fp FD Fi Fp} vd v2 v3 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} Fi FC3 Fp Fi FC2 FD}


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

static void Test_S21197C5()
{
  extern Class_Descriptor cd_S21197C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(43,96)];
    init_test(&cd_S21197C5, buf);
    S21197C5 *dp, &lv = *(dp=new (buf) S21197C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(672,380), "sizeof(S21197C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21197C5)");
    check_field_offset(lv, s21197c5f0, ABISELECT(8,4), "S21197C5.s21197c5f0");
    check_field_offset(lv, s21197c5f1, ABISELECT(16,12), "S21197C5.s21197c5f1");
    check_field_offset(lv, s21197c5f2, ABISELECT(32,16), "S21197C5.s21197c5f2");
    check_field_offset(lv, s21197c5f3, ABISELECT(304,172), "S21197C5.s21197c5f3");
    check_field_offset(lv, s21197c5f4, ABISELECT(320,176), "S21197C5.s21197c5f4");
    check_field_offset(lv, s21197c5f5, ABISELECT(368,204), "S21197C5.s21197c5f5");
    check_field_offset(lv, s21197c5f6, ABISELECT(376,208), "S21197C5.s21197c5f6");
    check_field_offset(lv, s21197c5f7, ABISELECT(384,212), "S21197C5.s21197c5f7");
    check_field_offset(lv, s21197c5f8, ABISELECT(656,368), "S21197C5.s21197c5f8");
    test_class_info(&lv, &cd_S21197C5);
    dp->~S21197C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21197C5(Test_S21197C5, "S21197C5", ABISELECT(672,380));

#else // __cplusplus

extern void _ZN8S21197C5C1Ev();
extern void _ZN8S21197C5D1Ev();
Name_Map name_map_S21197C5[] = {
  NSPAIR(_ZN8S21197C5C1Ev),
  NSPAIR(_ZN8S21197C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21197C5[];
extern void _ZN8S21197C5D1Ev();
extern void _ZN8S21197C5D0Ev();
extern void _ZN8S21197C52v1Ev();
static  VTBL_ENTRY vtc_S21197C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21197C5[0]),
  (VTBL_ENTRY)&_ZN8S21197C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21197C5D0Ev,
  (VTBL_ENTRY)&_ZN8S21197C52v1Ev,
};
extern VTBL_ENTRY _ZTI8S21197C5[];
extern  VTBL_ENTRY _ZTV8S21197C5[];
Class_Descriptor cd_S21197C5 = {  "S21197C5", // class name
  0,0,//no base classes
  &(vtc_S21197C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(672,380), // object size
  NSPAIRA(_ZTI8S21197C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21197C5),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21197C1  : virtual S19917C5 , S19917C3 , S21197C5 , S21197C4 {
  int s21197c1f0;
  ::S19917C3 s21197c1f1;
  ::S21198C11 s21197c1f2;
  virtual  ~S21197C1(); // _ZN8S21197C1D2Ev
  S21197C1(); // tgen
};
//SIG(1 S21197C1) C1{ VBC2{ vd m Fp FD Fi Fp} BC3{ vd m FC4{ BC2 vd v4 v5 Fi Fp[4] FD[5] Fp[2] FC2 Fl[3]} FD[3] Fp} BC5{ vd v1 FL Fi FC6{ BC2 vd v2 v3 Fi Fp[4] FD[5] Fp[2] FC2 Fl[3]} Fi FC2 Fp Fi FC6 FD} BC6 vd Fi FC3 FC7{ VBC8{ BC2 v6 v7 FL[2] FC2 Fi[3] Fp[4] FC9{ BC2 vd v10 v11 Fi Fp[4] FD[5] Fp[2] FC2 Fl[3]} Fc:5} BC10{ VBC8 BC2 vd v8 Fi} BC11{ vd v9 FL Fi FC9 Fi FC2 Fp Fi FC9 FD} VBC3 vd FC12{} FD[10] FC10 FC11 Fi}}


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

static void Test_S21197C1()
{
  extern Class_Descriptor cd_S21197C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(289,661)];
    init_test(&cd_S21197C1, buf);
    S21197C1 *dp, &lv = *(dp=new (buf) S21197C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4608,2640), "sizeof(S21197C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21197C1)");
    /*is_ambiguous_... S21197C1::S19917C5 */ AMB_check_base_class_offset(lv, (S19917C5*), ABISELECT(4560,2612), "S21197C1");
    check_base_class_offset(lv, (S19917C3*), 0, "S21197C1");
    check_base_class_offset(lv, (S21197C5*), ABISELECT(352,200), "S21197C1");
    check_base_class_offset(lv, (S19917C5*)(S21197C4*), ABISELECT(1024,580), "S21197C1");
    check_base_class_offset(lv, (S21197C4*), ABISELECT(1024,580), "S21197C1");
    check_field_offset(lv, s21197c1f0, ABISELECT(1288,736), "S21197C1.s21197c1f0");
    check_field_offset(lv, s21197c1f1, ABISELECT(1296,740), "S21197C1.s21197c1f1");
    check_field_offset(lv, s21197c1f2, ABISELECT(1648,940), "S21197C1.s21197c1f2");
    test_class_info(&lv, &cd_S21197C1);
    dp->~S21197C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21197C1(Test_S21197C1, "S21197C1", ABISELECT(4608,2640));

#else // __cplusplus

extern void _ZN8S21197C1C1Ev();
extern void _ZN8S21197C1D2Ev();
Name_Map name_map_S21197C1[] = {
  NSPAIR(_ZN8S21197C1C1Ev),
  NSPAIR(_ZN8S21197C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19917C3;
extern VTBL_ENTRY _ZTI8S19917C3[];
extern  VTBL_ENTRY _ZTV8S19917C3[];
extern Class_Descriptor cd_S21197C5;
extern VTBL_ENTRY _ZTI8S21197C5[];
extern  VTBL_ENTRY _ZTV8S21197C5[];
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S21197C4;
extern VTBL_ENTRY _ZTI8S21197C4[];
extern  VTBL_ENTRY _ZTV8S21197C4[];
static Base_Class bases_S21197C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    ABISELECT(4560,2612), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19917C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S21197C5,    ABISELECT(352,200), //bcp->offset
    5, //bcp->virtual_function_table_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_S19917C5,    ABISELECT(1024,580), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21197C4,    ABISELECT(1024,580), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21197C1[];
extern void _ZN8S21197C1D1Ev();
extern void _ZN8S21197C1D0Ev();
extern void ABISELECT(_ZThn352_N8S21197C1D1Ev,_ZThn200_N8S21197C1D1Ev)();
extern void ABISELECT(_ZThn352_N8S21197C1D0Ev,_ZThn200_N8S21197C1D0Ev)();
extern void _ZN8S21197C52v1Ev();
extern void ABISELECT(_ZThn1024_N8S21197C1D1Ev,_ZThn580_N8S21197C1D1Ev)();
extern void ABISELECT(_ZThn1024_N8S21197C1D0Ev,_ZThn580_N8S21197C1D0Ev)();
extern void _ZN8S21197C42v2Ev();
extern void _ZN8S21197C42v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21197C1D1Ev,_ZTv0_n12_N8S21197C1D1Ev)();
extern void ABISELECT(_ZThn4560_N8S21197C1D1Ev,_ZThn2612_N8S21197C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21197C1D0Ev,_ZTv0_n12_N8S21197C1D0Ev)();
extern void ABISELECT(_ZThn4560_N8S21197C1D0Ev,_ZThn2612_N8S21197C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21197C1[] = {
  ABISELECT(4560,2612),
  0,
  (VTBL_ENTRY)&(_ZTI8S21197C1[0]),
  (VTBL_ENTRY)&_ZN8S21197C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21197C1D0Ev,
  ABISELECT(-352,-200),
  (VTBL_ENTRY)&(_ZTI8S21197C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S21197C1D1Ev,_ZThn200_N8S21197C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S21197C1D0Ev,_ZThn200_N8S21197C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21197C52v1Ev,
  ABISELECT(-1024,-580),
  (VTBL_ENTRY)&(_ZTI8S21197C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1024_N8S21197C1D1Ev,_ZThn580_N8S21197C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1024_N8S21197C1D0Ev,_ZThn580_N8S21197C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21197C42v2Ev,
  (VTBL_ENTRY)&_ZN8S21197C42v3Ev,
  ABISELECT(-4560,-2612),
  ABISELECT(-4560,-2612),
  (VTBL_ENTRY)&(_ZTI8S21197C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21197C1D1Ev,_ZTv0_n12_N8S21197C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21197C1D0Ev,_ZTv0_n12_N8S21197C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S21197C1[];
static  VTT_ENTRY vtt_S21197C1[] = {
  {&(_ZTV8S21197C1[3]),  3,21},
  {&(_ZTV8S21197C1[19]),  19,21},
};
extern VTBL_ENTRY _ZTI8S21197C1[];
extern  VTBL_ENTRY _ZTV8S21197C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21197C1[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21197C1D0Ev,_ZTv0_n12_N8S21197C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4560_N8S21197C1D0Ev,_ZThn2612_N8S21197C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21197C1D1Ev,_ZTv0_n12_N8S21197C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4560_N8S21197C1D1Ev,_ZThn2612_N8S21197C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21197C1 = {  "S21197C1", // class name
  bases_S21197C1, 5,
  &(vtc_S21197C1[0]), // expected_vtbl_contents
  &(vtt_S21197C1[0]), // expected_vtt_contents
  ABISELECT(4608,2640), // object size
  NSPAIRA(_ZTI8S21197C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21197C1),21, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21197C1),2, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2172C4  {
  ::S5166C19_nt s2172c4f0;
  int s2172c4f1[2];
  char s2172c4f2;
  virtual  ~S2172C4(); // _ZN7S2172C4D1Ev
  virtual void  v3(); // _ZN7S2172C42v3Ev
  virtual void  v4(); // _ZN7S2172C42v4Ev
  virtual void  v5(); // _ZN7S2172C42v5Ev
  S2172C4(); // tgen
};
//SIG(-1 S2172C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2172C4 ::~S2172C4(){ note_dtor("S2172C4", this);}
void  S2172C4 ::v3(){vfunc_called(this, "_ZN7S2172C42v3Ev");}
void  S2172C4 ::v4(){vfunc_called(this, "_ZN7S2172C42v4Ev");}
void  S2172C4 ::v5(){vfunc_called(this, "_ZN7S2172C42v5Ev");}
S2172C4 ::S2172C4(){ note_ctor("S2172C4", this);} // tgen

static void Test_S2172C4()
{
  extern Class_Descriptor cd_S2172C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2172C4, buf);
    S2172C4 *dp, &lv = *(dp=new (buf) S2172C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2172C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2172C4)");
    check_field_offset(lv, s2172c4f0, ABISELECT(8,4), "S2172C4.s2172c4f0");
    check_field_offset(lv, s2172c4f1, ABISELECT(24,16), "S2172C4.s2172c4f1");
    check_field_offset(lv, s2172c4f2, ABISELECT(32,24), "S2172C4.s2172c4f2");
    test_class_info(&lv, &cd_S2172C4);
    dp->~S2172C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2172C4(Test_S2172C4, "S2172C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2172C4C1Ev();
extern void _ZN7S2172C4D1Ev();
Name_Map name_map_S2172C4[] = {
  NSPAIR(_ZN7S2172C4C1Ev),
  NSPAIR(_ZN7S2172C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2172C4[];
extern void _ZN7S2172C4D1Ev();
extern void _ZN7S2172C4D0Ev();
extern void _ZN7S2172C42v3Ev();
extern void _ZN7S2172C42v4Ev();
extern void _ZN7S2172C42v5Ev();
static  VTBL_ENTRY vtc_S2172C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2172C4[0]),
  (VTBL_ENTRY)&_ZN7S2172C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2172C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2172C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2172C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2172C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2172C4[];
extern  VTBL_ENTRY _ZTV7S2172C4[];
Class_Descriptor cd_S2172C4 = {  "S2172C4", // class name
  0,0,//no base classes
  &(vtc_S2172C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2172C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2172C4),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  S2172C3_nt  : S2172C4 {
  void *s2172c3f0;
  virtual void  v6(); // _ZN10S2172C3_nt2v6Ev
  virtual void  v7(); // _ZN10S2172C3_nt2v7Ev
  ~S2172C3_nt(); // tgen
  S2172C3_nt(); // tgen
};
//SIG(-1 S2172C3_nt) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2172C3_nt ::v6(){vfunc_called(this, "_ZN10S2172C3_nt2v6Ev");}
void  S2172C3_nt ::v7(){vfunc_called(this, "_ZN10S2172C3_nt2v7Ev");}
S2172C3_nt ::~S2172C3_nt(){ note_dtor("S2172C3_nt", this);} // tgen
S2172C3_nt ::S2172C3_nt(){ note_ctor("S2172C3_nt", this);} // tgen

//skip512 S2172C3_nt

#else // __cplusplus

extern void _ZN10S2172C3_ntC1Ev();
extern void _ZN10S2172C3_ntD1Ev();
Name_Map name_map_S2172C3_nt[] = {
  NSPAIR(_ZN10S2172C3_ntC1Ev),
  NSPAIR(_ZN10S2172C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2172C4;
extern VTBL_ENTRY _ZTI7S2172C4[];
extern  VTBL_ENTRY _ZTV7S2172C4[];
static Base_Class bases_S2172C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2172C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI10S2172C3_nt[];
extern void _ZN10S2172C3_ntD1Ev();
extern void _ZN10S2172C3_ntD0Ev();
extern void _ZN7S2172C42v3Ev();
extern void _ZN7S2172C42v4Ev();
extern void _ZN7S2172C42v5Ev();
extern void _ZN10S2172C3_nt2v6Ev();
extern void _ZN10S2172C3_nt2v7Ev();
static  VTBL_ENTRY vtc_S2172C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2172C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2172C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2172C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S2172C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2172C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2172C42v5Ev,
  (VTBL_ENTRY)&_ZN10S2172C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2172C3_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S2172C3_nt[];
VTBL_ENTRY *P__ZTI10S2172C3_nt = _ZTI10S2172C3_nt; 
extern  VTBL_ENTRY _ZTV10S2172C3_nt[];
Class_Descriptor cd_S2172C3_nt = {  "S2172C3_nt", // class name
  bases_S2172C3_nt, 1,
  &(vtc_S2172C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S2172C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2172C3_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  S2172C9_nt  {
  void *s2172c9f0;
  void  mf2172c9(); // _ZN10S2172C9_nt8mf2172c9Ev
};
//SIG(-1 S2172C9_nt) C1{ m Fp}


void  S2172C9_nt ::mf2172c9(){}

//skip512 S2172C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2172C11_nt  {
  long s2172c11f0[4];
};
//SIG(-1 S2172C11_nt) C1{ Fl[4]}



//skip512 S2172C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2172C10_nt  {
  ::S2172C11_nt s2172c10f0;
  void  mf2172c10(); // _ZN11S2172C10_nt9mf2172c10Ev
};
//SIG(-1 S2172C10_nt) C1{ m FC2{ Fl[4]}}


void  S2172C10_nt ::mf2172c10(){}

//skip512 S2172C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2172C14_nt  {
  void *s2172c14f0;
  int s2172c14f1[2];
  ::S5166C37 s2172c14f2;
  void  mf2172c14(); // _ZN11S2172C14_nt9mf2172c14Ev
};
//SIG(-1 S2172C14_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S2172C14_nt ::mf2172c14(){}

//skip512 S2172C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2172C17  {
  void *s2172c17f0;
  void  mf2172c17(); // _ZN8S2172C179mf2172c17Ev
};
//SIG(-1 S2172C17) C1{ m Fp}


void  S2172C17 ::mf2172c17(){}

static void Test_S2172C17()
{
  {
    init_simple_test("S2172C17");
    S2172C17 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2172C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2172C17)");
    check_field_offset(lv, s2172c17f0, 0, "S2172C17.s2172c17f0");
  }
}
static Arrange_To_Call_Me vS2172C17(Test_S2172C17, "S2172C17", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2172C2  : S2172C3_nt {
  void *s2172c2f0;
  int s2172c2f1;
  ::S5166C36 s2172c2f2;
  ::S5166C19_nt s2172c2f3;
  void *s2172c2f4;
  int s2172c2f5;
  void *s2172c2f6;
  int s2172c2f7;
  ::S2172C9_nt s2172c2f8;
  ::S2172C10_nt s2172c2f9;
  ::S5166C28_nt s2172c2f10;
  ::S2172C14_nt s2172c2f11;
  ::S2172C9_nt s2172c2f12;
  ::S2172C17 s2172c2f13;
  virtual  ~S2172C2(); // _ZN7S2172C2D1Ev
  virtual void  v8(); // _ZN7S2172C22v8Ev
  virtual void  v9(); // _ZN7S2172C22v9Ev
  virtual void  v10(); // _ZN7S2172C23v10Ev
  virtual void  v11(); // _ZN7S2172C23v11Ev
  virtual void  v12(); // _ZN7S2172C23v12Ev
  virtual void  v13(); // _ZN7S2172C23v13Ev
  S2172C2(); // tgen
};
//SIG(-1 S2172C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} vd v1 v2 v3 v4 v5 v6 Fp Fi FC6{ m Fp Fi[2] FC7{ m}} FC4 Fp Fi Fp Fi FC8{ m Fp} FC9{ m FC10{ Fl[4]}} FC11{ m Fp Fi[2] FC12{ m}} FC13{ m Fp Fi[2] FC7} FC8 FC14{ m Fp}}


 S2172C2 ::~S2172C2(){ note_dtor("S2172C2", this);}
void  S2172C2 ::v8(){vfunc_called(this, "_ZN7S2172C22v8Ev");}
void  S2172C2 ::v9(){vfunc_called(this, "_ZN7S2172C22v9Ev");}
void  S2172C2 ::v10(){vfunc_called(this, "_ZN7S2172C23v10Ev");}
void  S2172C2 ::v11(){vfunc_called(this, "_ZN7S2172C23v11Ev");}
void  S2172C2 ::v12(){vfunc_called(this, "_ZN7S2172C23v12Ev");}
void  S2172C2 ::v13(){vfunc_called(this, "_ZN7S2172C23v13Ev");}
S2172C2 ::S2172C2(){ note_ctor("S2172C2", this);} // tgen

static void Test_S2172C2()
{
  extern Class_Descriptor cd_S2172C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,37)];
    init_test(&cd_S2172C2, buf);
    S2172C2 *dp, &lv = *(dp=new (buf) S2172C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,144), "sizeof(S2172C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2172C2)");
    check_base_class_offset(lv, (S2172C4*)(S2172C3_nt*), 0, "S2172C2");
    check_base_class_offset(lv, (S2172C3_nt*), 0, "S2172C2");
    check_field_offset(lv, s2172c2f0, ABISELECT(48,32), "S2172C2.s2172c2f0");
    check_field_offset(lv, s2172c2f1, ABISELECT(56,36), "S2172C2.s2172c2f1");
    check_field_offset(lv, s2172c2f2, ABISELECT(64,40), "S2172C2.s2172c2f2");
    check_field_offset(lv, s2172c2f3, ABISELECT(88,56), "S2172C2.s2172c2f3");
    check_field_offset(lv, s2172c2f4, ABISELECT(104,68), "S2172C2.s2172c2f4");
    check_field_offset(lv, s2172c2f5, ABISELECT(112,72), "S2172C2.s2172c2f5");
    check_field_offset(lv, s2172c2f6, ABISELECT(120,76), "S2172C2.s2172c2f6");
    check_field_offset(lv, s2172c2f7, ABISELECT(128,80), "S2172C2.s2172c2f7");
    check_field_offset(lv, s2172c2f8, ABISELECT(136,84), "S2172C2.s2172c2f8");
    check_field_offset(lv, s2172c2f9, ABISELECT(144,88), "S2172C2.s2172c2f9");
    check_field_offset(lv, s2172c2f10, ABISELECT(176,104), "S2172C2.s2172c2f10");
    check_field_offset(lv, s2172c2f11, ABISELECT(200,120), "S2172C2.s2172c2f11");
    check_field_offset(lv, s2172c2f12, ABISELECT(224,136), "S2172C2.s2172c2f12");
    check_field_offset(lv, s2172c2f13, ABISELECT(232,140), "S2172C2.s2172c2f13");
    test_class_info(&lv, &cd_S2172C2);
    dp->~S2172C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2172C2(Test_S2172C2, "S2172C2", ABISELECT(240,144));

#else // __cplusplus

extern void _ZN7S2172C2C1Ev();
extern void _ZN7S2172C2D1Ev();
Name_Map name_map_S2172C2[] = {
  NSPAIR(_ZN7S2172C2C1Ev),
  NSPAIR(_ZN7S2172C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2172C4;
extern VTBL_ENTRY _ZTI7S2172C4[];
extern  VTBL_ENTRY _ZTV7S2172C4[];
extern Class_Descriptor cd_S2172C3_nt;
extern VTBL_ENTRY _ZTI10S2172C3_nt[];
extern  VTBL_ENTRY _ZTV10S2172C3_nt[];
static Base_Class bases_S2172C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2172C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2172C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2172C2[];
extern void _ZN7S2172C2D1Ev();
extern void _ZN7S2172C2D0Ev();
extern void _ZN7S2172C42v3Ev();
extern void _ZN7S2172C42v4Ev();
extern void _ZN7S2172C42v5Ev();
extern void _ZN10S2172C3_nt2v6Ev();
extern void _ZN10S2172C3_nt2v7Ev();
extern void _ZN7S2172C22v8Ev();
extern void _ZN7S2172C22v9Ev();
extern void _ZN7S2172C23v10Ev();
extern void _ZN7S2172C23v11Ev();
extern void _ZN7S2172C23v12Ev();
extern void _ZN7S2172C23v13Ev();
static  VTBL_ENTRY vtc_S2172C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2172C2[0]),
  (VTBL_ENTRY)&_ZN7S2172C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2172C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2172C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2172C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2172C42v5Ev,
  (VTBL_ENTRY)&_ZN10S2172C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2172C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN7S2172C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2172C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2172C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2172C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2172C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2172C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S2172C2[];
extern  VTBL_ENTRY _ZTV7S2172C2[];
Class_Descriptor cd_S2172C2 = {  "S2172C2", // class name
  bases_S2172C2, 2,
  &(vtc_S2172C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,144), // object size
  NSPAIRA(_ZTI7S2172C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2172C2),15, //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  S2172C1  : S2172C2 {
  int s2172c1f0;
  virtual  ~S2172C1(); // _ZN7S2172C1D1Ev
  virtual void  v1(); // _ZN7S2172C12v1Ev
  virtual void  v2(); // _ZN7S2172C12v2Ev
  S2172C1(); // tgen
};
//SIG(1 S2172C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 v9 v10 v11 v12 v13 Fp Fi FC7{ m Fp Fi[2] FC8{ m}} FC5 Fp Fi Fp Fi FC9{ m Fp} FC10{ m FC11{ Fl[4]}} FC12{ m Fp Fi[2] FC13{ m}} FC14{ m Fp Fi[2] FC8} FC9 FC15{ m Fp}} vd v1 v2 Fi}


 S2172C1 ::~S2172C1(){ note_dtor("S2172C1", this);}
void  S2172C1 ::v1(){vfunc_called(this, "_ZN7S2172C12v1Ev");}
void  S2172C1 ::v2(){vfunc_called(this, "_ZN7S2172C12v2Ev");}
S2172C1 ::S2172C1(){ note_ctor("S2172C1", this);} // tgen

static void Test_S2172C1()
{
  extern Class_Descriptor cd_S2172C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,38)];
    init_test(&cd_S2172C1, buf);
    S2172C1 *dp, &lv = *(dp=new (buf) S2172C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,148), "sizeof(S2172C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2172C1)");
    check_base_class_offset(lv, (S2172C4*)(S2172C3_nt*)(S2172C2*), 0, "S2172C1");
    check_base_class_offset(lv, (S2172C3_nt*)(S2172C2*), 0, "S2172C1");
    check_base_class_offset(lv, (S2172C2*), 0, "S2172C1");
    check_field_offset(lv, s2172c1f0, ABISELECT(240,144), "S2172C1.s2172c1f0");
    test_class_info(&lv, &cd_S2172C1);
    dp->~S2172C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2172C1(Test_S2172C1, "S2172C1", ABISELECT(248,148));

#else // __cplusplus

extern void _ZN7S2172C1C1Ev();
extern void _ZN7S2172C1D1Ev();
Name_Map name_map_S2172C1[] = {
  NSPAIR(_ZN7S2172C1C1Ev),
  NSPAIR(_ZN7S2172C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2172C4;
extern VTBL_ENTRY _ZTI7S2172C4[];
extern  VTBL_ENTRY _ZTV7S2172C4[];
extern Class_Descriptor cd_S2172C3_nt;
extern VTBL_ENTRY _ZTI10S2172C3_nt[];
extern  VTBL_ENTRY _ZTV10S2172C3_nt[];
extern Class_Descriptor cd_S2172C2;
extern VTBL_ENTRY _ZTI7S2172C2[];
extern  VTBL_ENTRY _ZTV7S2172C2[];
static Base_Class bases_S2172C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2172C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2172C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2172C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2172C1[];
extern void _ZN7S2172C1D1Ev();
extern void _ZN7S2172C1D0Ev();
extern void _ZN7S2172C42v3Ev();
extern void _ZN7S2172C42v4Ev();
extern void _ZN7S2172C42v5Ev();
extern void _ZN10S2172C3_nt2v6Ev();
extern void _ZN10S2172C3_nt2v7Ev();
extern void _ZN7S2172C22v8Ev();
extern void _ZN7S2172C22v9Ev();
extern void _ZN7S2172C23v10Ev();
extern void _ZN7S2172C23v11Ev();
extern void _ZN7S2172C23v12Ev();
extern void _ZN7S2172C23v13Ev();
extern void _ZN7S2172C12v1Ev();
extern void _ZN7S2172C12v2Ev();
static  VTBL_ENTRY vtc_S2172C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2172C1[0]),
  (VTBL_ENTRY)&_ZN7S2172C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2172C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2172C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2172C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2172C42v5Ev,
  (VTBL_ENTRY)&_ZN10S2172C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2172C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN7S2172C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2172C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2172C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2172C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2172C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2172C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2172C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2172C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2172C1[];
extern  VTBL_ENTRY _ZTV7S2172C1[];
Class_Descriptor cd_S2172C1 = {  "S2172C1", // class name
  bases_S2172C1, 3,
  &(vtc_S2172C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,148), // object size
  NSPAIRA(_ZTI7S2172C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2172C1),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2170C4  {
  ::S5166C19_nt s2170c4f0;
  int s2170c4f1[2];
  char s2170c4f2;
  virtual  ~S2170C4(); // _ZN7S2170C4D1Ev
  virtual void  v3(); // _ZN7S2170C42v3Ev
  virtual void  v4(); // _ZN7S2170C42v4Ev
  virtual void  v5(); // _ZN7S2170C42v5Ev
  S2170C4(); // tgen
};
//SIG(-1 S2170C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2170C4 ::~S2170C4(){ note_dtor("S2170C4", this);}
void  S2170C4 ::v3(){vfunc_called(this, "_ZN7S2170C42v3Ev");}
void  S2170C4 ::v4(){vfunc_called(this, "_ZN7S2170C42v4Ev");}
void  S2170C4 ::v5(){vfunc_called(this, "_ZN7S2170C42v5Ev");}
S2170C4 ::S2170C4(){ note_ctor("S2170C4", this);} // tgen

static void Test_S2170C4()
{
  extern Class_Descriptor cd_S2170C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2170C4, buf);
    S2170C4 *dp, &lv = *(dp=new (buf) S2170C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2170C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2170C4)");
    check_field_offset(lv, s2170c4f0, ABISELECT(8,4), "S2170C4.s2170c4f0");
    check_field_offset(lv, s2170c4f1, ABISELECT(24,16), "S2170C4.s2170c4f1");
    check_field_offset(lv, s2170c4f2, ABISELECT(32,24), "S2170C4.s2170c4f2");
    test_class_info(&lv, &cd_S2170C4);
    dp->~S2170C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2170C4(Test_S2170C4, "S2170C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2170C4C1Ev();
extern void _ZN7S2170C4D1Ev();
Name_Map name_map_S2170C4[] = {
  NSPAIR(_ZN7S2170C4C1Ev),
  NSPAIR(_ZN7S2170C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2170C4[];
extern void _ZN7S2170C4D1Ev();
extern void _ZN7S2170C4D0Ev();
extern void _ZN7S2170C42v3Ev();
extern void _ZN7S2170C42v4Ev();
extern void _ZN7S2170C42v5Ev();
static  VTBL_ENTRY vtc_S2170C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2170C4[0]),
  (VTBL_ENTRY)&_ZN7S2170C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2170C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2170C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2170C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2170C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2170C4[];
extern  VTBL_ENTRY _ZTV7S2170C4[];
Class_Descriptor cd_S2170C4 = {  "S2170C4", // class name
  0,0,//no base classes
  &(vtc_S2170C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2170C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2170C4),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  S2170C3  : S2170C4 {
  void *s2170c3f0;
  virtual void  v6(); // _ZN7S2170C32v6Ev
  virtual void  v7(); // _ZN7S2170C32v7Ev
  ~S2170C3(); // tgen
  S2170C3(); // tgen
};
//SIG(-1 S2170C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2170C3 ::v6(){vfunc_called(this, "_ZN7S2170C32v6Ev");}
void  S2170C3 ::v7(){vfunc_called(this, "_ZN7S2170C32v7Ev");}
S2170C3 ::~S2170C3(){ note_dtor("S2170C3", this);} // tgen
S2170C3 ::S2170C3(){ note_ctor("S2170C3", this);} // tgen

static void Test_S2170C3()
{
  extern Class_Descriptor cd_S2170C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2170C3, buf);
    S2170C3 *dp, &lv = *(dp=new (buf) S2170C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2170C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2170C3)");
    check_base_class_offset(lv, (S2170C4*), 0, "S2170C3");
    check_field_offset(lv, s2170c3f0, ABISELECT(40,28), "S2170C3.s2170c3f0");
    test_class_info(&lv, &cd_S2170C3);
    dp->~S2170C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2170C3(Test_S2170C3, "S2170C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2170C3C1Ev();
extern void _ZN7S2170C3D1Ev();
Name_Map name_map_S2170C3[] = {
  NSPAIR(_ZN7S2170C3C1Ev),
  NSPAIR(_ZN7S2170C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2170C4;
extern VTBL_ENTRY _ZTI7S2170C4[];
extern  VTBL_ENTRY _ZTV7S2170C4[];
static Base_Class bases_S2170C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2170C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2170C3[];
extern void _ZN7S2170C3D1Ev();
extern void _ZN7S2170C3D0Ev();
extern void _ZN7S2170C42v3Ev();
extern void _ZN7S2170C42v4Ev();
extern void _ZN7S2170C42v5Ev();
extern void _ZN7S2170C32v6Ev();
extern void _ZN7S2170C32v7Ev();
static  VTBL_ENTRY vtc_S2170C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2170C3[0]),
  (VTBL_ENTRY)&_ZN7S2170C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2170C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2170C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2170C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2170C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2170C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2170C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2170C3[];
extern  VTBL_ENTRY _ZTV7S2170C3[];
Class_Descriptor cd_S2170C3 = {  "S2170C3", // class name
  bases_S2170C3, 1,
  &(vtc_S2170C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2170C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2170C3),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  S2170C17  {
  void *s2170c17f0;
  void  mf2170c17(); // _ZN8S2170C179mf2170c17Ev
};
//SIG(-1 S2170C17) C1{ m Fp}


void  S2170C17 ::mf2170c17(){}

static void Test_S2170C17()
{
  {
    init_simple_test("S2170C17");
    S2170C17 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2170C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2170C17)");
    check_field_offset(lv, s2170c17f0, 0, "S2170C17.s2170c17f0");
  }
}
static Arrange_To_Call_Me vS2170C17(Test_S2170C17, "S2170C17", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2170C2  : S2170C3 {
  void *s2170c2f0;
  int s2170c2f1;
  ::S5166C36 s2170c2f2;
  ::S5166C19_nt s2170c2f3;
  void *s2170c2f4;
  int s2170c2f5;
  void *s2170c2f6;
  int s2170c2f7;
  ::S2172C17 s2170c2f8;
  ::S2172C10_nt s2170c2f9;
  ::S5166C28_nt s2170c2f10;
  ::S2172C14_nt s2170c2f11;
  ::S2172C9_nt s2170c2f12;
  ::S2170C17 s2170c2f13;
  virtual  ~S2170C2(); // _ZN7S2170C2D1Ev
  virtual void  v8(); // _ZN7S2170C22v8Ev
  virtual void  v9(); // _ZN7S2170C22v9Ev
  virtual void  v10(); // _ZN7S2170C23v10Ev
  virtual void  v11(); // _ZN7S2170C23v11Ev
  virtual void  v12(); // _ZN7S2170C23v12Ev
  virtual void  v13(); // _ZN7S2170C23v13Ev
  S2170C2(); // tgen
};
//SIG(-1 S2170C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} vd v1 v2 v3 v4 v5 v6 Fp Fi FC6{ m Fp Fi[2] FC7{ m}} FC4 Fp Fi Fp Fi FC8{ m Fp} FC9{ m FC10{ Fl[4]}} FC11{ m Fp Fi[2] FC12{ m}} FC13{ m Fp Fi[2] FC7} FC14{ m Fp} FC15{ m Fp}}


 S2170C2 ::~S2170C2(){ note_dtor("S2170C2", this);}
void  S2170C2 ::v8(){vfunc_called(this, "_ZN7S2170C22v8Ev");}
void  S2170C2 ::v9(){vfunc_called(this, "_ZN7S2170C22v9Ev");}
void  S2170C2 ::v10(){vfunc_called(this, "_ZN7S2170C23v10Ev");}
void  S2170C2 ::v11(){vfunc_called(this, "_ZN7S2170C23v11Ev");}
void  S2170C2 ::v12(){vfunc_called(this, "_ZN7S2170C23v12Ev");}
void  S2170C2 ::v13(){vfunc_called(this, "_ZN7S2170C23v13Ev");}
S2170C2 ::S2170C2(){ note_ctor("S2170C2", this);} // tgen

static void Test_S2170C2()
{
  extern Class_Descriptor cd_S2170C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,37)];
    init_test(&cd_S2170C2, buf);
    S2170C2 *dp, &lv = *(dp=new (buf) S2170C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,144), "sizeof(S2170C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2170C2)");
    check_base_class_offset(lv, (S2170C4*)(S2170C3*), 0, "S2170C2");
    check_base_class_offset(lv, (S2170C3*), 0, "S2170C2");
    check_field_offset(lv, s2170c2f0, ABISELECT(48,32), "S2170C2.s2170c2f0");
    check_field_offset(lv, s2170c2f1, ABISELECT(56,36), "S2170C2.s2170c2f1");
    check_field_offset(lv, s2170c2f2, ABISELECT(64,40), "S2170C2.s2170c2f2");
    check_field_offset(lv, s2170c2f3, ABISELECT(88,56), "S2170C2.s2170c2f3");
    check_field_offset(lv, s2170c2f4, ABISELECT(104,68), "S2170C2.s2170c2f4");
    check_field_offset(lv, s2170c2f5, ABISELECT(112,72), "S2170C2.s2170c2f5");
    check_field_offset(lv, s2170c2f6, ABISELECT(120,76), "S2170C2.s2170c2f6");
    check_field_offset(lv, s2170c2f7, ABISELECT(128,80), "S2170C2.s2170c2f7");
    check_field_offset(lv, s2170c2f8, ABISELECT(136,84), "S2170C2.s2170c2f8");
    check_field_offset(lv, s2170c2f9, ABISELECT(144,88), "S2170C2.s2170c2f9");
    check_field_offset(lv, s2170c2f10, ABISELECT(176,104), "S2170C2.s2170c2f10");
    check_field_offset(lv, s2170c2f11, ABISELECT(200,120), "S2170C2.s2170c2f11");
    check_field_offset(lv, s2170c2f12, ABISELECT(224,136), "S2170C2.s2170c2f12");
    check_field_offset(lv, s2170c2f13, ABISELECT(232,140), "S2170C2.s2170c2f13");
    test_class_info(&lv, &cd_S2170C2);
    dp->~S2170C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2170C2(Test_S2170C2, "S2170C2", ABISELECT(240,144));

#else // __cplusplus

extern void _ZN7S2170C2C1Ev();
extern void _ZN7S2170C2D1Ev();
Name_Map name_map_S2170C2[] = {
  NSPAIR(_ZN7S2170C2C1Ev),
  NSPAIR(_ZN7S2170C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2170C4;
extern VTBL_ENTRY _ZTI7S2170C4[];
extern  VTBL_ENTRY _ZTV7S2170C4[];
extern Class_Descriptor cd_S2170C3;
extern VTBL_ENTRY _ZTI7S2170C3[];
extern  VTBL_ENTRY _ZTV7S2170C3[];
static Base_Class bases_S2170C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2170C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2170C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2170C2[];
extern void _ZN7S2170C2D1Ev();
extern void _ZN7S2170C2D0Ev();
extern void _ZN7S2170C42v3Ev();
extern void _ZN7S2170C42v4Ev();
extern void _ZN7S2170C42v5Ev();
extern void _ZN7S2170C32v6Ev();
extern void _ZN7S2170C32v7Ev();
extern void _ZN7S2170C22v8Ev();
extern void _ZN7S2170C22v9Ev();
extern void _ZN7S2170C23v10Ev();
extern void _ZN7S2170C23v11Ev();
extern void _ZN7S2170C23v12Ev();
extern void _ZN7S2170C23v13Ev();
static  VTBL_ENTRY vtc_S2170C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2170C2[0]),
  (VTBL_ENTRY)&_ZN7S2170C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2170C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2170C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2170C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2170C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2170C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2170C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2170C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2170C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2170C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2170C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2170C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2170C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S2170C2[];
extern  VTBL_ENTRY _ZTV7S2170C2[];
Class_Descriptor cd_S2170C2 = {  "S2170C2", // class name
  bases_S2170C2, 2,
  &(vtc_S2170C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,144), // object size
  NSPAIRA(_ZTI7S2170C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2170C2),15, //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  S2170C1  : S2170C2 {
  char s2170c1f0;
  virtual  ~S2170C1(); // _ZN7S2170C1D1Ev
  virtual void  v1(); // _ZN7S2170C12v1Ev
  virtual void  v2(); // _ZN7S2170C12v2Ev
  S2170C1(); // tgen
};
//SIG(1 S2170C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 v9 v10 v11 v12 v13 Fp Fi FC7{ m Fp Fi[2] FC8{ m}} FC5 Fp Fi Fp Fi FC9{ m Fp} FC10{ m FC11{ Fl[4]}} FC12{ m Fp Fi[2] FC13{ m}} FC14{ m Fp Fi[2] FC8} FC15{ m Fp} FC16{ m Fp}} vd v1 v2 Fc}


 S2170C1 ::~S2170C1(){ note_dtor("S2170C1", this);}
void  S2170C1 ::v1(){vfunc_called(this, "_ZN7S2170C12v1Ev");}
void  S2170C1 ::v2(){vfunc_called(this, "_ZN7S2170C12v2Ev");}
S2170C1 ::S2170C1(){ note_ctor("S2170C1", this);} // tgen

static void Test_S2170C1()
{
  extern Class_Descriptor cd_S2170C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,38)];
    init_test(&cd_S2170C1, buf);
    S2170C1 *dp, &lv = *(dp=new (buf) S2170C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,148), "sizeof(S2170C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2170C1)");
    check_base_class_offset(lv, (S2170C4*)(S2170C3*)(S2170C2*), 0, "S2170C1");
    check_base_class_offset(lv, (S2170C3*)(S2170C2*), 0, "S2170C1");
    check_base_class_offset(lv, (S2170C2*), 0, "S2170C1");
    check_field_offset(lv, s2170c1f0, ABISELECT(240,144), "S2170C1.s2170c1f0");
    test_class_info(&lv, &cd_S2170C1);
    dp->~S2170C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2170C1(Test_S2170C1, "S2170C1", ABISELECT(248,148));

#else // __cplusplus

extern void _ZN7S2170C1C1Ev();
extern void _ZN7S2170C1D1Ev();
Name_Map name_map_S2170C1[] = {
  NSPAIR(_ZN7S2170C1C1Ev),
  NSPAIR(_ZN7S2170C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2170C4;
extern VTBL_ENTRY _ZTI7S2170C4[];
extern  VTBL_ENTRY _ZTV7S2170C4[];
extern Class_Descriptor cd_S2170C3;
extern VTBL_ENTRY _ZTI7S2170C3[];
extern  VTBL_ENTRY _ZTV7S2170C3[];
extern Class_Descriptor cd_S2170C2;
extern VTBL_ENTRY _ZTI7S2170C2[];
extern  VTBL_ENTRY _ZTV7S2170C2[];
static Base_Class bases_S2170C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2170C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2170C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2170C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2170C1[];
extern void _ZN7S2170C1D1Ev();
extern void _ZN7S2170C1D0Ev();
extern void _ZN7S2170C42v3Ev();
extern void _ZN7S2170C42v4Ev();
extern void _ZN7S2170C42v5Ev();
extern void _ZN7S2170C32v6Ev();
extern void _ZN7S2170C32v7Ev();
extern void _ZN7S2170C22v8Ev();
extern void _ZN7S2170C22v9Ev();
extern void _ZN7S2170C23v10Ev();
extern void _ZN7S2170C23v11Ev();
extern void _ZN7S2170C23v12Ev();
extern void _ZN7S2170C23v13Ev();
extern void _ZN7S2170C12v1Ev();
extern void _ZN7S2170C12v2Ev();
static  VTBL_ENTRY vtc_S2170C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2170C1[0]),
  (VTBL_ENTRY)&_ZN7S2170C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2170C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2170C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2170C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2170C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2170C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2170C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2170C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2170C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2170C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2170C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2170C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2170C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2170C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2170C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2170C1[];
extern  VTBL_ENTRY _ZTV7S2170C1[];
Class_Descriptor cd_S2170C1 = {  "S2170C1", // class name
  bases_S2170C1, 3,
  &(vtc_S2170C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,148), // object size
  NSPAIRA(_ZTI7S2170C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2170C1),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2174C4  {
  ::S5166C19_nt s2174c4f0;
  int s2174c4f1[2];
  char s2174c4f2;
  virtual  ~S2174C4(); // _ZN7S2174C4D1Ev
  virtual void  v3(); // _ZN7S2174C42v3Ev
  virtual void  v4(); // _ZN7S2174C42v4Ev
  virtual void  v5(); // _ZN7S2174C42v5Ev
  S2174C4(); // tgen
};
//SIG(-1 S2174C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2174C4 ::~S2174C4(){ note_dtor("S2174C4", this);}
void  S2174C4 ::v3(){vfunc_called(this, "_ZN7S2174C42v3Ev");}
void  S2174C4 ::v4(){vfunc_called(this, "_ZN7S2174C42v4Ev");}
void  S2174C4 ::v5(){vfunc_called(this, "_ZN7S2174C42v5Ev");}
S2174C4 ::S2174C4(){ note_ctor("S2174C4", this);} // tgen

static void Test_S2174C4()
{
  extern Class_Descriptor cd_S2174C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2174C4, buf);
    S2174C4 *dp, &lv = *(dp=new (buf) S2174C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2174C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2174C4)");
    check_field_offset(lv, s2174c4f0, ABISELECT(8,4), "S2174C4.s2174c4f0");
    check_field_offset(lv, s2174c4f1, ABISELECT(24,16), "S2174C4.s2174c4f1");
    check_field_offset(lv, s2174c4f2, ABISELECT(32,24), "S2174C4.s2174c4f2");
    test_class_info(&lv, &cd_S2174C4);
    dp->~S2174C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2174C4(Test_S2174C4, "S2174C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2174C4C1Ev();
extern void _ZN7S2174C4D1Ev();
Name_Map name_map_S2174C4[] = {
  NSPAIR(_ZN7S2174C4C1Ev),
  NSPAIR(_ZN7S2174C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2174C4[];
extern void _ZN7S2174C4D1Ev();
extern void _ZN7S2174C4D0Ev();
extern void _ZN7S2174C42v3Ev();
extern void _ZN7S2174C42v4Ev();
extern void _ZN7S2174C42v5Ev();
static  VTBL_ENTRY vtc_S2174C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2174C4[0]),
  (VTBL_ENTRY)&_ZN7S2174C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2174C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2174C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2174C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2174C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2174C4[];
extern  VTBL_ENTRY _ZTV7S2174C4[];
Class_Descriptor cd_S2174C4 = {  "S2174C4", // class name
  0,0,//no base classes
  &(vtc_S2174C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2174C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2174C4),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  S2174C3  : S2174C4 {
  void *s2174c3f0;
  virtual void  v6(); // _ZN7S2174C32v6Ev
  virtual void  v7(); // _ZN7S2174C32v7Ev
  ~S2174C3(); // tgen
  S2174C3(); // tgen
};
//SIG(-1 S2174C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2174C3 ::v6(){vfunc_called(this, "_ZN7S2174C32v6Ev");}
void  S2174C3 ::v7(){vfunc_called(this, "_ZN7S2174C32v7Ev");}
S2174C3 ::~S2174C3(){ note_dtor("S2174C3", this);} // tgen
S2174C3 ::S2174C3(){ note_ctor("S2174C3", this);} // tgen

static void Test_S2174C3()
{
  extern Class_Descriptor cd_S2174C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2174C3, buf);
    S2174C3 *dp, &lv = *(dp=new (buf) S2174C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2174C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2174C3)");
    check_base_class_offset(lv, (S2174C4*), 0, "S2174C3");
    check_field_offset(lv, s2174c3f0, ABISELECT(40,28), "S2174C3.s2174c3f0");
    test_class_info(&lv, &cd_S2174C3);
    dp->~S2174C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2174C3(Test_S2174C3, "S2174C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2174C3C1Ev();
extern void _ZN7S2174C3D1Ev();
Name_Map name_map_S2174C3[] = {
  NSPAIR(_ZN7S2174C3C1Ev),
  NSPAIR(_ZN7S2174C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2174C4;
extern VTBL_ENTRY _ZTI7S2174C4[];
extern  VTBL_ENTRY _ZTV7S2174C4[];
static Base_Class bases_S2174C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2174C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2174C3[];
extern void _ZN7S2174C3D1Ev();
extern void _ZN7S2174C3D0Ev();
extern void _ZN7S2174C42v3Ev();
extern void _ZN7S2174C42v4Ev();
extern void _ZN7S2174C42v5Ev();
extern void _ZN7S2174C32v6Ev();
extern void _ZN7S2174C32v7Ev();
static  VTBL_ENTRY vtc_S2174C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2174C3[0]),
  (VTBL_ENTRY)&_ZN7S2174C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2174C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2174C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2174C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2174C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2174C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2174C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2174C3[];
extern  VTBL_ENTRY _ZTV7S2174C3[];
Class_Descriptor cd_S2174C3 = {  "S2174C3", // class name
  bases_S2174C3, 1,
  &(vtc_S2174C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2174C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2174C3),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  S2174C2  : S2174C3 {
  void *s2174c2f0;
  int s2174c2f1;
  ::S5166C36 s2174c2f2;
  ::S5166C19_nt s2174c2f3;
  void *s2174c2f4;
  int s2174c2f5;
  void *s2174c2f6;
  int s2174c2f7;
  ::S2172C17 s2174c2f8;
  ::S2172C10_nt s2174c2f9;
  ::S5166C28_nt s2174c2f10;
  ::S2172C14_nt s2174c2f11;
  ::S2172C9_nt s2174c2f12;
  ::S2170C17 s2174c2f13;
  virtual  ~S2174C2(); // _ZN7S2174C2D1Ev
  virtual void  v8(); // _ZN7S2174C22v8Ev
  virtual void  v9(); // _ZN7S2174C22v9Ev
  virtual void  v10(); // _ZN7S2174C23v10Ev
  virtual void  v11(); // _ZN7S2174C23v11Ev
  virtual void  v12(); // _ZN7S2174C23v12Ev
  virtual void  v13(); // _ZN7S2174C23v13Ev
  S2174C2(); // tgen
};
//SIG(-1 S2174C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} vd v1 v2 v3 v4 v5 v6 Fp Fi FC6{ m Fp Fi[2] FC7{ m}} FC4 Fp Fi Fp Fi FC8{ m Fp} FC9{ m FC10{ Fl[4]}} FC11{ m Fp Fi[2] FC12{ m}} FC13{ m Fp Fi[2] FC7} FC14{ m Fp} FC15{ m Fp}}


 S2174C2 ::~S2174C2(){ note_dtor("S2174C2", this);}
void  S2174C2 ::v8(){vfunc_called(this, "_ZN7S2174C22v8Ev");}
void  S2174C2 ::v9(){vfunc_called(this, "_ZN7S2174C22v9Ev");}
void  S2174C2 ::v10(){vfunc_called(this, "_ZN7S2174C23v10Ev");}
void  S2174C2 ::v11(){vfunc_called(this, "_ZN7S2174C23v11Ev");}
void  S2174C2 ::v12(){vfunc_called(this, "_ZN7S2174C23v12Ev");}
void  S2174C2 ::v13(){vfunc_called(this, "_ZN7S2174C23v13Ev");}
S2174C2 ::S2174C2(){ note_ctor("S2174C2", this);} // tgen

static void Test_S2174C2()
{
  extern Class_Descriptor cd_S2174C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,37)];
    init_test(&cd_S2174C2, buf);
    S2174C2 *dp, &lv = *(dp=new (buf) S2174C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,144), "sizeof(S2174C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2174C2)");
    check_base_class_offset(lv, (S2174C4*)(S2174C3*), 0, "S2174C2");
    check_base_class_offset(lv, (S2174C3*), 0, "S2174C2");
    check_field_offset(lv, s2174c2f0, ABISELECT(48,32), "S2174C2.s2174c2f0");
    check_field_offset(lv, s2174c2f1, ABISELECT(56,36), "S2174C2.s2174c2f1");
    check_field_offset(lv, s2174c2f2, ABISELECT(64,40), "S2174C2.s2174c2f2");
    check_field_offset(lv, s2174c2f3, ABISELECT(88,56), "S2174C2.s2174c2f3");
    check_field_offset(lv, s2174c2f4, ABISELECT(104,68), "S2174C2.s2174c2f4");
    check_field_offset(lv, s2174c2f5, ABISELECT(112,72), "S2174C2.s2174c2f5");
    check_field_offset(lv, s2174c2f6, ABISELECT(120,76), "S2174C2.s2174c2f6");
    check_field_offset(lv, s2174c2f7, ABISELECT(128,80), "S2174C2.s2174c2f7");
    check_field_offset(lv, s2174c2f8, ABISELECT(136,84), "S2174C2.s2174c2f8");
    check_field_offset(lv, s2174c2f9, ABISELECT(144,88), "S2174C2.s2174c2f9");
    check_field_offset(lv, s2174c2f10, ABISELECT(176,104), "S2174C2.s2174c2f10");
    check_field_offset(lv, s2174c2f11, ABISELECT(200,120), "S2174C2.s2174c2f11");
    check_field_offset(lv, s2174c2f12, ABISELECT(224,136), "S2174C2.s2174c2f12");
    check_field_offset(lv, s2174c2f13, ABISELECT(232,140), "S2174C2.s2174c2f13");
    test_class_info(&lv, &cd_S2174C2);
    dp->~S2174C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2174C2(Test_S2174C2, "S2174C2", ABISELECT(240,144));

#else // __cplusplus

extern void _ZN7S2174C2C1Ev();
extern void _ZN7S2174C2D1Ev();
Name_Map name_map_S2174C2[] = {
  NSPAIR(_ZN7S2174C2C1Ev),
  NSPAIR(_ZN7S2174C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2174C4;
extern VTBL_ENTRY _ZTI7S2174C4[];
extern  VTBL_ENTRY _ZTV7S2174C4[];
extern Class_Descriptor cd_S2174C3;
extern VTBL_ENTRY _ZTI7S2174C3[];
extern  VTBL_ENTRY _ZTV7S2174C3[];
static Base_Class bases_S2174C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2174C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2174C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2174C2[];
extern void _ZN7S2174C2D1Ev();
extern void _ZN7S2174C2D0Ev();
extern void _ZN7S2174C42v3Ev();
extern void _ZN7S2174C42v4Ev();
extern void _ZN7S2174C42v5Ev();
extern void _ZN7S2174C32v6Ev();
extern void _ZN7S2174C32v7Ev();
extern void _ZN7S2174C22v8Ev();
extern void _ZN7S2174C22v9Ev();
extern void _ZN7S2174C23v10Ev();
extern void _ZN7S2174C23v11Ev();
extern void _ZN7S2174C23v12Ev();
extern void _ZN7S2174C23v13Ev();
static  VTBL_ENTRY vtc_S2174C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2174C2[0]),
  (VTBL_ENTRY)&_ZN7S2174C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2174C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2174C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2174C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2174C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2174C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2174C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2174C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2174C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2174C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2174C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2174C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2174C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S2174C2[];
extern  VTBL_ENTRY _ZTV7S2174C2[];
Class_Descriptor cd_S2174C2 = {  "S2174C2", // class name
  bases_S2174C2, 2,
  &(vtc_S2174C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,144), // object size
  NSPAIRA(_ZTI7S2174C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2174C2),15, //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  S2174C1  : S2174C2 {
  virtual  ~S2174C1(); // _ZN7S2174C1D1Ev
  virtual void  v1(); // _ZN7S2174C12v1Ev
  virtual void  v2(); // _ZN7S2174C12v2Ev
  S2174C1(); // tgen
};
//SIG(1 S2174C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 v9 v10 v11 v12 v13 Fp Fi FC7{ m Fp Fi[2] FC8{ m}} FC5 Fp Fi Fp Fi FC9{ m Fp} FC10{ m FC11{ Fl[4]}} FC12{ m Fp Fi[2] FC13{ m}} FC14{ m Fp Fi[2] FC8} FC15{ m Fp} FC16{ m Fp}} vd v1 v2}


 S2174C1 ::~S2174C1(){ note_dtor("S2174C1", this);}
void  S2174C1 ::v1(){vfunc_called(this, "_ZN7S2174C12v1Ev");}
void  S2174C1 ::v2(){vfunc_called(this, "_ZN7S2174C12v2Ev");}
S2174C1 ::S2174C1(){ note_ctor("S2174C1", this);} // tgen

static void Test_S2174C1()
{
  extern Class_Descriptor cd_S2174C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,37)];
    init_test(&cd_S2174C1, buf);
    S2174C1 *dp, &lv = *(dp=new (buf) S2174C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,144), "sizeof(S2174C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2174C1)");
    check_base_class_offset(lv, (S2174C4*)(S2174C3*)(S2174C2*), 0, "S2174C1");
    check_base_class_offset(lv, (S2174C3*)(S2174C2*), 0, "S2174C1");
    check_base_class_offset(lv, (S2174C2*), 0, "S2174C1");
    test_class_info(&lv, &cd_S2174C1);
    dp->~S2174C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2174C1(Test_S2174C1, "S2174C1", ABISELECT(240,144));

#else // __cplusplus

extern void _ZN7S2174C1C1Ev();
extern void _ZN7S2174C1D1Ev();
Name_Map name_map_S2174C1[] = {
  NSPAIR(_ZN7S2174C1C1Ev),
  NSPAIR(_ZN7S2174C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2174C4;
extern VTBL_ENTRY _ZTI7S2174C4[];
extern  VTBL_ENTRY _ZTV7S2174C4[];
extern Class_Descriptor cd_S2174C3;
extern VTBL_ENTRY _ZTI7S2174C3[];
extern  VTBL_ENTRY _ZTV7S2174C3[];
extern Class_Descriptor cd_S2174C2;
extern VTBL_ENTRY _ZTI7S2174C2[];
extern  VTBL_ENTRY _ZTV7S2174C2[];
static Base_Class bases_S2174C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2174C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2174C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2174C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2174C1[];
extern void _ZN7S2174C1D1Ev();
extern void _ZN7S2174C1D0Ev();
extern void _ZN7S2174C42v3Ev();
extern void _ZN7S2174C42v4Ev();
extern void _ZN7S2174C42v5Ev();
extern void _ZN7S2174C32v6Ev();
extern void _ZN7S2174C32v7Ev();
extern void _ZN7S2174C22v8Ev();
extern void _ZN7S2174C22v9Ev();
extern void _ZN7S2174C23v10Ev();
extern void _ZN7S2174C23v11Ev();
extern void _ZN7S2174C23v12Ev();
extern void _ZN7S2174C23v13Ev();
extern void _ZN7S2174C12v1Ev();
extern void _ZN7S2174C12v2Ev();
static  VTBL_ENTRY vtc_S2174C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2174C1[0]),
  (VTBL_ENTRY)&_ZN7S2174C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2174C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2174C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2174C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2174C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2174C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2174C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2174C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2174C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2174C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2174C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2174C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2174C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2174C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2174C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2174C1[];
extern  VTBL_ENTRY _ZTV7S2174C1[];
Class_Descriptor cd_S2174C1 = {  "S2174C1", // class name
  bases_S2174C1, 3,
  &(vtc_S2174C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,144), // object size
  NSPAIRA(_ZTI7S2174C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2174C1),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S787C4  : S1C11_nt {
  virtual void  v6(); // _ZN6S787C42v6Ev
  virtual void  v7(); // _ZN6S787C42v7Ev
  virtual void  v8(); // _ZN6S787C42v8Ev
  virtual void  v9(); // _ZN6S787C42v9Ev
  virtual void  v10(); // _ZN6S787C43v10Ev
  virtual void  v11(); // _ZN6S787C43v11Ev
  virtual void  v12(); // _ZN6S787C43v12Ev
  virtual void  v13(); // _ZN6S787C43v13Ev
  virtual void  v14(); // _ZN6S787C43v14Ev
  virtual void  v15(); // _ZN6S787C43v15Ev
  virtual void  v16(); // _ZN6S787C43v16Ev
  virtual void  v17(); // _ZN6S787C43v17Ev
  virtual void  v18(); // _ZN6S787C43v18Ev
  virtual void  v19(); // _ZN6S787C43v19Ev
  virtual void  v20(); // _ZN6S787C43v20Ev
  virtual void  v21(); // _ZN6S787C43v21Ev
  virtual void  v22(); // _ZN6S787C43v22Ev
  virtual void  v23(); // _ZN6S787C43v23Ev
  virtual void  v24(); // _ZN6S787C43v24Ev
  virtual void  v25(); // _ZN6S787C43v25Ev
  virtual void  v26(); // _ZN6S787C43v26Ev
  virtual void  v27(); // _ZN6S787C43v27Ev
  virtual void  v28(); // _ZN6S787C43v28Ev
  virtual void  v29(); // _ZN6S787C43v29Ev
  virtual void  v30(); // _ZN6S787C43v30Ev
  virtual void  v31(); // _ZN6S787C43v31Ev
  virtual void  v32(); // _ZN6S787C43v32Ev
  virtual void  v33(); // _ZN6S787C43v33Ev
  virtual void  v34(); // _ZN6S787C43v34Ev
  virtual void  v35(); // _ZN6S787C43v35Ev
  virtual void  v36(); // _ZN6S787C43v36Ev
  virtual void  v37(); // _ZN6S787C43v37Ev
  virtual void  v38(); // _ZN6S787C43v38Ev
  virtual void  v39(); // _ZN6S787C43v39Ev
  virtual void  v40(); // _ZN6S787C43v40Ev
  virtual void  v41(); // _ZN6S787C43v41Ev
  virtual void  v42(); // _ZN6S787C43v42Ev
  virtual void  v43(); // _ZN6S787C43v43Ev
  virtual void  v44(); // _ZN6S787C43v44Ev
  virtual void  v45(); // _ZN6S787C43v45Ev
  virtual void  v46(); // _ZN6S787C43v46Ev
  virtual void  v47(); // _ZN6S787C43v47Ev
  virtual void  v48(); // _ZN6S787C43v48Ev
  ~S787C4(); // tgen
  S787C4(); // tgen
};
//SIG(-1 S787C4) C1{ BC2{ vd m Fp Fi} 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}


void  S787C4 ::v6(){vfunc_called(this, "_ZN6S787C42v6Ev");}
void  S787C4 ::v7(){vfunc_called(this, "_ZN6S787C42v7Ev");}
void  S787C4 ::v8(){vfunc_called(this, "_ZN6S787C42v8Ev");}
void  S787C4 ::v9(){vfunc_called(this, "_ZN6S787C42v9Ev");}
void  S787C4 ::v10(){vfunc_called(this, "_ZN6S787C43v10Ev");}
void  S787C4 ::v11(){vfunc_called(this, "_ZN6S787C43v11Ev");}
void  S787C4 ::v12(){vfunc_called(this, "_ZN6S787C43v12Ev");}
void  S787C4 ::v13(){vfunc_called(this, "_ZN6S787C43v13Ev");}
void  S787C4 ::v14(){vfunc_called(this, "_ZN6S787C43v14Ev");}
void  S787C4 ::v15(){vfunc_called(this, "_ZN6S787C43v15Ev");}
void  S787C4 ::v16(){vfunc_called(this, "_ZN6S787C43v16Ev");}
void  S787C4 ::v17(){vfunc_called(this, "_ZN6S787C43v17Ev");}
void  S787C4 ::v18(){vfunc_called(this, "_ZN6S787C43v18Ev");}
void  S787C4 ::v19(){vfunc_called(this, "_ZN6S787C43v19Ev");}
void  S787C4 ::v20(){vfunc_called(this, "_ZN6S787C43v20Ev");}
void  S787C4 ::v21(){vfunc_called(this, "_ZN6S787C43v21Ev");}
void  S787C4 ::v22(){vfunc_called(this, "_ZN6S787C43v22Ev");}
void  S787C4 ::v23(){vfunc_called(this, "_ZN6S787C43v23Ev");}
void  S787C4 ::v24(){vfunc_called(this, "_ZN6S787C43v24Ev");}
void  S787C4 ::v25(){vfunc_called(this, "_ZN6S787C43v25Ev");}
void  S787C4 ::v26(){vfunc_called(this, "_ZN6S787C43v26Ev");}
void  S787C4 ::v27(){vfunc_called(this, "_ZN6S787C43v27Ev");}
void  S787C4 ::v28(){vfunc_called(this, "_ZN6S787C43v28Ev");}
void  S787C4 ::v29(){vfunc_called(this, "_ZN6S787C43v29Ev");}
void  S787C4 ::v30(){vfunc_called(this, "_ZN6S787C43v30Ev");}
void  S787C4 ::v31(){vfunc_called(this, "_ZN6S787C43v31Ev");}
void  S787C4 ::v32(){vfunc_called(this, "_ZN6S787C43v32Ev");}
void  S787C4 ::v33(){vfunc_called(this, "_ZN6S787C43v33Ev");}
void  S787C4 ::v34(){vfunc_called(this, "_ZN6S787C43v34Ev");}
void  S787C4 ::v35(){vfunc_called(this, "_ZN6S787C43v35Ev");}
void  S787C4 ::v36(){vfunc_called(this, "_ZN6S787C43v36Ev");}
void  S787C4 ::v37(){vfunc_called(this, "_ZN6S787C43v37Ev");}
void  S787C4 ::v38(){vfunc_called(this, "_ZN6S787C43v38Ev");}
void  S787C4 ::v39(){vfunc_called(this, "_ZN6S787C43v39Ev");}
void  S787C4 ::v40(){vfunc_called(this, "_ZN6S787C43v40Ev");}
void  S787C4 ::v41(){vfunc_called(this, "_ZN6S787C43v41Ev");}
void  S787C4 ::v42(){vfunc_called(this, "_ZN6S787C43v42Ev");}
void  S787C4 ::v43(){vfunc_called(this, "_ZN6S787C43v43Ev");}
void  S787C4 ::v44(){vfunc_called(this, "_ZN6S787C43v44Ev");}
void  S787C4 ::v45(){vfunc_called(this, "_ZN6S787C43v45Ev");}
void  S787C4 ::v46(){vfunc_called(this, "_ZN6S787C43v46Ev");}
void  S787C4 ::v47(){vfunc_called(this, "_ZN6S787C43v47Ev");}
void  S787C4 ::v48(){vfunc_called(this, "_ZN6S787C43v48Ev");}
S787C4 ::~S787C4(){ note_dtor("S787C4", this);} // tgen
S787C4 ::S787C4(){ note_ctor("S787C4", this);} // tgen

static void Test_S787C4()
{
  extern Class_Descriptor cd_S787C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S787C4, buf);
    S787C4 *dp, &lv = *(dp=new (buf) S787C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S787C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S787C4)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S787C4");
    test_class_info(&lv, &cd_S787C4);
    dp->~S787C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS787C4(Test_S787C4, "S787C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S787C4C1Ev();
extern void _ZN6S787C4D1Ev();
Name_Map name_map_S787C4[] = {
  NSPAIR(_ZN6S787C4C1Ev),
  NSPAIR(_ZN6S787C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S787C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI6S787C4[];
extern void _ZN6S787C4D1Ev();
extern void _ZN6S787C4D0Ev();
extern void _ZN6S787C42v6Ev();
extern void _ZN6S787C42v7Ev();
extern void _ZN6S787C42v8Ev();
extern void _ZN6S787C42v9Ev();
extern void _ZN6S787C43v10Ev();
extern void _ZN6S787C43v11Ev();
extern void _ZN6S787C43v12Ev();
extern void _ZN6S787C43v13Ev();
extern void _ZN6S787C43v14Ev();
extern void _ZN6S787C43v15Ev();
extern void _ZN6S787C43v16Ev();
extern void _ZN6S787C43v17Ev();
extern void _ZN6S787C43v18Ev();
extern void _ZN6S787C43v19Ev();
extern void _ZN6S787C43v20Ev();
extern void _ZN6S787C43v21Ev();
extern void _ZN6S787C43v22Ev();
extern void _ZN6S787C43v23Ev();
extern void _ZN6S787C43v24Ev();
extern void _ZN6S787C43v25Ev();
extern void _ZN6S787C43v26Ev();
extern void _ZN6S787C43v27Ev();
extern void _ZN6S787C43v28Ev();
extern void _ZN6S787C43v29Ev();
extern void _ZN6S787C43v30Ev();
extern void _ZN6S787C43v31Ev();
extern void _ZN6S787C43v32Ev();
extern void _ZN6S787C43v33Ev();
extern void _ZN6S787C43v34Ev();
extern void _ZN6S787C43v35Ev();
extern void _ZN6S787C43v36Ev();
extern void _ZN6S787C43v37Ev();
extern void _ZN6S787C43v38Ev();
extern void _ZN6S787C43v39Ev();
extern void _ZN6S787C43v40Ev();
extern void _ZN6S787C43v41Ev();
extern void _ZN6S787C43v42Ev();
extern void _ZN6S787C43v43Ev();
extern void _ZN6S787C43v44Ev();
extern void _ZN6S787C43v45Ev();
extern void _ZN6S787C43v46Ev();
extern void _ZN6S787C43v47Ev();
extern void _ZN6S787C43v48Ev();
static  VTBL_ENTRY vtc_S787C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S787C4[0]),
  (VTBL_ENTRY)&_ZN6S787C4D1Ev,
  (VTBL_ENTRY)&_ZN6S787C4D0Ev,
  (VTBL_ENTRY)&_ZN6S787C42v6Ev,
  (VTBL_ENTRY)&_ZN6S787C42v7Ev,
  (VTBL_ENTRY)&_ZN6S787C42v8Ev,
  (VTBL_ENTRY)&_ZN6S787C42v9Ev,
  (VTBL_ENTRY)&_ZN6S787C43v10Ev,
  (VTBL_ENTRY)&_ZN6S787C43v11Ev,
  (VTBL_ENTRY)&_ZN6S787C43v12Ev,
  (VTBL_ENTRY)&_ZN6S787C43v13Ev,
  (VTBL_ENTRY)&_ZN6S787C43v14Ev,
  (VTBL_ENTRY)&_ZN6S787C43v15Ev,
  (VTBL_ENTRY)&_ZN6S787C43v16Ev,
  (VTBL_ENTRY)&_ZN6S787C43v17Ev,
  (VTBL_ENTRY)&_ZN6S787C43v18Ev,
  (VTBL_ENTRY)&_ZN6S787C43v19Ev,
  (VTBL_ENTRY)&_ZN6S787C43v20Ev,
  (VTBL_ENTRY)&_ZN6S787C43v21Ev,
  (VTBL_ENTRY)&_ZN6S787C43v22Ev,
  (VTBL_ENTRY)&_ZN6S787C43v23Ev,
  (VTBL_ENTRY)&_ZN6S787C43v24Ev,
  (VTBL_ENTRY)&_ZN6S787C43v25Ev,
  (VTBL_ENTRY)&_ZN6S787C43v26Ev,
  (VTBL_ENTRY)&_ZN6S787C43v27Ev,
  (VTBL_ENTRY)&_ZN6S787C43v28Ev,
  (VTBL_ENTRY)&_ZN6S787C43v29Ev,
  (VTBL_ENTRY)&_ZN6S787C43v30Ev,
  (VTBL_ENTRY)&_ZN6S787C43v31Ev,
  (VTBL_ENTRY)&_ZN6S787C43v32Ev,
  (VTBL_ENTRY)&_ZN6S787C43v33Ev,
  (VTBL_ENTRY)&_ZN6S787C43v34Ev,
  (VTBL_ENTRY)&_ZN6S787C43v35Ev,
  (VTBL_ENTRY)&_ZN6S787C43v36Ev,
  (VTBL_ENTRY)&_ZN6S787C43v37Ev,
  (VTBL_ENTRY)&_ZN6S787C43v38Ev,
  (VTBL_ENTRY)&_ZN6S787C43v39Ev,
  (VTBL_ENTRY)&_ZN6S787C43v40Ev,
  (VTBL_ENTRY)&_ZN6S787C43v41Ev,
  (VTBL_ENTRY)&_ZN6S787C43v42Ev,
  (VTBL_ENTRY)&_ZN6S787C43v43Ev,
  (VTBL_ENTRY)&_ZN6S787C43v44Ev,
  (VTBL_ENTRY)&_ZN6S787C43v45Ev,
  (VTBL_ENTRY)&_ZN6S787C43v46Ev,
  (VTBL_ENTRY)&_ZN6S787C43v47Ev,
  (VTBL_ENTRY)&_ZN6S787C43v48Ev,
};
extern VTBL_ENTRY _ZTI6S787C4[];
extern  VTBL_ENTRY _ZTV6S787C4[];
Class_Descriptor cd_S787C4 = {  "S787C4", // class name
  bases_S787C4, 1,
  &(vtc_S787C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S787C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S787C4),47, //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  S787C3  : S787C4 {
  virtual void  v49(); // _ZN6S787C33v49Ev
  virtual void  v50(); // _ZN6S787C33v50Ev
  virtual void  v51(); // _ZN6S787C33v51Ev
  virtual void  v52(); // _ZN6S787C33v52Ev
  ~S787C3(); // tgen
  S787C3(); // tgen
};
//SIG(-1 S787C3) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4}


void  S787C3 ::v49(){vfunc_called(this, "_ZN6S787C33v49Ev");}
void  S787C3 ::v50(){vfunc_called(this, "_ZN6S787C33v50Ev");}
void  S787C3 ::v51(){vfunc_called(this, "_ZN6S787C33v51Ev");}
void  S787C3 ::v52(){vfunc_called(this, "_ZN6S787C33v52Ev");}
S787C3 ::~S787C3(){ note_dtor("S787C3", this);} // tgen
S787C3 ::S787C3(){ note_ctor("S787C3", this);} // tgen

static void Test_S787C3()
{
  extern Class_Descriptor cd_S787C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S787C3, buf);
    S787C3 *dp, &lv = *(dp=new (buf) S787C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S787C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S787C3)");
    check_base_class_offset(lv, (S1C11_nt*)(S787C4*), 0, "S787C3");
    check_base_class_offset(lv, (S787C4*), 0, "S787C3");
    test_class_info(&lv, &cd_S787C3);
    dp->~S787C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS787C3(Test_S787C3, "S787C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S787C3C1Ev();
extern void _ZN6S787C3D1Ev();
Name_Map name_map_S787C3[] = {
  NSPAIR(_ZN6S787C3C1Ev),
  NSPAIR(_ZN6S787C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S787C4;
extern VTBL_ENTRY _ZTI6S787C4[];
extern  VTBL_ENTRY _ZTV6S787C4[];
static Base_Class bases_S787C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S787C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S787C3[];
extern void _ZN6S787C3D1Ev();
extern void _ZN6S787C3D0Ev();
extern void _ZN6S787C42v6Ev();
extern void _ZN6S787C42v7Ev();
extern void _ZN6S787C42v8Ev();
extern void _ZN6S787C42v9Ev();
extern void _ZN6S787C43v10Ev();
extern void _ZN6S787C43v11Ev();
extern void _ZN6S787C43v12Ev();
extern void _ZN6S787C43v13Ev();
extern void _ZN6S787C43v14Ev();
extern void _ZN6S787C43v15Ev();
extern void _ZN6S787C43v16Ev();
extern void _ZN6S787C43v17Ev();
extern void _ZN6S787C43v18Ev();
extern void _ZN6S787C43v19Ev();
extern void _ZN6S787C43v20Ev();
extern void _ZN6S787C43v21Ev();
extern void _ZN6S787C43v22Ev();
extern void _ZN6S787C43v23Ev();
extern void _ZN6S787C43v24Ev();
extern void _ZN6S787C43v25Ev();
extern void _ZN6S787C43v26Ev();
extern void _ZN6S787C43v27Ev();
extern void _ZN6S787C43v28Ev();
extern void _ZN6S787C43v29Ev();
extern void _ZN6S787C43v30Ev();
extern void _ZN6S787C43v31Ev();
extern void _ZN6S787C43v32Ev();
extern void _ZN6S787C43v33Ev();
extern void _ZN6S787C43v34Ev();
extern void _ZN6S787C43v35Ev();
extern void _ZN6S787C43v36Ev();
extern void _ZN6S787C43v37Ev();
extern void _ZN6S787C43v38Ev();
extern void _ZN6S787C43v39Ev();
extern void _ZN6S787C43v40Ev();
extern void _ZN6S787C43v41Ev();
extern void _ZN6S787C43v42Ev();
extern void _ZN6S787C43v43Ev();
extern void _ZN6S787C43v44Ev();
extern void _ZN6S787C43v45Ev();
extern void _ZN6S787C43v46Ev();
extern void _ZN6S787C43v47Ev();
extern void _ZN6S787C43v48Ev();
extern void _ZN6S787C33v49Ev();
extern void _ZN6S787C33v50Ev();
extern void _ZN6S787C33v51Ev();
extern void _ZN6S787C33v52Ev();
static  VTBL_ENTRY vtc_S787C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S787C3[0]),
  (VTBL_ENTRY)&_ZN6S787C3D1Ev,
  (VTBL_ENTRY)&_ZN6S787C3D0Ev,
  (VTBL_ENTRY)&_ZN6S787C42v6Ev,
  (VTBL_ENTRY)&_ZN6S787C42v7Ev,
  (VTBL_ENTRY)&_ZN6S787C42v8Ev,
  (VTBL_ENTRY)&_ZN6S787C42v9Ev,
  (VTBL_ENTRY)&_ZN6S787C43v10Ev,
  (VTBL_ENTRY)&_ZN6S787C43v11Ev,
  (VTBL_ENTRY)&_ZN6S787C43v12Ev,
  (VTBL_ENTRY)&_ZN6S787C43v13Ev,
  (VTBL_ENTRY)&_ZN6S787C43v14Ev,
  (VTBL_ENTRY)&_ZN6S787C43v15Ev,
  (VTBL_ENTRY)&_ZN6S787C43v16Ev,
  (VTBL_ENTRY)&_ZN6S787C43v17Ev,
  (VTBL_ENTRY)&_ZN6S787C43v18Ev,
  (VTBL_ENTRY)&_ZN6S787C43v19Ev,
  (VTBL_ENTRY)&_ZN6S787C43v20Ev,
  (VTBL_ENTRY)&_ZN6S787C43v21Ev,
  (VTBL_ENTRY)&_ZN6S787C43v22Ev,
  (VTBL_ENTRY)&_ZN6S787C43v23Ev,
  (VTBL_ENTRY)&_ZN6S787C43v24Ev,
  (VTBL_ENTRY)&_ZN6S787C43v25Ev,
  (VTBL_ENTRY)&_ZN6S787C43v26Ev,
  (VTBL_ENTRY)&_ZN6S787C43v27Ev,
  (VTBL_ENTRY)&_ZN6S787C43v28Ev,
  (VTBL_ENTRY)&_ZN6S787C43v29Ev,
  (VTBL_ENTRY)&_ZN6S787C43v30Ev,
  (VTBL_ENTRY)&_ZN6S787C43v31Ev,
  (VTBL_ENTRY)&_ZN6S787C43v32Ev,
  (VTBL_ENTRY)&_ZN6S787C43v33Ev,
  (VTBL_ENTRY)&_ZN6S787C43v34Ev,
  (VTBL_ENTRY)&_ZN6S787C43v35Ev,
  (VTBL_ENTRY)&_ZN6S787C43v36Ev,
  (VTBL_ENTRY)&_ZN6S787C43v37Ev,
  (VTBL_ENTRY)&_ZN6S787C43v38Ev,
  (VTBL_ENTRY)&_ZN6S787C43v39Ev,
  (VTBL_ENTRY)&_ZN6S787C43v40Ev,
  (VTBL_ENTRY)&_ZN6S787C43v41Ev,
  (VTBL_ENTRY)&_ZN6S787C43v42Ev,
  (VTBL_ENTRY)&_ZN6S787C43v43Ev,
  (VTBL_ENTRY)&_ZN6S787C43v44Ev,
  (VTBL_ENTRY)&_ZN6S787C43v45Ev,
  (VTBL_ENTRY)&_ZN6S787C43v46Ev,
  (VTBL_ENTRY)&_ZN6S787C43v47Ev,
  (VTBL_ENTRY)&_ZN6S787C43v48Ev,
  (VTBL_ENTRY)&_ZN6S787C33v49Ev,
  (VTBL_ENTRY)&_ZN6S787C33v50Ev,
  (VTBL_ENTRY)&_ZN6S787C33v51Ev,
  (VTBL_ENTRY)&_ZN6S787C33v52Ev,
};
extern VTBL_ENTRY _ZTI6S787C3[];
extern  VTBL_ENTRY _ZTV6S787C3[];
Class_Descriptor cd_S787C3 = {  "S787C3", // class name
  bases_S787C3, 2,
  &(vtc_S787C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S787C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S787C3),51, //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  S787C2  : S787C3 {
  virtual void  v53(); // _ZN6S787C23v53Ev
  ~S787C2(); // tgen
  S787C2(); // tgen
};
//SIG(-1 S787C2) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1}


void  S787C2 ::v53(){vfunc_called(this, "_ZN6S787C23v53Ev");}
S787C2 ::~S787C2(){ note_dtor("S787C2", this);} // tgen
S787C2 ::S787C2(){ note_ctor("S787C2", this);} // tgen

static void Test_S787C2()
{
  extern Class_Descriptor cd_S787C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S787C2, buf);
    S787C2 *dp, &lv = *(dp=new (buf) S787C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S787C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S787C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S787C4*)(S787C3*), 0, "S787C2");
    check_base_class_offset(lv, (S787C4*)(S787C3*), 0, "S787C2");
    check_base_class_offset(lv, (S787C3*), 0, "S787C2");
    test_class_info(&lv, &cd_S787C2);
    dp->~S787C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS787C2(Test_S787C2, "S787C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S787C2C1Ev();
extern void _ZN6S787C2D1Ev();
Name_Map name_map_S787C2[] = {
  NSPAIR(_ZN6S787C2C1Ev),
  NSPAIR(_ZN6S787C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S787C4;
extern VTBL_ENTRY _ZTI6S787C4[];
extern  VTBL_ENTRY _ZTV6S787C4[];
extern Class_Descriptor cd_S787C3;
extern VTBL_ENTRY _ZTI6S787C3[];
extern  VTBL_ENTRY _ZTV6S787C3[];
static Base_Class bases_S787C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S787C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S787C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S787C2[];
extern void _ZN6S787C2D1Ev();
extern void _ZN6S787C2D0Ev();
extern void _ZN6S787C42v6Ev();
extern void _ZN6S787C42v7Ev();
extern void _ZN6S787C42v8Ev();
extern void _ZN6S787C42v9Ev();
extern void _ZN6S787C43v10Ev();
extern void _ZN6S787C43v11Ev();
extern void _ZN6S787C43v12Ev();
extern void _ZN6S787C43v13Ev();
extern void _ZN6S787C43v14Ev();
extern void _ZN6S787C43v15Ev();
extern void _ZN6S787C43v16Ev();
extern void _ZN6S787C43v17Ev();
extern void _ZN6S787C43v18Ev();
extern void _ZN6S787C43v19Ev();
extern void _ZN6S787C43v20Ev();
extern void _ZN6S787C43v21Ev();
extern void _ZN6S787C43v22Ev();
extern void _ZN6S787C43v23Ev();
extern void _ZN6S787C43v24Ev();
extern void _ZN6S787C43v25Ev();
extern void _ZN6S787C43v26Ev();
extern void _ZN6S787C43v27Ev();
extern void _ZN6S787C43v28Ev();
extern void _ZN6S787C43v29Ev();
extern void _ZN6S787C43v30Ev();
extern void _ZN6S787C43v31Ev();
extern void _ZN6S787C43v32Ev();
extern void _ZN6S787C43v33Ev();
extern void _ZN6S787C43v34Ev();
extern void _ZN6S787C43v35Ev();
extern void _ZN6S787C43v36Ev();
extern void _ZN6S787C43v37Ev();
extern void _ZN6S787C43v38Ev();
extern void _ZN6S787C43v39Ev();
extern void _ZN6S787C43v40Ev();
extern void _ZN6S787C43v41Ev();
extern void _ZN6S787C43v42Ev();
extern void _ZN6S787C43v43Ev();
extern void _ZN6S787C43v44Ev();
extern void _ZN6S787C43v45Ev();
extern void _ZN6S787C43v46Ev();
extern void _ZN6S787C43v47Ev();
extern void _ZN6S787C43v48Ev();
extern void _ZN6S787C33v49Ev();
extern void _ZN6S787C33v50Ev();
extern void _ZN6S787C33v51Ev();
extern void _ZN6S787C33v52Ev();
extern void _ZN6S787C23v53Ev();
static  VTBL_ENTRY vtc_S787C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S787C2[0]),
  (VTBL_ENTRY)&_ZN6S787C2D1Ev,
  (VTBL_ENTRY)&_ZN6S787C2D0Ev,
  (VTBL_ENTRY)&_ZN6S787C42v6Ev,
  (VTBL_ENTRY)&_ZN6S787C42v7Ev,
  (VTBL_ENTRY)&_ZN6S787C42v8Ev,
  (VTBL_ENTRY)&_ZN6S787C42v9Ev,
  (VTBL_ENTRY)&_ZN6S787C43v10Ev,
  (VTBL_ENTRY)&_ZN6S787C43v11Ev,
  (VTBL_ENTRY)&_ZN6S787C43v12Ev,
  (VTBL_ENTRY)&_ZN6S787C43v13Ev,
  (VTBL_ENTRY)&_ZN6S787C43v14Ev,
  (VTBL_ENTRY)&_ZN6S787C43v15Ev,
  (VTBL_ENTRY)&_ZN6S787C43v16Ev,
  (VTBL_ENTRY)&_ZN6S787C43v17Ev,
  (VTBL_ENTRY)&_ZN6S787C43v18Ev,
  (VTBL_ENTRY)&_ZN6S787C43v19Ev,
  (VTBL_ENTRY)&_ZN6S787C43v20Ev,
  (VTBL_ENTRY)&_ZN6S787C43v21Ev,
  (VTBL_ENTRY)&_ZN6S787C43v22Ev,
  (VTBL_ENTRY)&_ZN6S787C43v23Ev,
  (VTBL_ENTRY)&_ZN6S787C43v24Ev,
  (VTBL_ENTRY)&_ZN6S787C43v25Ev,
  (VTBL_ENTRY)&_ZN6S787C43v26Ev,
  (VTBL_ENTRY)&_ZN6S787C43v27Ev,
  (VTBL_ENTRY)&_ZN6S787C43v28Ev,
  (VTBL_ENTRY)&_ZN6S787C43v29Ev,
  (VTBL_ENTRY)&_ZN6S787C43v30Ev,
  (VTBL_ENTRY)&_ZN6S787C43v31Ev,
  (VTBL_ENTRY)&_ZN6S787C43v32Ev,
  (VTBL_ENTRY)&_ZN6S787C43v33Ev,
  (VTBL_ENTRY)&_ZN6S787C43v34Ev,
  (VTBL_ENTRY)&_ZN6S787C43v35Ev,
  (VTBL_ENTRY)&_ZN6S787C43v36Ev,
  (VTBL_ENTRY)&_ZN6S787C43v37Ev,
  (VTBL_ENTRY)&_ZN6S787C43v38Ev,
  (VTBL_ENTRY)&_ZN6S787C43v39Ev,
  (VTBL_ENTRY)&_ZN6S787C43v40Ev,
  (VTBL_ENTRY)&_ZN6S787C43v41Ev,
  (VTBL_ENTRY)&_ZN6S787C43v42Ev,
  (VTBL_ENTRY)&_ZN6S787C43v43Ev,
  (VTBL_ENTRY)&_ZN6S787C43v44Ev,
  (VTBL_ENTRY)&_ZN6S787C43v45Ev,
  (VTBL_ENTRY)&_ZN6S787C43v46Ev,
  (VTBL_ENTRY)&_ZN6S787C43v47Ev,
  (VTBL_ENTRY)&_ZN6S787C43v48Ev,
  (VTBL_ENTRY)&_ZN6S787C33v49Ev,
  (VTBL_ENTRY)&_ZN6S787C33v50Ev,
  (VTBL_ENTRY)&_ZN6S787C33v51Ev,
  (VTBL_ENTRY)&_ZN6S787C33v52Ev,
  (VTBL_ENTRY)&_ZN6S787C23v53Ev,
};
extern VTBL_ENTRY _ZTI6S787C2[];
extern  VTBL_ENTRY _ZTV6S787C2[];
Class_Descriptor cd_S787C2 = {  "S787C2", // class name
  bases_S787C2, 3,
  &(vtc_S787C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S787C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S787C2),52, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S787C1  : S787C2 {
  virtual void  v1(); // _ZN6S787C12v1Ev
  virtual void  v2(); // _ZN6S787C12v2Ev
  virtual void  v3(); // _ZN6S787C12v3Ev
  virtual void  v4(); // _ZN6S787C12v4Ev
  virtual void  v5(); // _ZN6S787C12v5Ev
  ~S787C1(); // tgen
  S787C1(); // tgen
};
//SIG(1 S787C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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} v1 v2 v3 v4 v5}


void  S787C1 ::v1(){vfunc_called(this, "_ZN6S787C12v1Ev");}
void  S787C1 ::v2(){vfunc_called(this, "_ZN6S787C12v2Ev");}
void  S787C1 ::v3(){vfunc_called(this, "_ZN6S787C12v3Ev");}
void  S787C1 ::v4(){vfunc_called(this, "_ZN6S787C12v4Ev");}
void  S787C1 ::v5(){vfunc_called(this, "_ZN6S787C12v5Ev");}
S787C1 ::~S787C1(){ note_dtor("S787C1", this);} // tgen
S787C1 ::S787C1(){ note_ctor("S787C1", this);} // tgen

static void Test_S787C1()
{
  extern Class_Descriptor cd_S787C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S787C1, buf);
    S787C1 *dp, &lv = *(dp=new (buf) S787C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S787C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S787C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S787C4*)(S787C3*)(S787C2*), 0, "S787C1");
    check_base_class_offset(lv, (S787C4*)(S787C3*)(S787C2*), 0, "S787C1");
    check_base_class_offset(lv, (S787C3*)(S787C2*), 0, "S787C1");
    check_base_class_offset(lv, (S787C2*), 0, "S787C1");
    test_class_info(&lv, &cd_S787C1);
    dp->~S787C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS787C1(Test_S787C1, "S787C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S787C1C1Ev();
extern void _ZN6S787C1D1Ev();
Name_Map name_map_S787C1[] = {
  NSPAIR(_ZN6S787C1C1Ev),
  NSPAIR(_ZN6S787C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S787C4;
extern VTBL_ENTRY _ZTI6S787C4[];
extern  VTBL_ENTRY _ZTV6S787C4[];
extern Class_Descriptor cd_S787C3;
extern VTBL_ENTRY _ZTI6S787C3[];
extern  VTBL_ENTRY _ZTV6S787C3[];
extern Class_Descriptor cd_S787C2;
extern VTBL_ENTRY _ZTI6S787C2[];
extern  VTBL_ENTRY _ZTV6S787C2[];
static Base_Class bases_S787C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S787C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S787C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S787C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S787C1[];
extern void _ZN6S787C1D1Ev();
extern void _ZN6S787C1D0Ev();
extern void _ZN6S787C42v6Ev();
extern void _ZN6S787C42v7Ev();
extern void _ZN6S787C42v8Ev();
extern void _ZN6S787C42v9Ev();
extern void _ZN6S787C43v10Ev();
extern void _ZN6S787C43v11Ev();
extern void _ZN6S787C43v12Ev();
extern void _ZN6S787C43v13Ev();
extern void _ZN6S787C43v14Ev();
extern void _ZN6S787C43v15Ev();
extern void _ZN6S787C43v16Ev();
extern void _ZN6S787C43v17Ev();
extern void _ZN6S787C43v18Ev();
extern void _ZN6S787C43v19Ev();
extern void _ZN6S787C43v20Ev();
extern void _ZN6S787C43v21Ev();
extern void _ZN6S787C43v22Ev();
extern void _ZN6S787C43v23Ev();
extern void _ZN6S787C43v24Ev();
extern void _ZN6S787C43v25Ev();
extern void _ZN6S787C43v26Ev();
extern void _ZN6S787C43v27Ev();
extern void _ZN6S787C43v28Ev();
extern void _ZN6S787C43v29Ev();
extern void _ZN6S787C43v30Ev();
extern void _ZN6S787C43v31Ev();
extern void _ZN6S787C43v32Ev();
extern void _ZN6S787C43v33Ev();
extern void _ZN6S787C43v34Ev();
extern void _ZN6S787C43v35Ev();
extern void _ZN6S787C43v36Ev();
extern void _ZN6S787C43v37Ev();
extern void _ZN6S787C43v38Ev();
extern void _ZN6S787C43v39Ev();
extern void _ZN6S787C43v40Ev();
extern void _ZN6S787C43v41Ev();
extern void _ZN6S787C43v42Ev();
extern void _ZN6S787C43v43Ev();
extern void _ZN6S787C43v44Ev();
extern void _ZN6S787C43v45Ev();
extern void _ZN6S787C43v46Ev();
extern void _ZN6S787C43v47Ev();
extern void _ZN6S787C43v48Ev();
extern void _ZN6S787C33v49Ev();
extern void _ZN6S787C33v50Ev();
extern void _ZN6S787C33v51Ev();
extern void _ZN6S787C33v52Ev();
extern void _ZN6S787C23v53Ev();
extern void _ZN6S787C12v1Ev();
extern void _ZN6S787C12v2Ev();
extern void _ZN6S787C12v3Ev();
extern void _ZN6S787C12v4Ev();
extern void _ZN6S787C12v5Ev();
static  VTBL_ENTRY vtc_S787C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S787C1[0]),
  (VTBL_ENTRY)&_ZN6S787C1D1Ev,
  (VTBL_ENTRY)&_ZN6S787C1D0Ev,
  (VTBL_ENTRY)&_ZN6S787C42v6Ev,
  (VTBL_ENTRY)&_ZN6S787C42v7Ev,
  (VTBL_ENTRY)&_ZN6S787C42v8Ev,
  (VTBL_ENTRY)&_ZN6S787C42v9Ev,
  (VTBL_ENTRY)&_ZN6S787C43v10Ev,
  (VTBL_ENTRY)&_ZN6S787C43v11Ev,
  (VTBL_ENTRY)&_ZN6S787C43v12Ev,
  (VTBL_ENTRY)&_ZN6S787C43v13Ev,
  (VTBL_ENTRY)&_ZN6S787C43v14Ev,
  (VTBL_ENTRY)&_ZN6S787C43v15Ev,
  (VTBL_ENTRY)&_ZN6S787C43v16Ev,
  (VTBL_ENTRY)&_ZN6S787C43v17Ev,
  (VTBL_ENTRY)&_ZN6S787C43v18Ev,
  (VTBL_ENTRY)&_ZN6S787C43v19Ev,
  (VTBL_ENTRY)&_ZN6S787C43v20Ev,
  (VTBL_ENTRY)&_ZN6S787C43v21Ev,
  (VTBL_ENTRY)&_ZN6S787C43v22Ev,
  (VTBL_ENTRY)&_ZN6S787C43v23Ev,
  (VTBL_ENTRY)&_ZN6S787C43v24Ev,
  (VTBL_ENTRY)&_ZN6S787C43v25Ev,
  (VTBL_ENTRY)&_ZN6S787C43v26Ev,
  (VTBL_ENTRY)&_ZN6S787C43v27Ev,
  (VTBL_ENTRY)&_ZN6S787C43v28Ev,
  (VTBL_ENTRY)&_ZN6S787C43v29Ev,
  (VTBL_ENTRY)&_ZN6S787C43v30Ev,
  (VTBL_ENTRY)&_ZN6S787C43v31Ev,
  (VTBL_ENTRY)&_ZN6S787C43v32Ev,
  (VTBL_ENTRY)&_ZN6S787C43v33Ev,
  (VTBL_ENTRY)&_ZN6S787C43v34Ev,
  (VTBL_ENTRY)&_ZN6S787C43v35Ev,
  (VTBL_ENTRY)&_ZN6S787C43v36Ev,
  (VTBL_ENTRY)&_ZN6S787C43v37Ev,
  (VTBL_ENTRY)&_ZN6S787C43v38Ev,
  (VTBL_ENTRY)&_ZN6S787C43v39Ev,
  (VTBL_ENTRY)&_ZN6S787C43v40Ev,
  (VTBL_ENTRY)&_ZN6S787C43v41Ev,
  (VTBL_ENTRY)&_ZN6S787C43v42Ev,
  (VTBL_ENTRY)&_ZN6S787C43v43Ev,
  (VTBL_ENTRY)&_ZN6S787C43v44Ev,
  (VTBL_ENTRY)&_ZN6S787C43v45Ev,
  (VTBL_ENTRY)&_ZN6S787C43v46Ev,
  (VTBL_ENTRY)&_ZN6S787C43v47Ev,
  (VTBL_ENTRY)&_ZN6S787C43v48Ev,
  (VTBL_ENTRY)&_ZN6S787C33v49Ev,
  (VTBL_ENTRY)&_ZN6S787C33v50Ev,
  (VTBL_ENTRY)&_ZN6S787C33v51Ev,
  (VTBL_ENTRY)&_ZN6S787C33v52Ev,
  (VTBL_ENTRY)&_ZN6S787C23v53Ev,
  (VTBL_ENTRY)&_ZN6S787C12v1Ev,
  (VTBL_ENTRY)&_ZN6S787C12v2Ev,
  (VTBL_ENTRY)&_ZN6S787C12v3Ev,
  (VTBL_ENTRY)&_ZN6S787C12v4Ev,
  (VTBL_ENTRY)&_ZN6S787C12v5Ev,
};
extern VTBL_ENTRY _ZTI6S787C1[];
extern  VTBL_ENTRY _ZTV6S787C1[];
Class_Descriptor cd_S787C1 = {  "S787C1", // class name
  bases_S787C1, 4,
  &(vtc_S787C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S787C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S787C1),57, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1838C3  : S1C11_nt {
  virtual void  v8(); // _ZN7S1838C32v8Ev
  virtual void  v9(); // _ZN7S1838C32v9Ev
  virtual void  v10(); // _ZN7S1838C33v10Ev
  virtual void  v11(); // _ZN7S1838C33v11Ev
  virtual void  v12(); // _ZN7S1838C33v12Ev
  virtual void  v13(); // _ZN7S1838C33v13Ev
  virtual void  v14(); // _ZN7S1838C33v14Ev
  virtual void  v15(); // _ZN7S1838C33v15Ev
  virtual void  v16(); // _ZN7S1838C33v16Ev
  virtual void  v17(); // _ZN7S1838C33v17Ev
  virtual void  v18(); // _ZN7S1838C33v18Ev
  virtual void  v19(); // _ZN7S1838C33v19Ev
  virtual void  v20(); // _ZN7S1838C33v20Ev
  virtual void  v21(); // _ZN7S1838C33v21Ev
  virtual void  v22(); // _ZN7S1838C33v22Ev
  virtual void  v23(); // _ZN7S1838C33v23Ev
  virtual void  v24(); // _ZN7S1838C33v24Ev
  virtual void  v25(); // _ZN7S1838C33v25Ev
  virtual void  v26(); // _ZN7S1838C33v26Ev
  virtual void  v27(); // _ZN7S1838C33v27Ev
  virtual void  v28(); // _ZN7S1838C33v28Ev
  virtual void  v29(); // _ZN7S1838C33v29Ev
  virtual void  v30(); // _ZN7S1838C33v30Ev
  virtual void  v31(); // _ZN7S1838C33v31Ev
  virtual void  v32(); // _ZN7S1838C33v32Ev
  virtual void  v33(); // _ZN7S1838C33v33Ev
  virtual void  v34(); // _ZN7S1838C33v34Ev
  virtual void  v35(); // _ZN7S1838C33v35Ev
  virtual void  v36(); // _ZN7S1838C33v36Ev
  virtual void  v37(); // _ZN7S1838C33v37Ev
  virtual void  v38(); // _ZN7S1838C33v38Ev
  virtual void  v39(); // _ZN7S1838C33v39Ev
  virtual void  v40(); // _ZN7S1838C33v40Ev
  virtual void  v41(); // _ZN7S1838C33v41Ev
  virtual void  v42(); // _ZN7S1838C33v42Ev
  virtual void  v43(); // _ZN7S1838C33v43Ev
  virtual void  v44(); // _ZN7S1838C33v44Ev
  virtual void  v45(); // _ZN7S1838C33v45Ev
  virtual void  v46(); // _ZN7S1838C33v46Ev
  virtual void  v47(); // _ZN7S1838C33v47Ev
  virtual void  v48(); // _ZN7S1838C33v48Ev
  virtual void  v49(); // _ZN7S1838C33v49Ev
  virtual void  v50(); // _ZN7S1838C33v50Ev
  ~S1838C3(); // tgen
  S1838C3(); // tgen
};
//SIG(-1 S1838C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1838C3 ::v8(){vfunc_called(this, "_ZN7S1838C32v8Ev");}
void  S1838C3 ::v9(){vfunc_called(this, "_ZN7S1838C32v9Ev");}
void  S1838C3 ::v10(){vfunc_called(this, "_ZN7S1838C33v10Ev");}
void  S1838C3 ::v11(){vfunc_called(this, "_ZN7S1838C33v11Ev");}
void  S1838C3 ::v12(){vfunc_called(this, "_ZN7S1838C33v12Ev");}
void  S1838C3 ::v13(){vfunc_called(this, "_ZN7S1838C33v13Ev");}
void  S1838C3 ::v14(){vfunc_called(this, "_ZN7S1838C33v14Ev");}
void  S1838C3 ::v15(){vfunc_called(this, "_ZN7S1838C33v15Ev");}
void  S1838C3 ::v16(){vfunc_called(this, "_ZN7S1838C33v16Ev");}
void  S1838C3 ::v17(){vfunc_called(this, "_ZN7S1838C33v17Ev");}
void  S1838C3 ::v18(){vfunc_called(this, "_ZN7S1838C33v18Ev");}
void  S1838C3 ::v19(){vfunc_called(this, "_ZN7S1838C33v19Ev");}
void  S1838C3 ::v20(){vfunc_called(this, "_ZN7S1838C33v20Ev");}
void  S1838C3 ::v21(){vfunc_called(this, "_ZN7S1838C33v21Ev");}
void  S1838C3 ::v22(){vfunc_called(this, "_ZN7S1838C33v22Ev");}
void  S1838C3 ::v23(){vfunc_called(this, "_ZN7S1838C33v23Ev");}
void  S1838C3 ::v24(){vfunc_called(this, "_ZN7S1838C33v24Ev");}
void  S1838C3 ::v25(){vfunc_called(this, "_ZN7S1838C33v25Ev");}
void  S1838C3 ::v26(){vfunc_called(this, "_ZN7S1838C33v26Ev");}
void  S1838C3 ::v27(){vfunc_called(this, "_ZN7S1838C33v27Ev");}
void  S1838C3 ::v28(){vfunc_called(this, "_ZN7S1838C33v28Ev");}
void  S1838C3 ::v29(){vfunc_called(this, "_ZN7S1838C33v29Ev");}
void  S1838C3 ::v30(){vfunc_called(this, "_ZN7S1838C33v30Ev");}
void  S1838C3 ::v31(){vfunc_called(this, "_ZN7S1838C33v31Ev");}
void  S1838C3 ::v32(){vfunc_called(this, "_ZN7S1838C33v32Ev");}
void  S1838C3 ::v33(){vfunc_called(this, "_ZN7S1838C33v33Ev");}
void  S1838C3 ::v34(){vfunc_called(this, "_ZN7S1838C33v34Ev");}
void  S1838C3 ::v35(){vfunc_called(this, "_ZN7S1838C33v35Ev");}
void  S1838C3 ::v36(){vfunc_called(this, "_ZN7S1838C33v36Ev");}
void  S1838C3 ::v37(){vfunc_called(this, "_ZN7S1838C33v37Ev");}
void  S1838C3 ::v38(){vfunc_called(this, "_ZN7S1838C33v38Ev");}
void  S1838C3 ::v39(){vfunc_called(this, "_ZN7S1838C33v39Ev");}
void  S1838C3 ::v40(){vfunc_called(this, "_ZN7S1838C33v40Ev");}
void  S1838C3 ::v41(){vfunc_called(this, "_ZN7S1838C33v41Ev");}
void  S1838C3 ::v42(){vfunc_called(this, "_ZN7S1838C33v42Ev");}
void  S1838C3 ::v43(){vfunc_called(this, "_ZN7S1838C33v43Ev");}
void  S1838C3 ::v44(){vfunc_called(this, "_ZN7S1838C33v44Ev");}
void  S1838C3 ::v45(){vfunc_called(this, "_ZN7S1838C33v45Ev");}
void  S1838C3 ::v46(){vfunc_called(this, "_ZN7S1838C33v46Ev");}
void  S1838C3 ::v47(){vfunc_called(this, "_ZN7S1838C33v47Ev");}
void  S1838C3 ::v48(){vfunc_called(this, "_ZN7S1838C33v48Ev");}
void  S1838C3 ::v49(){vfunc_called(this, "_ZN7S1838C33v49Ev");}
void  S1838C3 ::v50(){vfunc_called(this, "_ZN7S1838C33v50Ev");}
S1838C3 ::~S1838C3(){ note_dtor("S1838C3", this);} // tgen
S1838C3 ::S1838C3(){ note_ctor("S1838C3", this);} // tgen

static void Test_S1838C3()
{
  extern Class_Descriptor cd_S1838C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1838C3, buf);
    S1838C3 *dp, &lv = *(dp=new (buf) S1838C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1838C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1838C3)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S1838C3");
    test_class_info(&lv, &cd_S1838C3);
    dp->~S1838C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1838C3(Test_S1838C3, "S1838C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1838C3C1Ev();
extern void _ZN7S1838C3D1Ev();
Name_Map name_map_S1838C3[] = {
  NSPAIR(_ZN7S1838C3C1Ev),
  NSPAIR(_ZN7S1838C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S1838C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1838C3[];
extern void _ZN7S1838C3D1Ev();
extern void _ZN7S1838C3D0Ev();
extern void _ZN7S1838C32v8Ev();
extern void _ZN7S1838C32v9Ev();
extern void _ZN7S1838C33v10Ev();
extern void _ZN7S1838C33v11Ev();
extern void _ZN7S1838C33v12Ev();
extern void _ZN7S1838C33v13Ev();
extern void _ZN7S1838C33v14Ev();
extern void _ZN7S1838C33v15Ev();
extern void _ZN7S1838C33v16Ev();
extern void _ZN7S1838C33v17Ev();
extern void _ZN7S1838C33v18Ev();
extern void _ZN7S1838C33v19Ev();
extern void _ZN7S1838C33v20Ev();
extern void _ZN7S1838C33v21Ev();
extern void _ZN7S1838C33v22Ev();
extern void _ZN7S1838C33v23Ev();
extern void _ZN7S1838C33v24Ev();
extern void _ZN7S1838C33v25Ev();
extern void _ZN7S1838C33v26Ev();
extern void _ZN7S1838C33v27Ev();
extern void _ZN7S1838C33v28Ev();
extern void _ZN7S1838C33v29Ev();
extern void _ZN7S1838C33v30Ev();
extern void _ZN7S1838C33v31Ev();
extern void _ZN7S1838C33v32Ev();
extern void _ZN7S1838C33v33Ev();
extern void _ZN7S1838C33v34Ev();
extern void _ZN7S1838C33v35Ev();
extern void _ZN7S1838C33v36Ev();
extern void _ZN7S1838C33v37Ev();
extern void _ZN7S1838C33v38Ev();
extern void _ZN7S1838C33v39Ev();
extern void _ZN7S1838C33v40Ev();
extern void _ZN7S1838C33v41Ev();
extern void _ZN7S1838C33v42Ev();
extern void _ZN7S1838C33v43Ev();
extern void _ZN7S1838C33v44Ev();
extern void _ZN7S1838C33v45Ev();
extern void _ZN7S1838C33v46Ev();
extern void _ZN7S1838C33v47Ev();
extern void _ZN7S1838C33v48Ev();
extern void _ZN7S1838C33v49Ev();
extern void _ZN7S1838C33v50Ev();
static  VTBL_ENTRY vtc_S1838C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1838C3[0]),
  (VTBL_ENTRY)&_ZN7S1838C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1838C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1838C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1838C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v50Ev,
};
extern VTBL_ENTRY _ZTI7S1838C3[];
extern  VTBL_ENTRY _ZTV7S1838C3[];
Class_Descriptor cd_S1838C3 = {  "S1838C3", // class name
  bases_S1838C3, 1,
  &(vtc_S1838C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1838C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1838C3),47, //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  S1838C2  : S1838C3 {
  virtual void  v51(); // _ZN7S1838C23v51Ev
  virtual void  v52(); // _ZN7S1838C23v52Ev
  virtual void  v53(); // _ZN7S1838C23v53Ev
  virtual void  v54(); // _ZN7S1838C23v54Ev
  ~S1838C2(); // tgen
  S1838C2(); // tgen
};
//SIG(-1 S1838C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4}


void  S1838C2 ::v51(){vfunc_called(this, "_ZN7S1838C23v51Ev");}
void  S1838C2 ::v52(){vfunc_called(this, "_ZN7S1838C23v52Ev");}
void  S1838C2 ::v53(){vfunc_called(this, "_ZN7S1838C23v53Ev");}
void  S1838C2 ::v54(){vfunc_called(this, "_ZN7S1838C23v54Ev");}
S1838C2 ::~S1838C2(){ note_dtor("S1838C2", this);} // tgen
S1838C2 ::S1838C2(){ note_ctor("S1838C2", this);} // tgen

static void Test_S1838C2()
{
  extern Class_Descriptor cd_S1838C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1838C2, buf);
    S1838C2 *dp, &lv = *(dp=new (buf) S1838C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1838C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1838C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S1838C3*), 0, "S1838C2");
    check_base_class_offset(lv, (S1838C3*), 0, "S1838C2");
    test_class_info(&lv, &cd_S1838C2);
    dp->~S1838C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1838C2(Test_S1838C2, "S1838C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1838C2C1Ev();
extern void _ZN7S1838C2D1Ev();
Name_Map name_map_S1838C2[] = {
  NSPAIR(_ZN7S1838C2C1Ev),
  NSPAIR(_ZN7S1838C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1838C3;
extern VTBL_ENTRY _ZTI7S1838C3[];
extern  VTBL_ENTRY _ZTV7S1838C3[];
static Base_Class bases_S1838C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1838C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1838C2[];
extern void _ZN7S1838C2D1Ev();
extern void _ZN7S1838C2D0Ev();
extern void _ZN7S1838C32v8Ev();
extern void _ZN7S1838C32v9Ev();
extern void _ZN7S1838C33v10Ev();
extern void _ZN7S1838C33v11Ev();
extern void _ZN7S1838C33v12Ev();
extern void _ZN7S1838C33v13Ev();
extern void _ZN7S1838C33v14Ev();
extern void _ZN7S1838C33v15Ev();
extern void _ZN7S1838C33v16Ev();
extern void _ZN7S1838C33v17Ev();
extern void _ZN7S1838C33v18Ev();
extern void _ZN7S1838C33v19Ev();
extern void _ZN7S1838C33v20Ev();
extern void _ZN7S1838C33v21Ev();
extern void _ZN7S1838C33v22Ev();
extern void _ZN7S1838C33v23Ev();
extern void _ZN7S1838C33v24Ev();
extern void _ZN7S1838C33v25Ev();
extern void _ZN7S1838C33v26Ev();
extern void _ZN7S1838C33v27Ev();
extern void _ZN7S1838C33v28Ev();
extern void _ZN7S1838C33v29Ev();
extern void _ZN7S1838C33v30Ev();
extern void _ZN7S1838C33v31Ev();
extern void _ZN7S1838C33v32Ev();
extern void _ZN7S1838C33v33Ev();
extern void _ZN7S1838C33v34Ev();
extern void _ZN7S1838C33v35Ev();
extern void _ZN7S1838C33v36Ev();
extern void _ZN7S1838C33v37Ev();
extern void _ZN7S1838C33v38Ev();
extern void _ZN7S1838C33v39Ev();
extern void _ZN7S1838C33v40Ev();
extern void _ZN7S1838C33v41Ev();
extern void _ZN7S1838C33v42Ev();
extern void _ZN7S1838C33v43Ev();
extern void _ZN7S1838C33v44Ev();
extern void _ZN7S1838C33v45Ev();
extern void _ZN7S1838C33v46Ev();
extern void _ZN7S1838C33v47Ev();
extern void _ZN7S1838C33v48Ev();
extern void _ZN7S1838C33v49Ev();
extern void _ZN7S1838C33v50Ev();
extern void _ZN7S1838C23v51Ev();
extern void _ZN7S1838C23v52Ev();
extern void _ZN7S1838C23v53Ev();
extern void _ZN7S1838C23v54Ev();
static  VTBL_ENTRY vtc_S1838C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1838C2[0]),
  (VTBL_ENTRY)&_ZN7S1838C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1838C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1838C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1838C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1838C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1838C23v52Ev,
  (VTBL_ENTRY)&_ZN7S1838C23v53Ev,
  (VTBL_ENTRY)&_ZN7S1838C23v54Ev,
};
extern VTBL_ENTRY _ZTI7S1838C2[];
extern  VTBL_ENTRY _ZTV7S1838C2[];
Class_Descriptor cd_S1838C2 = {  "S1838C2", // class name
  bases_S1838C2, 2,
  &(vtc_S1838C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1838C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1838C2),51, //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  S1838C1  : S1838C2 {
  virtual void  v1(); // _ZN7S1838C12v1Ev
  virtual void  v2(); // _ZN7S1838C12v2Ev
  virtual void  v3(); // _ZN7S1838C12v3Ev
  virtual void  v4(); // _ZN7S1838C12v4Ev
  virtual void  v5(); // _ZN7S1838C12v5Ev
  virtual void  v6(); // _ZN7S1838C12v6Ev
  virtual void  v7(); // _ZN7S1838C12v7Ev
  ~S1838C1(); // tgen
  S1838C1(); // tgen
};
//SIG(1 S1838C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7}


void  S1838C1 ::v1(){vfunc_called(this, "_ZN7S1838C12v1Ev");}
void  S1838C1 ::v2(){vfunc_called(this, "_ZN7S1838C12v2Ev");}
void  S1838C1 ::v3(){vfunc_called(this, "_ZN7S1838C12v3Ev");}
void  S1838C1 ::v4(){vfunc_called(this, "_ZN7S1838C12v4Ev");}
void  S1838C1 ::v5(){vfunc_called(this, "_ZN7S1838C12v5Ev");}
void  S1838C1 ::v6(){vfunc_called(this, "_ZN7S1838C12v6Ev");}
void  S1838C1 ::v7(){vfunc_called(this, "_ZN7S1838C12v7Ev");}
S1838C1 ::~S1838C1(){ note_dtor("S1838C1", this);} // tgen
S1838C1 ::S1838C1(){ note_ctor("S1838C1", this);} // tgen

static void Test_S1838C1()
{
  extern Class_Descriptor cd_S1838C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1838C1, buf);
    S1838C1 *dp, &lv = *(dp=new (buf) S1838C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1838C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1838C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S1838C3*)(S1838C2*), 0, "S1838C1");
    check_base_class_offset(lv, (S1838C3*)(S1838C2*), 0, "S1838C1");
    check_base_class_offset(lv, (S1838C2*), 0, "S1838C1");
    test_class_info(&lv, &cd_S1838C1);
    dp->~S1838C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1838C1(Test_S1838C1, "S1838C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1838C1C1Ev();
extern void _ZN7S1838C1D1Ev();
Name_Map name_map_S1838C1[] = {
  NSPAIR(_ZN7S1838C1C1Ev),
  NSPAIR(_ZN7S1838C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1838C3;
extern VTBL_ENTRY _ZTI7S1838C3[];
extern  VTBL_ENTRY _ZTV7S1838C3[];
extern Class_Descriptor cd_S1838C2;
extern VTBL_ENTRY _ZTI7S1838C2[];
extern  VTBL_ENTRY _ZTV7S1838C2[];
static Base_Class bases_S1838C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1838C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1838C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1838C1[];
extern void _ZN7S1838C1D1Ev();
extern void _ZN7S1838C1D0Ev();
extern void _ZN7S1838C32v8Ev();
extern void _ZN7S1838C32v9Ev();
extern void _ZN7S1838C33v10Ev();
extern void _ZN7S1838C33v11Ev();
extern void _ZN7S1838C33v12Ev();
extern void _ZN7S1838C33v13Ev();
extern void _ZN7S1838C33v14Ev();
extern void _ZN7S1838C33v15Ev();
extern void _ZN7S1838C33v16Ev();
extern void _ZN7S1838C33v17Ev();
extern void _ZN7S1838C33v18Ev();
extern void _ZN7S1838C33v19Ev();
extern void _ZN7S1838C33v20Ev();
extern void _ZN7S1838C33v21Ev();
extern void _ZN7S1838C33v22Ev();
extern void _ZN7S1838C33v23Ev();
extern void _ZN7S1838C33v24Ev();
extern void _ZN7S1838C33v25Ev();
extern void _ZN7S1838C33v26Ev();
extern void _ZN7S1838C33v27Ev();
extern void _ZN7S1838C33v28Ev();
extern void _ZN7S1838C33v29Ev();
extern void _ZN7S1838C33v30Ev();
extern void _ZN7S1838C33v31Ev();
extern void _ZN7S1838C33v32Ev();
extern void _ZN7S1838C33v33Ev();
extern void _ZN7S1838C33v34Ev();
extern void _ZN7S1838C33v35Ev();
extern void _ZN7S1838C33v36Ev();
extern void _ZN7S1838C33v37Ev();
extern void _ZN7S1838C33v38Ev();
extern void _ZN7S1838C33v39Ev();
extern void _ZN7S1838C33v40Ev();
extern void _ZN7S1838C33v41Ev();
extern void _ZN7S1838C33v42Ev();
extern void _ZN7S1838C33v43Ev();
extern void _ZN7S1838C33v44Ev();
extern void _ZN7S1838C33v45Ev();
extern void _ZN7S1838C33v46Ev();
extern void _ZN7S1838C33v47Ev();
extern void _ZN7S1838C33v48Ev();
extern void _ZN7S1838C33v49Ev();
extern void _ZN7S1838C33v50Ev();
extern void _ZN7S1838C23v51Ev();
extern void _ZN7S1838C23v52Ev();
extern void _ZN7S1838C23v53Ev();
extern void _ZN7S1838C23v54Ev();
extern void _ZN7S1838C12v1Ev();
extern void _ZN7S1838C12v2Ev();
extern void _ZN7S1838C12v3Ev();
extern void _ZN7S1838C12v4Ev();
extern void _ZN7S1838C12v5Ev();
extern void _ZN7S1838C12v6Ev();
extern void _ZN7S1838C12v7Ev();
static  VTBL_ENTRY vtc_S1838C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1838C1[0]),
  (VTBL_ENTRY)&_ZN7S1838C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1838C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1838C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1838C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1838C33v50Ev,
  (VTBL_ENTRY)&_ZN7S1838C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1838C23v52Ev,
  (VTBL_ENTRY)&_ZN7S1838C23v53Ev,
  (VTBL_ENTRY)&_ZN7S1838C23v54Ev,
  (VTBL_ENTRY)&_ZN7S1838C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1838C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1838C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1838C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1838C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1838C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1838C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S1838C1[];
extern  VTBL_ENTRY _ZTV7S1838C1[];
Class_Descriptor cd_S1838C1 = {  "S1838C1", // class name
  bases_S1838C1, 3,
  &(vtc_S1838C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1838C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1838C1),58, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1832C3  : S1C11_nt {
  virtual void  v7(); // _ZN7S1832C32v7Ev
  virtual void  v8(); // _ZN7S1832C32v8Ev
  virtual void  v9(); // _ZN7S1832C32v9Ev
  virtual void  v10(); // _ZN7S1832C33v10Ev
  virtual void  v11(); // _ZN7S1832C33v11Ev
  virtual void  v12(); // _ZN7S1832C33v12Ev
  virtual void  v13(); // _ZN7S1832C33v13Ev
  virtual void  v14(); // _ZN7S1832C33v14Ev
  virtual void  v15(); // _ZN7S1832C33v15Ev
  virtual void  v16(); // _ZN7S1832C33v16Ev
  virtual void  v17(); // _ZN7S1832C33v17Ev
  virtual void  v18(); // _ZN7S1832C33v18Ev
  virtual void  v19(); // _ZN7S1832C33v19Ev
  virtual void  v20(); // _ZN7S1832C33v20Ev
  virtual void  v21(); // _ZN7S1832C33v21Ev
  virtual void  v22(); // _ZN7S1832C33v22Ev
  virtual void  v23(); // _ZN7S1832C33v23Ev
  virtual void  v24(); // _ZN7S1832C33v24Ev
  virtual void  v25(); // _ZN7S1832C33v25Ev
  virtual void  v26(); // _ZN7S1832C33v26Ev
  virtual void  v27(); // _ZN7S1832C33v27Ev
  virtual void  v28(); // _ZN7S1832C33v28Ev
  virtual void  v29(); // _ZN7S1832C33v29Ev
  virtual void  v30(); // _ZN7S1832C33v30Ev
  virtual void  v31(); // _ZN7S1832C33v31Ev
  virtual void  v32(); // _ZN7S1832C33v32Ev
  virtual void  v33(); // _ZN7S1832C33v33Ev
  virtual void  v34(); // _ZN7S1832C33v34Ev
  virtual void  v35(); // _ZN7S1832C33v35Ev
  virtual void  v36(); // _ZN7S1832C33v36Ev
  virtual void  v37(); // _ZN7S1832C33v37Ev
  virtual void  v38(); // _ZN7S1832C33v38Ev
  virtual void  v39(); // _ZN7S1832C33v39Ev
  virtual void  v40(); // _ZN7S1832C33v40Ev
  virtual void  v41(); // _ZN7S1832C33v41Ev
  virtual void  v42(); // _ZN7S1832C33v42Ev
  virtual void  v43(); // _ZN7S1832C33v43Ev
  virtual void  v44(); // _ZN7S1832C33v44Ev
  virtual void  v45(); // _ZN7S1832C33v45Ev
  virtual void  v46(); // _ZN7S1832C33v46Ev
  virtual void  v47(); // _ZN7S1832C33v47Ev
  virtual void  v48(); // _ZN7S1832C33v48Ev
  virtual void  v49(); // _ZN7S1832C33v49Ev
  ~S1832C3(); // tgen
  S1832C3(); // tgen
};
//SIG(-1 S1832C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1832C3 ::v7(){vfunc_called(this, "_ZN7S1832C32v7Ev");}
void  S1832C3 ::v8(){vfunc_called(this, "_ZN7S1832C32v8Ev");}
void  S1832C3 ::v9(){vfunc_called(this, "_ZN7S1832C32v9Ev");}
void  S1832C3 ::v10(){vfunc_called(this, "_ZN7S1832C33v10Ev");}
void  S1832C3 ::v11(){vfunc_called(this, "_ZN7S1832C33v11Ev");}
void  S1832C3 ::v12(){vfunc_called(this, "_ZN7S1832C33v12Ev");}
void  S1832C3 ::v13(){vfunc_called(this, "_ZN7S1832C33v13Ev");}
void  S1832C3 ::v14(){vfunc_called(this, "_ZN7S1832C33v14Ev");}
void  S1832C3 ::v15(){vfunc_called(this, "_ZN7S1832C33v15Ev");}
void  S1832C3 ::v16(){vfunc_called(this, "_ZN7S1832C33v16Ev");}
void  S1832C3 ::v17(){vfunc_called(this, "_ZN7S1832C33v17Ev");}
void  S1832C3 ::v18(){vfunc_called(this, "_ZN7S1832C33v18Ev");}
void  S1832C3 ::v19(){vfunc_called(this, "_ZN7S1832C33v19Ev");}
void  S1832C3 ::v20(){vfunc_called(this, "_ZN7S1832C33v20Ev");}
void  S1832C3 ::v21(){vfunc_called(this, "_ZN7S1832C33v21Ev");}
void  S1832C3 ::v22(){vfunc_called(this, "_ZN7S1832C33v22Ev");}
void  S1832C3 ::v23(){vfunc_called(this, "_ZN7S1832C33v23Ev");}
void  S1832C3 ::v24(){vfunc_called(this, "_ZN7S1832C33v24Ev");}
void  S1832C3 ::v25(){vfunc_called(this, "_ZN7S1832C33v25Ev");}
void  S1832C3 ::v26(){vfunc_called(this, "_ZN7S1832C33v26Ev");}
void  S1832C3 ::v27(){vfunc_called(this, "_ZN7S1832C33v27Ev");}
void  S1832C3 ::v28(){vfunc_called(this, "_ZN7S1832C33v28Ev");}
void  S1832C3 ::v29(){vfunc_called(this, "_ZN7S1832C33v29Ev");}
void  S1832C3 ::v30(){vfunc_called(this, "_ZN7S1832C33v30Ev");}
void  S1832C3 ::v31(){vfunc_called(this, "_ZN7S1832C33v31Ev");}
void  S1832C3 ::v32(){vfunc_called(this, "_ZN7S1832C33v32Ev");}
void  S1832C3 ::v33(){vfunc_called(this, "_ZN7S1832C33v33Ev");}
void  S1832C3 ::v34(){vfunc_called(this, "_ZN7S1832C33v34Ev");}
void  S1832C3 ::v35(){vfunc_called(this, "_ZN7S1832C33v35Ev");}
void  S1832C3 ::v36(){vfunc_called(this, "_ZN7S1832C33v36Ev");}
void  S1832C3 ::v37(){vfunc_called(this, "_ZN7S1832C33v37Ev");}
void  S1832C3 ::v38(){vfunc_called(this, "_ZN7S1832C33v38Ev");}
void  S1832C3 ::v39(){vfunc_called(this, "_ZN7S1832C33v39Ev");}
void  S1832C3 ::v40(){vfunc_called(this, "_ZN7S1832C33v40Ev");}
void  S1832C3 ::v41(){vfunc_called(this, "_ZN7S1832C33v41Ev");}
void  S1832C3 ::v42(){vfunc_called(this, "_ZN7S1832C33v42Ev");}
void  S1832C3 ::v43(){vfunc_called(this, "_ZN7S1832C33v43Ev");}
void  S1832C3 ::v44(){vfunc_called(this, "_ZN7S1832C33v44Ev");}
void  S1832C3 ::v45(){vfunc_called(this, "_ZN7S1832C33v45Ev");}
void  S1832C3 ::v46(){vfunc_called(this, "_ZN7S1832C33v46Ev");}
void  S1832C3 ::v47(){vfunc_called(this, "_ZN7S1832C33v47Ev");}
void  S1832C3 ::v48(){vfunc_called(this, "_ZN7S1832C33v48Ev");}
void  S1832C3 ::v49(){vfunc_called(this, "_ZN7S1832C33v49Ev");}
S1832C3 ::~S1832C3(){ note_dtor("S1832C3", this);} // tgen
S1832C3 ::S1832C3(){ note_ctor("S1832C3", this);} // tgen

static void Test_S1832C3()
{
  extern Class_Descriptor cd_S1832C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1832C3, buf);
    S1832C3 *dp, &lv = *(dp=new (buf) S1832C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1832C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1832C3)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S1832C3");
    test_class_info(&lv, &cd_S1832C3);
    dp->~S1832C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1832C3(Test_S1832C3, "S1832C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1832C3C1Ev();
extern void _ZN7S1832C3D1Ev();
Name_Map name_map_S1832C3[] = {
  NSPAIR(_ZN7S1832C3C1Ev),
  NSPAIR(_ZN7S1832C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S1832C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1832C3[];
extern void _ZN7S1832C3D1Ev();
extern void _ZN7S1832C3D0Ev();
extern void _ZN7S1832C32v7Ev();
extern void _ZN7S1832C32v8Ev();
extern void _ZN7S1832C32v9Ev();
extern void _ZN7S1832C33v10Ev();
extern void _ZN7S1832C33v11Ev();
extern void _ZN7S1832C33v12Ev();
extern void _ZN7S1832C33v13Ev();
extern void _ZN7S1832C33v14Ev();
extern void _ZN7S1832C33v15Ev();
extern void _ZN7S1832C33v16Ev();
extern void _ZN7S1832C33v17Ev();
extern void _ZN7S1832C33v18Ev();
extern void _ZN7S1832C33v19Ev();
extern void _ZN7S1832C33v20Ev();
extern void _ZN7S1832C33v21Ev();
extern void _ZN7S1832C33v22Ev();
extern void _ZN7S1832C33v23Ev();
extern void _ZN7S1832C33v24Ev();
extern void _ZN7S1832C33v25Ev();
extern void _ZN7S1832C33v26Ev();
extern void _ZN7S1832C33v27Ev();
extern void _ZN7S1832C33v28Ev();
extern void _ZN7S1832C33v29Ev();
extern void _ZN7S1832C33v30Ev();
extern void _ZN7S1832C33v31Ev();
extern void _ZN7S1832C33v32Ev();
extern void _ZN7S1832C33v33Ev();
extern void _ZN7S1832C33v34Ev();
extern void _ZN7S1832C33v35Ev();
extern void _ZN7S1832C33v36Ev();
extern void _ZN7S1832C33v37Ev();
extern void _ZN7S1832C33v38Ev();
extern void _ZN7S1832C33v39Ev();
extern void _ZN7S1832C33v40Ev();
extern void _ZN7S1832C33v41Ev();
extern void _ZN7S1832C33v42Ev();
extern void _ZN7S1832C33v43Ev();
extern void _ZN7S1832C33v44Ev();
extern void _ZN7S1832C33v45Ev();
extern void _ZN7S1832C33v46Ev();
extern void _ZN7S1832C33v47Ev();
extern void _ZN7S1832C33v48Ev();
extern void _ZN7S1832C33v49Ev();
static  VTBL_ENTRY vtc_S1832C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1832C3[0]),
  (VTBL_ENTRY)&_ZN7S1832C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1832C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1832C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1832C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1832C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v49Ev,
};
extern VTBL_ENTRY _ZTI7S1832C3[];
extern  VTBL_ENTRY _ZTV7S1832C3[];
Class_Descriptor cd_S1832C3 = {  "S1832C3", // class name
  bases_S1832C3, 1,
  &(vtc_S1832C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1832C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1832C3),47, //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  S1832C2  : S1832C3 {
  virtual void  v50(); // _ZN7S1832C23v50Ev
  virtual void  v51(); // _ZN7S1832C23v51Ev
  virtual void  v52(); // _ZN7S1832C23v52Ev
  virtual void  v53(); // _ZN7S1832C23v53Ev
  ~S1832C2(); // tgen
  S1832C2(); // tgen
};
//SIG(-1 S1832C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4}


void  S1832C2 ::v50(){vfunc_called(this, "_ZN7S1832C23v50Ev");}
void  S1832C2 ::v51(){vfunc_called(this, "_ZN7S1832C23v51Ev");}
void  S1832C2 ::v52(){vfunc_called(this, "_ZN7S1832C23v52Ev");}
void  S1832C2 ::v53(){vfunc_called(this, "_ZN7S1832C23v53Ev");}
S1832C2 ::~S1832C2(){ note_dtor("S1832C2", this);} // tgen
S1832C2 ::S1832C2(){ note_ctor("S1832C2", this);} // tgen

static void Test_S1832C2()
{
  extern Class_Descriptor cd_S1832C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1832C2, buf);
    S1832C2 *dp, &lv = *(dp=new (buf) S1832C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1832C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1832C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S1832C3*), 0, "S1832C2");
    check_base_class_offset(lv, (S1832C3*), 0, "S1832C2");
    test_class_info(&lv, &cd_S1832C2);
    dp->~S1832C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1832C2(Test_S1832C2, "S1832C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1832C2C1Ev();
extern void _ZN7S1832C2D1Ev();
Name_Map name_map_S1832C2[] = {
  NSPAIR(_ZN7S1832C2C1Ev),
  NSPAIR(_ZN7S1832C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1832C3;
extern VTBL_ENTRY _ZTI7S1832C3[];
extern  VTBL_ENTRY _ZTV7S1832C3[];
static Base_Class bases_S1832C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1832C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1832C2[];
extern void _ZN7S1832C2D1Ev();
extern void _ZN7S1832C2D0Ev();
extern void _ZN7S1832C32v7Ev();
extern void _ZN7S1832C32v8Ev();
extern void _ZN7S1832C32v9Ev();
extern void _ZN7S1832C33v10Ev();
extern void _ZN7S1832C33v11Ev();
extern void _ZN7S1832C33v12Ev();
extern void _ZN7S1832C33v13Ev();
extern void _ZN7S1832C33v14Ev();
extern void _ZN7S1832C33v15Ev();
extern void _ZN7S1832C33v16Ev();
extern void _ZN7S1832C33v17Ev();
extern void _ZN7S1832C33v18Ev();
extern void _ZN7S1832C33v19Ev();
extern void _ZN7S1832C33v20Ev();
extern void _ZN7S1832C33v21Ev();
extern void _ZN7S1832C33v22Ev();
extern void _ZN7S1832C33v23Ev();
extern void _ZN7S1832C33v24Ev();
extern void _ZN7S1832C33v25Ev();
extern void _ZN7S1832C33v26Ev();
extern void _ZN7S1832C33v27Ev();
extern void _ZN7S1832C33v28Ev();
extern void _ZN7S1832C33v29Ev();
extern void _ZN7S1832C33v30Ev();
extern void _ZN7S1832C33v31Ev();
extern void _ZN7S1832C33v32Ev();
extern void _ZN7S1832C33v33Ev();
extern void _ZN7S1832C33v34Ev();
extern void _ZN7S1832C33v35Ev();
extern void _ZN7S1832C33v36Ev();
extern void _ZN7S1832C33v37Ev();
extern void _ZN7S1832C33v38Ev();
extern void _ZN7S1832C33v39Ev();
extern void _ZN7S1832C33v40Ev();
extern void _ZN7S1832C33v41Ev();
extern void _ZN7S1832C33v42Ev();
extern void _ZN7S1832C33v43Ev();
extern void _ZN7S1832C33v44Ev();
extern void _ZN7S1832C33v45Ev();
extern void _ZN7S1832C33v46Ev();
extern void _ZN7S1832C33v47Ev();
extern void _ZN7S1832C33v48Ev();
extern void _ZN7S1832C33v49Ev();
extern void _ZN7S1832C23v50Ev();
extern void _ZN7S1832C23v51Ev();
extern void _ZN7S1832C23v52Ev();
extern void _ZN7S1832C23v53Ev();
static  VTBL_ENTRY vtc_S1832C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1832C2[0]),
  (VTBL_ENTRY)&_ZN7S1832C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1832C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1832C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1832C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1832C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1832C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1832C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1832C23v52Ev,
  (VTBL_ENTRY)&_ZN7S1832C23v53Ev,
};
extern VTBL_ENTRY _ZTI7S1832C2[];
extern  VTBL_ENTRY _ZTV7S1832C2[];
Class_Descriptor cd_S1832C2 = {  "S1832C2", // class name
  bases_S1832C2, 2,
  &(vtc_S1832C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1832C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1832C2),51, //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  S1832C1  : S1832C2 {
  virtual void  v1(); // _ZN7S1832C12v1Ev
  virtual void  v2(); // _ZN7S1832C12v2Ev
  virtual void  v3(); // _ZN7S1832C12v3Ev
  virtual void  v4(); // _ZN7S1832C12v4Ev
  virtual void  v5(); // _ZN7S1832C12v5Ev
  virtual void  v6(); // _ZN7S1832C12v6Ev
  ~S1832C1(); // tgen
  S1832C1(); // tgen
};
//SIG(1 S1832C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6}


void  S1832C1 ::v1(){vfunc_called(this, "_ZN7S1832C12v1Ev");}
void  S1832C1 ::v2(){vfunc_called(this, "_ZN7S1832C12v2Ev");}
void  S1832C1 ::v3(){vfunc_called(this, "_ZN7S1832C12v3Ev");}
void  S1832C1 ::v4(){vfunc_called(this, "_ZN7S1832C12v4Ev");}
void  S1832C1 ::v5(){vfunc_called(this, "_ZN7S1832C12v5Ev");}
void  S1832C1 ::v6(){vfunc_called(this, "_ZN7S1832C12v6Ev");}
S1832C1 ::~S1832C1(){ note_dtor("S1832C1", this);} // tgen
S1832C1 ::S1832C1(){ note_ctor("S1832C1", this);} // tgen

static void Test_S1832C1()
{
  extern Class_Descriptor cd_S1832C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1832C1, buf);
    S1832C1 *dp, &lv = *(dp=new (buf) S1832C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1832C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1832C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S1832C3*)(S1832C2*), 0, "S1832C1");
    check_base_class_offset(lv, (S1832C3*)(S1832C2*), 0, "S1832C1");
    check_base_class_offset(lv, (S1832C2*), 0, "S1832C1");
    test_class_info(&lv, &cd_S1832C1);
    dp->~S1832C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1832C1(Test_S1832C1, "S1832C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1832C1C1Ev();
extern void _ZN7S1832C1D1Ev();
Name_Map name_map_S1832C1[] = {
  NSPAIR(_ZN7S1832C1C1Ev),
  NSPAIR(_ZN7S1832C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1832C3;
extern VTBL_ENTRY _ZTI7S1832C3[];
extern  VTBL_ENTRY _ZTV7S1832C3[];
extern Class_Descriptor cd_S1832C2;
extern VTBL_ENTRY _ZTI7S1832C2[];
extern  VTBL_ENTRY _ZTV7S1832C2[];
static Base_Class bases_S1832C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1832C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1832C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1832C1[];
extern void _ZN7S1832C1D1Ev();
extern void _ZN7S1832C1D0Ev();
extern void _ZN7S1832C32v7Ev();
extern void _ZN7S1832C32v8Ev();
extern void _ZN7S1832C32v9Ev();
extern void _ZN7S1832C33v10Ev();
extern void _ZN7S1832C33v11Ev();
extern void _ZN7S1832C33v12Ev();
extern void _ZN7S1832C33v13Ev();
extern void _ZN7S1832C33v14Ev();
extern void _ZN7S1832C33v15Ev();
extern void _ZN7S1832C33v16Ev();
extern void _ZN7S1832C33v17Ev();
extern void _ZN7S1832C33v18Ev();
extern void _ZN7S1832C33v19Ev();
extern void _ZN7S1832C33v20Ev();
extern void _ZN7S1832C33v21Ev();
extern void _ZN7S1832C33v22Ev();
extern void _ZN7S1832C33v23Ev();
extern void _ZN7S1832C33v24Ev();
extern void _ZN7S1832C33v25Ev();
extern void _ZN7S1832C33v26Ev();
extern void _ZN7S1832C33v27Ev();
extern void _ZN7S1832C33v28Ev();
extern void _ZN7S1832C33v29Ev();
extern void _ZN7S1832C33v30Ev();
extern void _ZN7S1832C33v31Ev();
extern void _ZN7S1832C33v32Ev();
extern void _ZN7S1832C33v33Ev();
extern void _ZN7S1832C33v34Ev();
extern void _ZN7S1832C33v35Ev();
extern void _ZN7S1832C33v36Ev();
extern void _ZN7S1832C33v37Ev();
extern void _ZN7S1832C33v38Ev();
extern void _ZN7S1832C33v39Ev();
extern void _ZN7S1832C33v40Ev();
extern void _ZN7S1832C33v41Ev();
extern void _ZN7S1832C33v42Ev();
extern void _ZN7S1832C33v43Ev();
extern void _ZN7S1832C33v44Ev();
extern void _ZN7S1832C33v45Ev();
extern void _ZN7S1832C33v46Ev();
extern void _ZN7S1832C33v47Ev();
extern void _ZN7S1832C33v48Ev();
extern void _ZN7S1832C33v49Ev();
extern void _ZN7S1832C23v50Ev();
extern void _ZN7S1832C23v51Ev();
extern void _ZN7S1832C23v52Ev();
extern void _ZN7S1832C23v53Ev();
extern void _ZN7S1832C12v1Ev();
extern void _ZN7S1832C12v2Ev();
extern void _ZN7S1832C12v3Ev();
extern void _ZN7S1832C12v4Ev();
extern void _ZN7S1832C12v5Ev();
extern void _ZN7S1832C12v6Ev();
static  VTBL_ENTRY vtc_S1832C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1832C1[0]),
  (VTBL_ENTRY)&_ZN7S1832C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1832C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1832C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1832C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1832C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1832C33v49Ev,
  (VTBL_ENTRY)&_ZN7S1832C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1832C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1832C23v52Ev,
  (VTBL_ENTRY)&_ZN7S1832C23v53Ev,
  (VTBL_ENTRY)&_ZN7S1832C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1832C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1832C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1832C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1832C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1832C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S1832C1[];
extern  VTBL_ENTRY _ZTV7S1832C1[];
Class_Descriptor cd_S1832C1 = {  "S1832C1", // class name
  bases_S1832C1, 3,
  &(vtc_S1832C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1832C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1832C1),57, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S783C4  : S1C11_nt {
  virtual void  v4(); // _ZN6S783C42v4Ev
  virtual void  v5(); // _ZN6S783C42v5Ev
  virtual void  v6(); // _ZN6S783C42v6Ev
  virtual void  v7(); // _ZN6S783C42v7Ev
  virtual void  v8(); // _ZN6S783C42v8Ev
  virtual void  v9(); // _ZN6S783C42v9Ev
  virtual void  v10(); // _ZN6S783C43v10Ev
  virtual void  v11(); // _ZN6S783C43v11Ev
  virtual void  v12(); // _ZN6S783C43v12Ev
  virtual void  v13(); // _ZN6S783C43v13Ev
  virtual void  v14(); // _ZN6S783C43v14Ev
  virtual void  v15(); // _ZN6S783C43v15Ev
  virtual void  v16(); // _ZN6S783C43v16Ev
  virtual void  v17(); // _ZN6S783C43v17Ev
  virtual void  v18(); // _ZN6S783C43v18Ev
  virtual void  v19(); // _ZN6S783C43v19Ev
  virtual void  v20(); // _ZN6S783C43v20Ev
  virtual void  v21(); // _ZN6S783C43v21Ev
  virtual void  v22(); // _ZN6S783C43v22Ev
  virtual void  v23(); // _ZN6S783C43v23Ev
  virtual void  v24(); // _ZN6S783C43v24Ev
  virtual void  v25(); // _ZN6S783C43v25Ev
  virtual void  v26(); // _ZN6S783C43v26Ev
  virtual void  v27(); // _ZN6S783C43v27Ev
  virtual void  v28(); // _ZN6S783C43v28Ev
  virtual void  v29(); // _ZN6S783C43v29Ev
  virtual void  v30(); // _ZN6S783C43v30Ev
  virtual void  v31(); // _ZN6S783C43v31Ev
  virtual void  v32(); // _ZN6S783C43v32Ev
  virtual void  v33(); // _ZN6S783C43v33Ev
  virtual void  v34(); // _ZN6S783C43v34Ev
  virtual void  v35(); // _ZN6S783C43v35Ev
  virtual void  v36(); // _ZN6S783C43v36Ev
  virtual void  v37(); // _ZN6S783C43v37Ev
  virtual void  v38(); // _ZN6S783C43v38Ev
  virtual void  v39(); // _ZN6S783C43v39Ev
  virtual void  v40(); // _ZN6S783C43v40Ev
  virtual void  v41(); // _ZN6S783C43v41Ev
  virtual void  v42(); // _ZN6S783C43v42Ev
  virtual void  v43(); // _ZN6S783C43v43Ev
  virtual void  v44(); // _ZN6S783C43v44Ev
  virtual void  v45(); // _ZN6S783C43v45Ev
  virtual void  v46(); // _ZN6S783C43v46Ev
  ~S783C4(); // tgen
  S783C4(); // tgen
};
//SIG(-1 S783C4) C1{ BC2{ vd m Fp Fi} 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}


void  S783C4 ::v4(){vfunc_called(this, "_ZN6S783C42v4Ev");}
void  S783C4 ::v5(){vfunc_called(this, "_ZN6S783C42v5Ev");}
void  S783C4 ::v6(){vfunc_called(this, "_ZN6S783C42v6Ev");}
void  S783C4 ::v7(){vfunc_called(this, "_ZN6S783C42v7Ev");}
void  S783C4 ::v8(){vfunc_called(this, "_ZN6S783C42v8Ev");}
void  S783C4 ::v9(){vfunc_called(this, "_ZN6S783C42v9Ev");}
void  S783C4 ::v10(){vfunc_called(this, "_ZN6S783C43v10Ev");}
void  S783C4 ::v11(){vfunc_called(this, "_ZN6S783C43v11Ev");}
void  S783C4 ::v12(){vfunc_called(this, "_ZN6S783C43v12Ev");}
void  S783C4 ::v13(){vfunc_called(this, "_ZN6S783C43v13Ev");}
void  S783C4 ::v14(){vfunc_called(this, "_ZN6S783C43v14Ev");}
void  S783C4 ::v15(){vfunc_called(this, "_ZN6S783C43v15Ev");}
void  S783C4 ::v16(){vfunc_called(this, "_ZN6S783C43v16Ev");}
void  S783C4 ::v17(){vfunc_called(this, "_ZN6S783C43v17Ev");}
void  S783C4 ::v18(){vfunc_called(this, "_ZN6S783C43v18Ev");}
void  S783C4 ::v19(){vfunc_called(this, "_ZN6S783C43v19Ev");}
void  S783C4 ::v20(){vfunc_called(this, "_ZN6S783C43v20Ev");}
void  S783C4 ::v21(){vfunc_called(this, "_ZN6S783C43v21Ev");}
void  S783C4 ::v22(){vfunc_called(this, "_ZN6S783C43v22Ev");}
void  S783C4 ::v23(){vfunc_called(this, "_ZN6S783C43v23Ev");}
void  S783C4 ::v24(){vfunc_called(this, "_ZN6S783C43v24Ev");}
void  S783C4 ::v25(){vfunc_called(this, "_ZN6S783C43v25Ev");}
void  S783C4 ::v26(){vfunc_called(this, "_ZN6S783C43v26Ev");}
void  S783C4 ::v27(){vfunc_called(this, "_ZN6S783C43v27Ev");}
void  S783C4 ::v28(){vfunc_called(this, "_ZN6S783C43v28Ev");}
void  S783C4 ::v29(){vfunc_called(this, "_ZN6S783C43v29Ev");}
void  S783C4 ::v30(){vfunc_called(this, "_ZN6S783C43v30Ev");}
void  S783C4 ::v31(){vfunc_called(this, "_ZN6S783C43v31Ev");}
void  S783C4 ::v32(){vfunc_called(this, "_ZN6S783C43v32Ev");}
void  S783C4 ::v33(){vfunc_called(this, "_ZN6S783C43v33Ev");}
void  S783C4 ::v34(){vfunc_called(this, "_ZN6S783C43v34Ev");}
void  S783C4 ::v35(){vfunc_called(this, "_ZN6S783C43v35Ev");}
void  S783C4 ::v36(){vfunc_called(this, "_ZN6S783C43v36Ev");}
void  S783C4 ::v37(){vfunc_called(this, "_ZN6S783C43v37Ev");}
void  S783C4 ::v38(){vfunc_called(this, "_ZN6S783C43v38Ev");}
void  S783C4 ::v39(){vfunc_called(this, "_ZN6S783C43v39Ev");}
void  S783C4 ::v40(){vfunc_called(this, "_ZN6S783C43v40Ev");}
void  S783C4 ::v41(){vfunc_called(this, "_ZN6S783C43v41Ev");}
void  S783C4 ::v42(){vfunc_called(this, "_ZN6S783C43v42Ev");}
void  S783C4 ::v43(){vfunc_called(this, "_ZN6S783C43v43Ev");}
void  S783C4 ::v44(){vfunc_called(this, "_ZN6S783C43v44Ev");}
void  S783C4 ::v45(){vfunc_called(this, "_ZN6S783C43v45Ev");}
void  S783C4 ::v46(){vfunc_called(this, "_ZN6S783C43v46Ev");}
S783C4 ::~S783C4(){ note_dtor("S783C4", this);} // tgen
S783C4 ::S783C4(){ note_ctor("S783C4", this);} // tgen

static void Test_S783C4()
{
  extern Class_Descriptor cd_S783C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S783C4, buf);
    S783C4 *dp, &lv = *(dp=new (buf) S783C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S783C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S783C4)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S783C4");
    test_class_info(&lv, &cd_S783C4);
    dp->~S783C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS783C4(Test_S783C4, "S783C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S783C4C1Ev();
extern void _ZN6S783C4D1Ev();
Name_Map name_map_S783C4[] = {
  NSPAIR(_ZN6S783C4C1Ev),
  NSPAIR(_ZN6S783C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S783C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI6S783C4[];
extern void _ZN6S783C4D1Ev();
extern void _ZN6S783C4D0Ev();
extern void _ZN6S783C42v4Ev();
extern void _ZN6S783C42v5Ev();
extern void _ZN6S783C42v6Ev();
extern void _ZN6S783C42v7Ev();
extern void _ZN6S783C42v8Ev();
extern void _ZN6S783C42v9Ev();
extern void _ZN6S783C43v10Ev();
extern void _ZN6S783C43v11Ev();
extern void _ZN6S783C43v12Ev();
extern void _ZN6S783C43v13Ev();
extern void _ZN6S783C43v14Ev();
extern void _ZN6S783C43v15Ev();
extern void _ZN6S783C43v16Ev();
extern void _ZN6S783C43v17Ev();
extern void _ZN6S783C43v18Ev();
extern void _ZN6S783C43v19Ev();
extern void _ZN6S783C43v20Ev();
extern void _ZN6S783C43v21Ev();
extern void _ZN6S783C43v22Ev();
extern void _ZN6S783C43v23Ev();
extern void _ZN6S783C43v24Ev();
extern void _ZN6S783C43v25Ev();
extern void _ZN6S783C43v26Ev();
extern void _ZN6S783C43v27Ev();
extern void _ZN6S783C43v28Ev();
extern void _ZN6S783C43v29Ev();
extern void _ZN6S783C43v30Ev();
extern void _ZN6S783C43v31Ev();
extern void _ZN6S783C43v32Ev();
extern void _ZN6S783C43v33Ev();
extern void _ZN6S783C43v34Ev();
extern void _ZN6S783C43v35Ev();
extern void _ZN6S783C43v36Ev();
extern void _ZN6S783C43v37Ev();
extern void _ZN6S783C43v38Ev();
extern void _ZN6S783C43v39Ev();
extern void _ZN6S783C43v40Ev();
extern void _ZN6S783C43v41Ev();
extern void _ZN6S783C43v42Ev();
extern void _ZN6S783C43v43Ev();
extern void _ZN6S783C43v44Ev();
extern void _ZN6S783C43v45Ev();
extern void _ZN6S783C43v46Ev();
static  VTBL_ENTRY vtc_S783C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S783C4[0]),
  (VTBL_ENTRY)&_ZN6S783C4D1Ev,
  (VTBL_ENTRY)&_ZN6S783C4D0Ev,
  (VTBL_ENTRY)&_ZN6S783C42v4Ev,
  (VTBL_ENTRY)&_ZN6S783C42v5Ev,
  (VTBL_ENTRY)&_ZN6S783C42v6Ev,
  (VTBL_ENTRY)&_ZN6S783C42v7Ev,
  (VTBL_ENTRY)&_ZN6S783C42v8Ev,
  (VTBL_ENTRY)&_ZN6S783C42v9Ev,
  (VTBL_ENTRY)&_ZN6S783C43v10Ev,
  (VTBL_ENTRY)&_ZN6S783C43v11Ev,
  (VTBL_ENTRY)&_ZN6S783C43v12Ev,
  (VTBL_ENTRY)&_ZN6S783C43v13Ev,
  (VTBL_ENTRY)&_ZN6S783C43v14Ev,
  (VTBL_ENTRY)&_ZN6S783C43v15Ev,
  (VTBL_ENTRY)&_ZN6S783C43v16Ev,
  (VTBL_ENTRY)&_ZN6S783C43v17Ev,
  (VTBL_ENTRY)&_ZN6S783C43v18Ev,
  (VTBL_ENTRY)&_ZN6S783C43v19Ev,
  (VTBL_ENTRY)&_ZN6S783C43v20Ev,
  (VTBL_ENTRY)&_ZN6S783C43v21Ev,
  (VTBL_ENTRY)&_ZN6S783C43v22Ev,
  (VTBL_ENTRY)&_ZN6S783C43v23Ev,
  (VTBL_ENTRY)&_ZN6S783C43v24Ev,
  (VTBL_ENTRY)&_ZN6S783C43v25Ev,
  (VTBL_ENTRY)&_ZN6S783C43v26Ev,
  (VTBL_ENTRY)&_ZN6S783C43v27Ev,
  (VTBL_ENTRY)&_ZN6S783C43v28Ev,
  (VTBL_ENTRY)&_ZN6S783C43v29Ev,
  (VTBL_ENTRY)&_ZN6S783C43v30Ev,
  (VTBL_ENTRY)&_ZN6S783C43v31Ev,
  (VTBL_ENTRY)&_ZN6S783C43v32Ev,
  (VTBL_ENTRY)&_ZN6S783C43v33Ev,
  (VTBL_ENTRY)&_ZN6S783C43v34Ev,
  (VTBL_ENTRY)&_ZN6S783C43v35Ev,
  (VTBL_ENTRY)&_ZN6S783C43v36Ev,
  (VTBL_ENTRY)&_ZN6S783C43v37Ev,
  (VTBL_ENTRY)&_ZN6S783C43v38Ev,
  (VTBL_ENTRY)&_ZN6S783C43v39Ev,
  (VTBL_ENTRY)&_ZN6S783C43v40Ev,
  (VTBL_ENTRY)&_ZN6S783C43v41Ev,
  (VTBL_ENTRY)&_ZN6S783C43v42Ev,
  (VTBL_ENTRY)&_ZN6S783C43v43Ev,
  (VTBL_ENTRY)&_ZN6S783C43v44Ev,
  (VTBL_ENTRY)&_ZN6S783C43v45Ev,
  (VTBL_ENTRY)&_ZN6S783C43v46Ev,
};
extern VTBL_ENTRY _ZTI6S783C4[];
extern  VTBL_ENTRY _ZTV6S783C4[];
Class_Descriptor cd_S783C4 = {  "S783C4", // class name
  bases_S783C4, 1,
  &(vtc_S783C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S783C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S783C4),47, //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  S783C3  : S783C4 {
  virtual void  v47(); // _ZN6S783C33v47Ev
  virtual void  v48(); // _ZN6S783C33v48Ev
  virtual void  v49(); // _ZN6S783C33v49Ev
  virtual void  v50(); // _ZN6S783C33v50Ev
  ~S783C3(); // tgen
  S783C3(); // tgen
};
//SIG(-1 S783C3) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4}


void  S783C3 ::v47(){vfunc_called(this, "_ZN6S783C33v47Ev");}
void  S783C3 ::v48(){vfunc_called(this, "_ZN6S783C33v48Ev");}
void  S783C3 ::v49(){vfunc_called(this, "_ZN6S783C33v49Ev");}
void  S783C3 ::v50(){vfunc_called(this, "_ZN6S783C33v50Ev");}
S783C3 ::~S783C3(){ note_dtor("S783C3", this);} // tgen
S783C3 ::S783C3(){ note_ctor("S783C3", this);} // tgen

static void Test_S783C3()
{
  extern Class_Descriptor cd_S783C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S783C3, buf);
    S783C3 *dp, &lv = *(dp=new (buf) S783C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S783C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S783C3)");
    check_base_class_offset(lv, (S1C11_nt*)(S783C4*), 0, "S783C3");
    check_base_class_offset(lv, (S783C4*), 0, "S783C3");
    test_class_info(&lv, &cd_S783C3);
    dp->~S783C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS783C3(Test_S783C3, "S783C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S783C3C1Ev();
extern void _ZN6S783C3D1Ev();
Name_Map name_map_S783C3[] = {
  NSPAIR(_ZN6S783C3C1Ev),
  NSPAIR(_ZN6S783C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S783C4;
extern VTBL_ENTRY _ZTI6S783C4[];
extern  VTBL_ENTRY _ZTV6S783C4[];
static Base_Class bases_S783C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S783C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S783C3[];
extern void _ZN6S783C3D1Ev();
extern void _ZN6S783C3D0Ev();
extern void _ZN6S783C42v4Ev();
extern void _ZN6S783C42v5Ev();
extern void _ZN6S783C42v6Ev();
extern void _ZN6S783C42v7Ev();
extern void _ZN6S783C42v8Ev();
extern void _ZN6S783C42v9Ev();
extern void _ZN6S783C43v10Ev();
extern void _ZN6S783C43v11Ev();
extern void _ZN6S783C43v12Ev();
extern void _ZN6S783C43v13Ev();
extern void _ZN6S783C43v14Ev();
extern void _ZN6S783C43v15Ev();
extern void _ZN6S783C43v16Ev();
extern void _ZN6S783C43v17Ev();
extern void _ZN6S783C43v18Ev();
extern void _ZN6S783C43v19Ev();
extern void _ZN6S783C43v20Ev();
extern void _ZN6S783C43v21Ev();
extern void _ZN6S783C43v22Ev();
extern void _ZN6S783C43v23Ev();
extern void _ZN6S783C43v24Ev();
extern void _ZN6S783C43v25Ev();
extern void _ZN6S783C43v26Ev();
extern void _ZN6S783C43v27Ev();
extern void _ZN6S783C43v28Ev();
extern void _ZN6S783C43v29Ev();
extern void _ZN6S783C43v30Ev();
extern void _ZN6S783C43v31Ev();
extern void _ZN6S783C43v32Ev();
extern void _ZN6S783C43v33Ev();
extern void _ZN6S783C43v34Ev();
extern void _ZN6S783C43v35Ev();
extern void _ZN6S783C43v36Ev();
extern void _ZN6S783C43v37Ev();
extern void _ZN6S783C43v38Ev();
extern void _ZN6S783C43v39Ev();
extern void _ZN6S783C43v40Ev();
extern void _ZN6S783C43v41Ev();
extern void _ZN6S783C43v42Ev();
extern void _ZN6S783C43v43Ev();
extern void _ZN6S783C43v44Ev();
extern void _ZN6S783C43v45Ev();
extern void _ZN6S783C43v46Ev();
extern void _ZN6S783C33v47Ev();
extern void _ZN6S783C33v48Ev();
extern void _ZN6S783C33v49Ev();
extern void _ZN6S783C33v50Ev();
static  VTBL_ENTRY vtc_S783C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S783C3[0]),
  (VTBL_ENTRY)&_ZN6S783C3D1Ev,
  (VTBL_ENTRY)&_ZN6S783C3D0Ev,
  (VTBL_ENTRY)&_ZN6S783C42v4Ev,
  (VTBL_ENTRY)&_ZN6S783C42v5Ev,
  (VTBL_ENTRY)&_ZN6S783C42v6Ev,
  (VTBL_ENTRY)&_ZN6S783C42v7Ev,
  (VTBL_ENTRY)&_ZN6S783C42v8Ev,
  (VTBL_ENTRY)&_ZN6S783C42v9Ev,
  (VTBL_ENTRY)&_ZN6S783C43v10Ev,
  (VTBL_ENTRY)&_ZN6S783C43v11Ev,
  (VTBL_ENTRY)&_ZN6S783C43v12Ev,
  (VTBL_ENTRY)&_ZN6S783C43v13Ev,
  (VTBL_ENTRY)&_ZN6S783C43v14Ev,
  (VTBL_ENTRY)&_ZN6S783C43v15Ev,
  (VTBL_ENTRY)&_ZN6S783C43v16Ev,
  (VTBL_ENTRY)&_ZN6S783C43v17Ev,
  (VTBL_ENTRY)&_ZN6S783C43v18Ev,
  (VTBL_ENTRY)&_ZN6S783C43v19Ev,
  (VTBL_ENTRY)&_ZN6S783C43v20Ev,
  (VTBL_ENTRY)&_ZN6S783C43v21Ev,
  (VTBL_ENTRY)&_ZN6S783C43v22Ev,
  (VTBL_ENTRY)&_ZN6S783C43v23Ev,
  (VTBL_ENTRY)&_ZN6S783C43v24Ev,
  (VTBL_ENTRY)&_ZN6S783C43v25Ev,
  (VTBL_ENTRY)&_ZN6S783C43v26Ev,
  (VTBL_ENTRY)&_ZN6S783C43v27Ev,
  (VTBL_ENTRY)&_ZN6S783C43v28Ev,
  (VTBL_ENTRY)&_ZN6S783C43v29Ev,
  (VTBL_ENTRY)&_ZN6S783C43v30Ev,
  (VTBL_ENTRY)&_ZN6S783C43v31Ev,
  (VTBL_ENTRY)&_ZN6S783C43v32Ev,
  (VTBL_ENTRY)&_ZN6S783C43v33Ev,
  (VTBL_ENTRY)&_ZN6S783C43v34Ev,
  (VTBL_ENTRY)&_ZN6S783C43v35Ev,
  (VTBL_ENTRY)&_ZN6S783C43v36Ev,
  (VTBL_ENTRY)&_ZN6S783C43v37Ev,
  (VTBL_ENTRY)&_ZN6S783C43v38Ev,
  (VTBL_ENTRY)&_ZN6S783C43v39Ev,
  (VTBL_ENTRY)&_ZN6S783C43v40Ev,
  (VTBL_ENTRY)&_ZN6S783C43v41Ev,
  (VTBL_ENTRY)&_ZN6S783C43v42Ev,
  (VTBL_ENTRY)&_ZN6S783C43v43Ev,
  (VTBL_ENTRY)&_ZN6S783C43v44Ev,
  (VTBL_ENTRY)&_ZN6S783C43v45Ev,
  (VTBL_ENTRY)&_ZN6S783C43v46Ev,
  (VTBL_ENTRY)&_ZN6S783C33v47Ev,
  (VTBL_ENTRY)&_ZN6S783C33v48Ev,
  (VTBL_ENTRY)&_ZN6S783C33v49Ev,
  (VTBL_ENTRY)&_ZN6S783C33v50Ev,
};
extern VTBL_ENTRY _ZTI6S783C3[];
extern  VTBL_ENTRY _ZTV6S783C3[];
Class_Descriptor cd_S783C3 = {  "S783C3", // class name
  bases_S783C3, 2,
  &(vtc_S783C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S783C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S783C3),51, //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  S783C2  : S783C3 {
  virtual void  v51(); // _ZN6S783C23v51Ev
  ~S783C2(); // tgen
  S783C2(); // tgen
};
//SIG(-1 S783C2) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1}


void  S783C2 ::v51(){vfunc_called(this, "_ZN6S783C23v51Ev");}
S783C2 ::~S783C2(){ note_dtor("S783C2", this);} // tgen
S783C2 ::S783C2(){ note_ctor("S783C2", this);} // tgen

static void Test_S783C2()
{
  extern Class_Descriptor cd_S783C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S783C2, buf);
    S783C2 *dp, &lv = *(dp=new (buf) S783C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S783C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S783C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S783C4*)(S783C3*), 0, "S783C2");
    check_base_class_offset(lv, (S783C4*)(S783C3*), 0, "S783C2");
    check_base_class_offset(lv, (S783C3*), 0, "S783C2");
    test_class_info(&lv, &cd_S783C2);
    dp->~S783C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS783C2(Test_S783C2, "S783C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S783C2C1Ev();
extern void _ZN6S783C2D1Ev();
Name_Map name_map_S783C2[] = {
  NSPAIR(_ZN6S783C2C1Ev),
  NSPAIR(_ZN6S783C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S783C4;
extern VTBL_ENTRY _ZTI6S783C4[];
extern  VTBL_ENTRY _ZTV6S783C4[];
extern Class_Descriptor cd_S783C3;
extern VTBL_ENTRY _ZTI6S783C3[];
extern  VTBL_ENTRY _ZTV6S783C3[];
static Base_Class bases_S783C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S783C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S783C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S783C2[];
extern void _ZN6S783C2D1Ev();
extern void _ZN6S783C2D0Ev();
extern void _ZN6S783C42v4Ev();
extern void _ZN6S783C42v5Ev();
extern void _ZN6S783C42v6Ev();
extern void _ZN6S783C42v7Ev();
extern void _ZN6S783C42v8Ev();
extern void _ZN6S783C42v9Ev();
extern void _ZN6S783C43v10Ev();
extern void _ZN6S783C43v11Ev();
extern void _ZN6S783C43v12Ev();
extern void _ZN6S783C43v13Ev();
extern void _ZN6S783C43v14Ev();
extern void _ZN6S783C43v15Ev();
extern void _ZN6S783C43v16Ev();
extern void _ZN6S783C43v17Ev();
extern void _ZN6S783C43v18Ev();
extern void _ZN6S783C43v19Ev();
extern void _ZN6S783C43v20Ev();
extern void _ZN6S783C43v21Ev();
extern void _ZN6S783C43v22Ev();
extern void _ZN6S783C43v23Ev();
extern void _ZN6S783C43v24Ev();
extern void _ZN6S783C43v25Ev();
extern void _ZN6S783C43v26Ev();
extern void _ZN6S783C43v27Ev();
extern void _ZN6S783C43v28Ev();
extern void _ZN6S783C43v29Ev();
extern void _ZN6S783C43v30Ev();
extern void _ZN6S783C43v31Ev();
extern void _ZN6S783C43v32Ev();
extern void _ZN6S783C43v33Ev();
extern void _ZN6S783C43v34Ev();
extern void _ZN6S783C43v35Ev();
extern void _ZN6S783C43v36Ev();
extern void _ZN6S783C43v37Ev();
extern void _ZN6S783C43v38Ev();
extern void _ZN6S783C43v39Ev();
extern void _ZN6S783C43v40Ev();
extern void _ZN6S783C43v41Ev();
extern void _ZN6S783C43v42Ev();
extern void _ZN6S783C43v43Ev();
extern void _ZN6S783C43v44Ev();
extern void _ZN6S783C43v45Ev();
extern void _ZN6S783C43v46Ev();
extern void _ZN6S783C33v47Ev();
extern void _ZN6S783C33v48Ev();
extern void _ZN6S783C33v49Ev();
extern void _ZN6S783C33v50Ev();
extern void _ZN6S783C23v51Ev();
static  VTBL_ENTRY vtc_S783C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S783C2[0]),
  (VTBL_ENTRY)&_ZN6S783C2D1Ev,
  (VTBL_ENTRY)&_ZN6S783C2D0Ev,
  (VTBL_ENTRY)&_ZN6S783C42v4Ev,
  (VTBL_ENTRY)&_ZN6S783C42v5Ev,
  (VTBL_ENTRY)&_ZN6S783C42v6Ev,
  (VTBL_ENTRY)&_ZN6S783C42v7Ev,
  (VTBL_ENTRY)&_ZN6S783C42v8Ev,
  (VTBL_ENTRY)&_ZN6S783C42v9Ev,
  (VTBL_ENTRY)&_ZN6S783C43v10Ev,
  (VTBL_ENTRY)&_ZN6S783C43v11Ev,
  (VTBL_ENTRY)&_ZN6S783C43v12Ev,
  (VTBL_ENTRY)&_ZN6S783C43v13Ev,
  (VTBL_ENTRY)&_ZN6S783C43v14Ev,
  (VTBL_ENTRY)&_ZN6S783C43v15Ev,
  (VTBL_ENTRY)&_ZN6S783C43v16Ev,
  (VTBL_ENTRY)&_ZN6S783C43v17Ev,
  (VTBL_ENTRY)&_ZN6S783C43v18Ev,
  (VTBL_ENTRY)&_ZN6S783C43v19Ev,
  (VTBL_ENTRY)&_ZN6S783C43v20Ev,
  (VTBL_ENTRY)&_ZN6S783C43v21Ev,
  (VTBL_ENTRY)&_ZN6S783C43v22Ev,
  (VTBL_ENTRY)&_ZN6S783C43v23Ev,
  (VTBL_ENTRY)&_ZN6S783C43v24Ev,
  (VTBL_ENTRY)&_ZN6S783C43v25Ev,
  (VTBL_ENTRY)&_ZN6S783C43v26Ev,
  (VTBL_ENTRY)&_ZN6S783C43v27Ev,
  (VTBL_ENTRY)&_ZN6S783C43v28Ev,
  (VTBL_ENTRY)&_ZN6S783C43v29Ev,
  (VTBL_ENTRY)&_ZN6S783C43v30Ev,
  (VTBL_ENTRY)&_ZN6S783C43v31Ev,
  (VTBL_ENTRY)&_ZN6S783C43v32Ev,
  (VTBL_ENTRY)&_ZN6S783C43v33Ev,
  (VTBL_ENTRY)&_ZN6S783C43v34Ev,
  (VTBL_ENTRY)&_ZN6S783C43v35Ev,
  (VTBL_ENTRY)&_ZN6S783C43v36Ev,
  (VTBL_ENTRY)&_ZN6S783C43v37Ev,
  (VTBL_ENTRY)&_ZN6S783C43v38Ev,
  (VTBL_ENTRY)&_ZN6S783C43v39Ev,
  (VTBL_ENTRY)&_ZN6S783C43v40Ev,
  (VTBL_ENTRY)&_ZN6S783C43v41Ev,
  (VTBL_ENTRY)&_ZN6S783C43v42Ev,
  (VTBL_ENTRY)&_ZN6S783C43v43Ev,
  (VTBL_ENTRY)&_ZN6S783C43v44Ev,
  (VTBL_ENTRY)&_ZN6S783C43v45Ev,
  (VTBL_ENTRY)&_ZN6S783C43v46Ev,
  (VTBL_ENTRY)&_ZN6S783C33v47Ev,
  (VTBL_ENTRY)&_ZN6S783C33v48Ev,
  (VTBL_ENTRY)&_ZN6S783C33v49Ev,
  (VTBL_ENTRY)&_ZN6S783C33v50Ev,
  (VTBL_ENTRY)&_ZN6S783C23v51Ev,
};
extern VTBL_ENTRY _ZTI6S783C2[];
extern  VTBL_ENTRY _ZTV6S783C2[];
Class_Descriptor cd_S783C2 = {  "S783C2", // class name
  bases_S783C2, 3,
  &(vtc_S783C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S783C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S783C2),52, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S783C1  : S783C2 {
  virtual void  v1(); // _ZN6S783C12v1Ev
  virtual void  v2(); // _ZN6S783C12v2Ev
  virtual void  v3(); // _ZN6S783C12v3Ev
  ~S783C1(); // tgen
  S783C1(); // tgen
};
//SIG(1 S783C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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} v1 v2 v3}


void  S783C1 ::v1(){vfunc_called(this, "_ZN6S783C12v1Ev");}
void  S783C1 ::v2(){vfunc_called(this, "_ZN6S783C12v2Ev");}
void  S783C1 ::v3(){vfunc_called(this, "_ZN6S783C12v3Ev");}
S783C1 ::~S783C1(){ note_dtor("S783C1", this);} // tgen
S783C1 ::S783C1(){ note_ctor("S783C1", this);} // tgen

static void Test_S783C1()
{
  extern Class_Descriptor cd_S783C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S783C1, buf);
    S783C1 *dp, &lv = *(dp=new (buf) S783C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S783C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S783C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S783C4*)(S783C3*)(S783C2*), 0, "S783C1");
    check_base_class_offset(lv, (S783C4*)(S783C3*)(S783C2*), 0, "S783C1");
    check_base_class_offset(lv, (S783C3*)(S783C2*), 0, "S783C1");
    check_base_class_offset(lv, (S783C2*), 0, "S783C1");
    test_class_info(&lv, &cd_S783C1);
    dp->~S783C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS783C1(Test_S783C1, "S783C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S783C1C1Ev();
extern void _ZN6S783C1D1Ev();
Name_Map name_map_S783C1[] = {
  NSPAIR(_ZN6S783C1C1Ev),
  NSPAIR(_ZN6S783C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S783C4;
extern VTBL_ENTRY _ZTI6S783C4[];
extern  VTBL_ENTRY _ZTV6S783C4[];
extern Class_Descriptor cd_S783C3;
extern VTBL_ENTRY _ZTI6S783C3[];
extern  VTBL_ENTRY _ZTV6S783C3[];
extern Class_Descriptor cd_S783C2;
extern VTBL_ENTRY _ZTI6S783C2[];
extern  VTBL_ENTRY _ZTV6S783C2[];
static Base_Class bases_S783C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S783C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S783C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S783C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S783C1[];
extern void _ZN6S783C1D1Ev();
extern void _ZN6S783C1D0Ev();
extern void _ZN6S783C42v4Ev();
extern void _ZN6S783C42v5Ev();
extern void _ZN6S783C42v6Ev();
extern void _ZN6S783C42v7Ev();
extern void _ZN6S783C42v8Ev();
extern void _ZN6S783C42v9Ev();
extern void _ZN6S783C43v10Ev();
extern void _ZN6S783C43v11Ev();
extern void _ZN6S783C43v12Ev();
extern void _ZN6S783C43v13Ev();
extern void _ZN6S783C43v14Ev();
extern void _ZN6S783C43v15Ev();
extern void _ZN6S783C43v16Ev();
extern void _ZN6S783C43v17Ev();
extern void _ZN6S783C43v18Ev();
extern void _ZN6S783C43v19Ev();
extern void _ZN6S783C43v20Ev();
extern void _ZN6S783C43v21Ev();
extern void _ZN6S783C43v22Ev();
extern void _ZN6S783C43v23Ev();
extern void _ZN6S783C43v24Ev();
extern void _ZN6S783C43v25Ev();
extern void _ZN6S783C43v26Ev();
extern void _ZN6S783C43v27Ev();
extern void _ZN6S783C43v28Ev();
extern void _ZN6S783C43v29Ev();
extern void _ZN6S783C43v30Ev();
extern void _ZN6S783C43v31Ev();
extern void _ZN6S783C43v32Ev();
extern void _ZN6S783C43v33Ev();
extern void _ZN6S783C43v34Ev();
extern void _ZN6S783C43v35Ev();
extern void _ZN6S783C43v36Ev();
extern void _ZN6S783C43v37Ev();
extern void _ZN6S783C43v38Ev();
extern void _ZN6S783C43v39Ev();
extern void _ZN6S783C43v40Ev();
extern void _ZN6S783C43v41Ev();
extern void _ZN6S783C43v42Ev();
extern void _ZN6S783C43v43Ev();
extern void _ZN6S783C43v44Ev();
extern void _ZN6S783C43v45Ev();
extern void _ZN6S783C43v46Ev();
extern void _ZN6S783C33v47Ev();
extern void _ZN6S783C33v48Ev();
extern void _ZN6S783C33v49Ev();
extern void _ZN6S783C33v50Ev();
extern void _ZN6S783C23v51Ev();
extern void _ZN6S783C12v1Ev();
extern void _ZN6S783C12v2Ev();
extern void _ZN6S783C12v3Ev();
static  VTBL_ENTRY vtc_S783C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S783C1[0]),
  (VTBL_ENTRY)&_ZN6S783C1D1Ev,
  (VTBL_ENTRY)&_ZN6S783C1D0Ev,
  (VTBL_ENTRY)&_ZN6S783C42v4Ev,
  (VTBL_ENTRY)&_ZN6S783C42v5Ev,
  (VTBL_ENTRY)&_ZN6S783C42v6Ev,
  (VTBL_ENTRY)&_ZN6S783C42v7Ev,
  (VTBL_ENTRY)&_ZN6S783C42v8Ev,
  (VTBL_ENTRY)&_ZN6S783C42v9Ev,
  (VTBL_ENTRY)&_ZN6S783C43v10Ev,
  (VTBL_ENTRY)&_ZN6S783C43v11Ev,
  (VTBL_ENTRY)&_ZN6S783C43v12Ev,
  (VTBL_ENTRY)&_ZN6S783C43v13Ev,
  (VTBL_ENTRY)&_ZN6S783C43v14Ev,
  (VTBL_ENTRY)&_ZN6S783C43v15Ev,
  (VTBL_ENTRY)&_ZN6S783C43v16Ev,
  (VTBL_ENTRY)&_ZN6S783C43v17Ev,
  (VTBL_ENTRY)&_ZN6S783C43v18Ev,
  (VTBL_ENTRY)&_ZN6S783C43v19Ev,
  (VTBL_ENTRY)&_ZN6S783C43v20Ev,
  (VTBL_ENTRY)&_ZN6S783C43v21Ev,
  (VTBL_ENTRY)&_ZN6S783C43v22Ev,
  (VTBL_ENTRY)&_ZN6S783C43v23Ev,
  (VTBL_ENTRY)&_ZN6S783C43v24Ev,
  (VTBL_ENTRY)&_ZN6S783C43v25Ev,
  (VTBL_ENTRY)&_ZN6S783C43v26Ev,
  (VTBL_ENTRY)&_ZN6S783C43v27Ev,
  (VTBL_ENTRY)&_ZN6S783C43v28Ev,
  (VTBL_ENTRY)&_ZN6S783C43v29Ev,
  (VTBL_ENTRY)&_ZN6S783C43v30Ev,
  (VTBL_ENTRY)&_ZN6S783C43v31Ev,
  (VTBL_ENTRY)&_ZN6S783C43v32Ev,
  (VTBL_ENTRY)&_ZN6S783C43v33Ev,
  (VTBL_ENTRY)&_ZN6S783C43v34Ev,
  (VTBL_ENTRY)&_ZN6S783C43v35Ev,
  (VTBL_ENTRY)&_ZN6S783C43v36Ev,
  (VTBL_ENTRY)&_ZN6S783C43v37Ev,
  (VTBL_ENTRY)&_ZN6S783C43v38Ev,
  (VTBL_ENTRY)&_ZN6S783C43v39Ev,
  (VTBL_ENTRY)&_ZN6S783C43v40Ev,
  (VTBL_ENTRY)&_ZN6S783C43v41Ev,
  (VTBL_ENTRY)&_ZN6S783C43v42Ev,
  (VTBL_ENTRY)&_ZN6S783C43v43Ev,
  (VTBL_ENTRY)&_ZN6S783C43v44Ev,
  (VTBL_ENTRY)&_ZN6S783C43v45Ev,
  (VTBL_ENTRY)&_ZN6S783C43v46Ev,
  (VTBL_ENTRY)&_ZN6S783C33v47Ev,
  (VTBL_ENTRY)&_ZN6S783C33v48Ev,
  (VTBL_ENTRY)&_ZN6S783C33v49Ev,
  (VTBL_ENTRY)&_ZN6S783C33v50Ev,
  (VTBL_ENTRY)&_ZN6S783C23v51Ev,
  (VTBL_ENTRY)&_ZN6S783C12v1Ev,
  (VTBL_ENTRY)&_ZN6S783C12v2Ev,
  (VTBL_ENTRY)&_ZN6S783C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S783C1[];
extern  VTBL_ENTRY _ZTV6S783C1[];
Class_Descriptor cd_S783C1 = {  "S783C1", // class name
  bases_S783C1, 4,
  &(vtc_S783C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S783C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S783C1),55, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1823C3  : S1C11_nt {
  virtual void  v6(); // _ZN7S1823C32v6Ev
  virtual void  v7(); // _ZN7S1823C32v7Ev
  virtual void  v8(); // _ZN7S1823C32v8Ev
  virtual void  v9(); // _ZN7S1823C32v9Ev
  virtual void  v10(); // _ZN7S1823C33v10Ev
  virtual void  v11(); // _ZN7S1823C33v11Ev
  virtual void  v12(); // _ZN7S1823C33v12Ev
  virtual void  v13(); // _ZN7S1823C33v13Ev
  virtual void  v14(); // _ZN7S1823C33v14Ev
  virtual void  v15(); // _ZN7S1823C33v15Ev
  virtual void  v16(); // _ZN7S1823C33v16Ev
  virtual void  v17(); // _ZN7S1823C33v17Ev
  virtual void  v18(); // _ZN7S1823C33v18Ev
  virtual void  v19(); // _ZN7S1823C33v19Ev
  virtual void  v20(); // _ZN7S1823C33v20Ev
  virtual void  v21(); // _ZN7S1823C33v21Ev
  virtual void  v22(); // _ZN7S1823C33v22Ev
  virtual void  v23(); // _ZN7S1823C33v23Ev
  virtual void  v24(); // _ZN7S1823C33v24Ev
  virtual void  v25(); // _ZN7S1823C33v25Ev
  virtual void  v26(); // _ZN7S1823C33v26Ev
  virtual void  v27(); // _ZN7S1823C33v27Ev
  virtual void  v28(); // _ZN7S1823C33v28Ev
  virtual void  v29(); // _ZN7S1823C33v29Ev
  virtual void  v30(); // _ZN7S1823C33v30Ev
  virtual void  v31(); // _ZN7S1823C33v31Ev
  virtual void  v32(); // _ZN7S1823C33v32Ev
  virtual void  v33(); // _ZN7S1823C33v33Ev
  virtual void  v34(); // _ZN7S1823C33v34Ev
  virtual void  v35(); // _ZN7S1823C33v35Ev
  virtual void  v36(); // _ZN7S1823C33v36Ev
  virtual void  v37(); // _ZN7S1823C33v37Ev
  virtual void  v38(); // _ZN7S1823C33v38Ev
  virtual void  v39(); // _ZN7S1823C33v39Ev
  virtual void  v40(); // _ZN7S1823C33v40Ev
  virtual void  v41(); // _ZN7S1823C33v41Ev
  virtual void  v42(); // _ZN7S1823C33v42Ev
  virtual void  v43(); // _ZN7S1823C33v43Ev
  virtual void  v44(); // _ZN7S1823C33v44Ev
  virtual void  v45(); // _ZN7S1823C33v45Ev
  virtual void  v46(); // _ZN7S1823C33v46Ev
  virtual void  v47(); // _ZN7S1823C33v47Ev
  virtual void  v48(); // _ZN7S1823C33v48Ev
  ~S1823C3(); // tgen
  S1823C3(); // tgen
};
//SIG(-1 S1823C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1823C3 ::v6(){vfunc_called(this, "_ZN7S1823C32v6Ev");}
void  S1823C3 ::v7(){vfunc_called(this, "_ZN7S1823C32v7Ev");}
void  S1823C3 ::v8(){vfunc_called(this, "_ZN7S1823C32v8Ev");}
void  S1823C3 ::v9(){vfunc_called(this, "_ZN7S1823C32v9Ev");}
void  S1823C3 ::v10(){vfunc_called(this, "_ZN7S1823C33v10Ev");}
void  S1823C3 ::v11(){vfunc_called(this, "_ZN7S1823C33v11Ev");}
void  S1823C3 ::v12(){vfunc_called(this, "_ZN7S1823C33v12Ev");}
void  S1823C3 ::v13(){vfunc_called(this, "_ZN7S1823C33v13Ev");}
void  S1823C3 ::v14(){vfunc_called(this, "_ZN7S1823C33v14Ev");}
void  S1823C3 ::v15(){vfunc_called(this, "_ZN7S1823C33v15Ev");}
void  S1823C3 ::v16(){vfunc_called(this, "_ZN7S1823C33v16Ev");}
void  S1823C3 ::v17(){vfunc_called(this, "_ZN7S1823C33v17Ev");}
void  S1823C3 ::v18(){vfunc_called(this, "_ZN7S1823C33v18Ev");}
void  S1823C3 ::v19(){vfunc_called(this, "_ZN7S1823C33v19Ev");}
void  S1823C3 ::v20(){vfunc_called(this, "_ZN7S1823C33v20Ev");}
void  S1823C3 ::v21(){vfunc_called(this, "_ZN7S1823C33v21Ev");}
void  S1823C3 ::v22(){vfunc_called(this, "_ZN7S1823C33v22Ev");}
void  S1823C3 ::v23(){vfunc_called(this, "_ZN7S1823C33v23Ev");}
void  S1823C3 ::v24(){vfunc_called(this, "_ZN7S1823C33v24Ev");}
void  S1823C3 ::v25(){vfunc_called(this, "_ZN7S1823C33v25Ev");}
void  S1823C3 ::v26(){vfunc_called(this, "_ZN7S1823C33v26Ev");}
void  S1823C3 ::v27(){vfunc_called(this, "_ZN7S1823C33v27Ev");}
void  S1823C3 ::v28(){vfunc_called(this, "_ZN7S1823C33v28Ev");}
void  S1823C3 ::v29(){vfunc_called(this, "_ZN7S1823C33v29Ev");}
void  S1823C3 ::v30(){vfunc_called(this, "_ZN7S1823C33v30Ev");}
void  S1823C3 ::v31(){vfunc_called(this, "_ZN7S1823C33v31Ev");}
void  S1823C3 ::v32(){vfunc_called(this, "_ZN7S1823C33v32Ev");}
void  S1823C3 ::v33(){vfunc_called(this, "_ZN7S1823C33v33Ev");}
void  S1823C3 ::v34(){vfunc_called(this, "_ZN7S1823C33v34Ev");}
void  S1823C3 ::v35(){vfunc_called(this, "_ZN7S1823C33v35Ev");}
void  S1823C3 ::v36(){vfunc_called(this, "_ZN7S1823C33v36Ev");}
void  S1823C3 ::v37(){vfunc_called(this, "_ZN7S1823C33v37Ev");}
void  S1823C3 ::v38(){vfunc_called(this, "_ZN7S1823C33v38Ev");}
void  S1823C3 ::v39(){vfunc_called(this, "_ZN7S1823C33v39Ev");}
void  S1823C3 ::v40(){vfunc_called(this, "_ZN7S1823C33v40Ev");}
void  S1823C3 ::v41(){vfunc_called(this, "_ZN7S1823C33v41Ev");}
void  S1823C3 ::v42(){vfunc_called(this, "_ZN7S1823C33v42Ev");}
void  S1823C3 ::v43(){vfunc_called(this, "_ZN7S1823C33v43Ev");}
void  S1823C3 ::v44(){vfunc_called(this, "_ZN7S1823C33v44Ev");}
void  S1823C3 ::v45(){vfunc_called(this, "_ZN7S1823C33v45Ev");}
void  S1823C3 ::v46(){vfunc_called(this, "_ZN7S1823C33v46Ev");}
void  S1823C3 ::v47(){vfunc_called(this, "_ZN7S1823C33v47Ev");}
void  S1823C3 ::v48(){vfunc_called(this, "_ZN7S1823C33v48Ev");}
S1823C3 ::~S1823C3(){ note_dtor("S1823C3", this);} // tgen
S1823C3 ::S1823C3(){ note_ctor("S1823C3", this);} // tgen

static void Test_S1823C3()
{
  extern Class_Descriptor cd_S1823C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1823C3, buf);
    S1823C3 *dp, &lv = *(dp=new (buf) S1823C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1823C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1823C3)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S1823C3");
    test_class_info(&lv, &cd_S1823C3);
    dp->~S1823C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1823C3(Test_S1823C3, "S1823C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1823C3C1Ev();
extern void _ZN7S1823C3D1Ev();
Name_Map name_map_S1823C3[] = {
  NSPAIR(_ZN7S1823C3C1Ev),
  NSPAIR(_ZN7S1823C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S1823C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1823C3[];
extern void _ZN7S1823C3D1Ev();
extern void _ZN7S1823C3D0Ev();
extern void _ZN7S1823C32v6Ev();
extern void _ZN7S1823C32v7Ev();
extern void _ZN7S1823C32v8Ev();
extern void _ZN7S1823C32v9Ev();
extern void _ZN7S1823C33v10Ev();
extern void _ZN7S1823C33v11Ev();
extern void _ZN7S1823C33v12Ev();
extern void _ZN7S1823C33v13Ev();
extern void _ZN7S1823C33v14Ev();
extern void _ZN7S1823C33v15Ev();
extern void _ZN7S1823C33v16Ev();
extern void _ZN7S1823C33v17Ev();
extern void _ZN7S1823C33v18Ev();
extern void _ZN7S1823C33v19Ev();
extern void _ZN7S1823C33v20Ev();
extern void _ZN7S1823C33v21Ev();
extern void _ZN7S1823C33v22Ev();
extern void _ZN7S1823C33v23Ev();
extern void _ZN7S1823C33v24Ev();
extern void _ZN7S1823C33v25Ev();
extern void _ZN7S1823C33v26Ev();
extern void _ZN7S1823C33v27Ev();
extern void _ZN7S1823C33v28Ev();
extern void _ZN7S1823C33v29Ev();
extern void _ZN7S1823C33v30Ev();
extern void _ZN7S1823C33v31Ev();
extern void _ZN7S1823C33v32Ev();
extern void _ZN7S1823C33v33Ev();
extern void _ZN7S1823C33v34Ev();
extern void _ZN7S1823C33v35Ev();
extern void _ZN7S1823C33v36Ev();
extern void _ZN7S1823C33v37Ev();
extern void _ZN7S1823C33v38Ev();
extern void _ZN7S1823C33v39Ev();
extern void _ZN7S1823C33v40Ev();
extern void _ZN7S1823C33v41Ev();
extern void _ZN7S1823C33v42Ev();
extern void _ZN7S1823C33v43Ev();
extern void _ZN7S1823C33v44Ev();
extern void _ZN7S1823C33v45Ev();
extern void _ZN7S1823C33v46Ev();
extern void _ZN7S1823C33v47Ev();
extern void _ZN7S1823C33v48Ev();
static  VTBL_ENTRY vtc_S1823C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1823C3[0]),
  (VTBL_ENTRY)&_ZN7S1823C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1823C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1823C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1823C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1823C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1823C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v48Ev,
};
extern VTBL_ENTRY _ZTI7S1823C3[];
extern  VTBL_ENTRY _ZTV7S1823C3[];
Class_Descriptor cd_S1823C3 = {  "S1823C3", // class name
  bases_S1823C3, 1,
  &(vtc_S1823C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1823C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1823C3),47, //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  S1823C2  : S1823C3 {
  virtual void  v49(); // _ZN7S1823C23v49Ev
  virtual void  v50(); // _ZN7S1823C23v50Ev
  virtual void  v51(); // _ZN7S1823C23v51Ev
  virtual void  v52(); // _ZN7S1823C23v52Ev
  ~S1823C2(); // tgen
  S1823C2(); // tgen
};
//SIG(-1 S1823C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4}


void  S1823C2 ::v49(){vfunc_called(this, "_ZN7S1823C23v49Ev");}
void  S1823C2 ::v50(){vfunc_called(this, "_ZN7S1823C23v50Ev");}
void  S1823C2 ::v51(){vfunc_called(this, "_ZN7S1823C23v51Ev");}
void  S1823C2 ::v52(){vfunc_called(this, "_ZN7S1823C23v52Ev");}
S1823C2 ::~S1823C2(){ note_dtor("S1823C2", this);} // tgen
S1823C2 ::S1823C2(){ note_ctor("S1823C2", this);} // tgen

static void Test_S1823C2()
{
  extern Class_Descriptor cd_S1823C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1823C2, buf);
    S1823C2 *dp, &lv = *(dp=new (buf) S1823C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1823C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1823C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S1823C3*), 0, "S1823C2");
    check_base_class_offset(lv, (S1823C3*), 0, "S1823C2");
    test_class_info(&lv, &cd_S1823C2);
    dp->~S1823C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1823C2(Test_S1823C2, "S1823C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1823C2C1Ev();
extern void _ZN7S1823C2D1Ev();
Name_Map name_map_S1823C2[] = {
  NSPAIR(_ZN7S1823C2C1Ev),
  NSPAIR(_ZN7S1823C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1823C3;
extern VTBL_ENTRY _ZTI7S1823C3[];
extern  VTBL_ENTRY _ZTV7S1823C3[];
static Base_Class bases_S1823C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1823C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1823C2[];
extern void _ZN7S1823C2D1Ev();
extern void _ZN7S1823C2D0Ev();
extern void _ZN7S1823C32v6Ev();
extern void _ZN7S1823C32v7Ev();
extern void _ZN7S1823C32v8Ev();
extern void _ZN7S1823C32v9Ev();
extern void _ZN7S1823C33v10Ev();
extern void _ZN7S1823C33v11Ev();
extern void _ZN7S1823C33v12Ev();
extern void _ZN7S1823C33v13Ev();
extern void _ZN7S1823C33v14Ev();
extern void _ZN7S1823C33v15Ev();
extern void _ZN7S1823C33v16Ev();
extern void _ZN7S1823C33v17Ev();
extern void _ZN7S1823C33v18Ev();
extern void _ZN7S1823C33v19Ev();
extern void _ZN7S1823C33v20Ev();
extern void _ZN7S1823C33v21Ev();
extern void _ZN7S1823C33v22Ev();
extern void _ZN7S1823C33v23Ev();
extern void _ZN7S1823C33v24Ev();
extern void _ZN7S1823C33v25Ev();
extern void _ZN7S1823C33v26Ev();
extern void _ZN7S1823C33v27Ev();
extern void _ZN7S1823C33v28Ev();
extern void _ZN7S1823C33v29Ev();
extern void _ZN7S1823C33v30Ev();
extern void _ZN7S1823C33v31Ev();
extern void _ZN7S1823C33v32Ev();
extern void _ZN7S1823C33v33Ev();
extern void _ZN7S1823C33v34Ev();
extern void _ZN7S1823C33v35Ev();
extern void _ZN7S1823C33v36Ev();
extern void _ZN7S1823C33v37Ev();
extern void _ZN7S1823C33v38Ev();
extern void _ZN7S1823C33v39Ev();
extern void _ZN7S1823C33v40Ev();
extern void _ZN7S1823C33v41Ev();
extern void _ZN7S1823C33v42Ev();
extern void _ZN7S1823C33v43Ev();
extern void _ZN7S1823C33v44Ev();
extern void _ZN7S1823C33v45Ev();
extern void _ZN7S1823C33v46Ev();
extern void _ZN7S1823C33v47Ev();
extern void _ZN7S1823C33v48Ev();
extern void _ZN7S1823C23v49Ev();
extern void _ZN7S1823C23v50Ev();
extern void _ZN7S1823C23v51Ev();
extern void _ZN7S1823C23v52Ev();
static  VTBL_ENTRY vtc_S1823C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1823C2[0]),
  (VTBL_ENTRY)&_ZN7S1823C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1823C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1823C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1823C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1823C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1823C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1823C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1823C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1823C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1823C23v52Ev,
};
extern VTBL_ENTRY _ZTI7S1823C2[];
extern  VTBL_ENTRY _ZTV7S1823C2[];
Class_Descriptor cd_S1823C2 = {  "S1823C2", // class name
  bases_S1823C2, 2,
  &(vtc_S1823C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1823C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1823C2),51, //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  S1823C1  : S1823C2 {
  virtual void  v1(); // _ZN7S1823C12v1Ev
  virtual void  v2(); // _ZN7S1823C12v2Ev
  virtual void  v3(); // _ZN7S1823C12v3Ev
  virtual void  v4(); // _ZN7S1823C12v4Ev
  virtual void  v5(); // _ZN7S1823C12v5Ev
  ~S1823C1(); // tgen
  S1823C1(); // tgen
};
//SIG(1 S1823C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1 v2 v3 v4 v5}


void  S1823C1 ::v1(){vfunc_called(this, "_ZN7S1823C12v1Ev");}
void  S1823C1 ::v2(){vfunc_called(this, "_ZN7S1823C12v2Ev");}
void  S1823C1 ::v3(){vfunc_called(this, "_ZN7S1823C12v3Ev");}
void  S1823C1 ::v4(){vfunc_called(this, "_ZN7S1823C12v4Ev");}
void  S1823C1 ::v5(){vfunc_called(this, "_ZN7S1823C12v5Ev");}
S1823C1 ::~S1823C1(){ note_dtor("S1823C1", this);} // tgen
S1823C1 ::S1823C1(){ note_ctor("S1823C1", this);} // tgen

static void Test_S1823C1()
{
  extern Class_Descriptor cd_S1823C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1823C1, buf);
    S1823C1 *dp, &lv = *(dp=new (buf) S1823C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1823C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1823C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S1823C3*)(S1823C2*), 0, "S1823C1");
    check_base_class_offset(lv, (S1823C3*)(S1823C2*), 0, "S1823C1");
    check_base_class_offset(lv, (S1823C2*), 0, "S1823C1");
    test_class_info(&lv, &cd_S1823C1);
    dp->~S1823C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1823C1(Test_S1823C1, "S1823C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1823C1C1Ev();
extern void _ZN7S1823C1D1Ev();
Name_Map name_map_S1823C1[] = {
  NSPAIR(_ZN7S1823C1C1Ev),
  NSPAIR(_ZN7S1823C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1823C3;
extern VTBL_ENTRY _ZTI7S1823C3[];
extern  VTBL_ENTRY _ZTV7S1823C3[];
extern Class_Descriptor cd_S1823C2;
extern VTBL_ENTRY _ZTI7S1823C2[];
extern  VTBL_ENTRY _ZTV7S1823C2[];
static Base_Class bases_S1823C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1823C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1823C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1823C1[];
extern void _ZN7S1823C1D1Ev();
extern void _ZN7S1823C1D0Ev();
extern void _ZN7S1823C32v6Ev();
extern void _ZN7S1823C32v7Ev();
extern void _ZN7S1823C32v8Ev();
extern void _ZN7S1823C32v9Ev();
extern void _ZN7S1823C33v10Ev();
extern void _ZN7S1823C33v11Ev();
extern void _ZN7S1823C33v12Ev();
extern void _ZN7S1823C33v13Ev();
extern void _ZN7S1823C33v14Ev();
extern void _ZN7S1823C33v15Ev();
extern void _ZN7S1823C33v16Ev();
extern void _ZN7S1823C33v17Ev();
extern void _ZN7S1823C33v18Ev();
extern void _ZN7S1823C33v19Ev();
extern void _ZN7S1823C33v20Ev();
extern void _ZN7S1823C33v21Ev();
extern void _ZN7S1823C33v22Ev();
extern void _ZN7S1823C33v23Ev();
extern void _ZN7S1823C33v24Ev();
extern void _ZN7S1823C33v25Ev();
extern void _ZN7S1823C33v26Ev();
extern void _ZN7S1823C33v27Ev();
extern void _ZN7S1823C33v28Ev();
extern void _ZN7S1823C33v29Ev();
extern void _ZN7S1823C33v30Ev();
extern void _ZN7S1823C33v31Ev();
extern void _ZN7S1823C33v32Ev();
extern void _ZN7S1823C33v33Ev();
extern void _ZN7S1823C33v34Ev();
extern void _ZN7S1823C33v35Ev();
extern void _ZN7S1823C33v36Ev();
extern void _ZN7S1823C33v37Ev();
extern void _ZN7S1823C33v38Ev();
extern void _ZN7S1823C33v39Ev();
extern void _ZN7S1823C33v40Ev();
extern void _ZN7S1823C33v41Ev();
extern void _ZN7S1823C33v42Ev();
extern void _ZN7S1823C33v43Ev();
extern void _ZN7S1823C33v44Ev();
extern void _ZN7S1823C33v45Ev();
extern void _ZN7S1823C33v46Ev();
extern void _ZN7S1823C33v47Ev();
extern void _ZN7S1823C33v48Ev();
extern void _ZN7S1823C23v49Ev();
extern void _ZN7S1823C23v50Ev();
extern void _ZN7S1823C23v51Ev();
extern void _ZN7S1823C23v52Ev();
extern void _ZN7S1823C12v1Ev();
extern void _ZN7S1823C12v2Ev();
extern void _ZN7S1823C12v3Ev();
extern void _ZN7S1823C12v4Ev();
extern void _ZN7S1823C12v5Ev();
static  VTBL_ENTRY vtc_S1823C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1823C1[0]),
  (VTBL_ENTRY)&_ZN7S1823C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1823C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1823C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1823C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1823C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1823C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v47Ev,
  (VTBL_ENTRY)&_ZN7S1823C33v48Ev,
  (VTBL_ENTRY)&_ZN7S1823C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1823C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1823C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1823C23v52Ev,
  (VTBL_ENTRY)&_ZN7S1823C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1823C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1823C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1823C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1823C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1823C1[];
extern  VTBL_ENTRY _ZTV7S1823C1[];
Class_Descriptor cd_S1823C1 = {  "S1823C1", // class name
  bases_S1823C1, 3,
  &(vtc_S1823C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1823C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1823C1),56, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S780C4  : S1C11_nt {
  virtual void  v3(); // _ZN6S780C42v3Ev
  virtual void  v4(); // _ZN6S780C42v4Ev
  virtual void  v5(); // _ZN6S780C42v5Ev
  virtual void  v6(); // _ZN6S780C42v6Ev
  virtual void  v7(); // _ZN6S780C42v7Ev
  virtual void  v8(); // _ZN6S780C42v8Ev
  virtual void  v9(); // _ZN6S780C42v9Ev
  virtual void  v10(); // _ZN6S780C43v10Ev
  virtual void  v11(); // _ZN6S780C43v11Ev
  virtual void  v12(); // _ZN6S780C43v12Ev
  virtual void  v13(); // _ZN6S780C43v13Ev
  virtual void  v14(); // _ZN6S780C43v14Ev
  virtual void  v15(); // _ZN6S780C43v15Ev
  virtual void  v16(); // _ZN6S780C43v16Ev
  virtual void  v17(); // _ZN6S780C43v17Ev
  virtual void  v18(); // _ZN6S780C43v18Ev
  virtual void  v19(); // _ZN6S780C43v19Ev
  virtual void  v20(); // _ZN6S780C43v20Ev
  virtual void  v21(); // _ZN6S780C43v21Ev
  virtual void  v22(); // _ZN6S780C43v22Ev
  virtual void  v23(); // _ZN6S780C43v23Ev
  virtual void  v24(); // _ZN6S780C43v24Ev
  virtual void  v25(); // _ZN6S780C43v25Ev
  virtual void  v26(); // _ZN6S780C43v26Ev
  virtual void  v27(); // _ZN6S780C43v27Ev
  virtual void  v28(); // _ZN6S780C43v28Ev
  virtual void  v29(); // _ZN6S780C43v29Ev
  virtual void  v30(); // _ZN6S780C43v30Ev
  virtual void  v31(); // _ZN6S780C43v31Ev
  virtual void  v32(); // _ZN6S780C43v32Ev
  virtual void  v33(); // _ZN6S780C43v33Ev
  virtual void  v34(); // _ZN6S780C43v34Ev
  virtual void  v35(); // _ZN6S780C43v35Ev
  virtual void  v36(); // _ZN6S780C43v36Ev
  virtual void  v37(); // _ZN6S780C43v37Ev
  virtual void  v38(); // _ZN6S780C43v38Ev
  virtual void  v39(); // _ZN6S780C43v39Ev
  virtual void  v40(); // _ZN6S780C43v40Ev
  virtual void  v41(); // _ZN6S780C43v41Ev
  virtual void  v42(); // _ZN6S780C43v42Ev
  virtual void  v43(); // _ZN6S780C43v43Ev
  virtual void  v44(); // _ZN6S780C43v44Ev
  virtual void  v45(); // _ZN6S780C43v45Ev
  ~S780C4(); // tgen
  S780C4(); // tgen
};
//SIG(-1 S780C4) C1{ BC2{ vd m Fp Fi} 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}


void  S780C4 ::v3(){vfunc_called(this, "_ZN6S780C42v3Ev");}
void  S780C4 ::v4(){vfunc_called(this, "_ZN6S780C42v4Ev");}
void  S780C4 ::v5(){vfunc_called(this, "_ZN6S780C42v5Ev");}
void  S780C4 ::v6(){vfunc_called(this, "_ZN6S780C42v6Ev");}
void  S780C4 ::v7(){vfunc_called(this, "_ZN6S780C42v7Ev");}
void  S780C4 ::v8(){vfunc_called(this, "_ZN6S780C42v8Ev");}
void  S780C4 ::v9(){vfunc_called(this, "_ZN6S780C42v9Ev");}
void  S780C4 ::v10(){vfunc_called(this, "_ZN6S780C43v10Ev");}
void  S780C4 ::v11(){vfunc_called(this, "_ZN6S780C43v11Ev");}
void  S780C4 ::v12(){vfunc_called(this, "_ZN6S780C43v12Ev");}
void  S780C4 ::v13(){vfunc_called(this, "_ZN6S780C43v13Ev");}
void  S780C4 ::v14(){vfunc_called(this, "_ZN6S780C43v14Ev");}
void  S780C4 ::v15(){vfunc_called(this, "_ZN6S780C43v15Ev");}
void  S780C4 ::v16(){vfunc_called(this, "_ZN6S780C43v16Ev");}
void  S780C4 ::v17(){vfunc_called(this, "_ZN6S780C43v17Ev");}
void  S780C4 ::v18(){vfunc_called(this, "_ZN6S780C43v18Ev");}
void  S780C4 ::v19(){vfunc_called(this, "_ZN6S780C43v19Ev");}
void  S780C4 ::v20(){vfunc_called(this, "_ZN6S780C43v20Ev");}
void  S780C4 ::v21(){vfunc_called(this, "_ZN6S780C43v21Ev");}
void  S780C4 ::v22(){vfunc_called(this, "_ZN6S780C43v22Ev");}
void  S780C4 ::v23(){vfunc_called(this, "_ZN6S780C43v23Ev");}
void  S780C4 ::v24(){vfunc_called(this, "_ZN6S780C43v24Ev");}
void  S780C4 ::v25(){vfunc_called(this, "_ZN6S780C43v25Ev");}
void  S780C4 ::v26(){vfunc_called(this, "_ZN6S780C43v26Ev");}
void  S780C4 ::v27(){vfunc_called(this, "_ZN6S780C43v27Ev");}
void  S780C4 ::v28(){vfunc_called(this, "_ZN6S780C43v28Ev");}
void  S780C4 ::v29(){vfunc_called(this, "_ZN6S780C43v29Ev");}
void  S780C4 ::v30(){vfunc_called(this, "_ZN6S780C43v30Ev");}
void  S780C4 ::v31(){vfunc_called(this, "_ZN6S780C43v31Ev");}
void  S780C4 ::v32(){vfunc_called(this, "_ZN6S780C43v32Ev");}
void  S780C4 ::v33(){vfunc_called(this, "_ZN6S780C43v33Ev");}
void  S780C4 ::v34(){vfunc_called(this, "_ZN6S780C43v34Ev");}
void  S780C4 ::v35(){vfunc_called(this, "_ZN6S780C43v35Ev");}
void  S780C4 ::v36(){vfunc_called(this, "_ZN6S780C43v36Ev");}
void  S780C4 ::v37(){vfunc_called(this, "_ZN6S780C43v37Ev");}
void  S780C4 ::v38(){vfunc_called(this, "_ZN6S780C43v38Ev");}
void  S780C4 ::v39(){vfunc_called(this, "_ZN6S780C43v39Ev");}
void  S780C4 ::v40(){vfunc_called(this, "_ZN6S780C43v40Ev");}
void  S780C4 ::v41(){vfunc_called(this, "_ZN6S780C43v41Ev");}
void  S780C4 ::v42(){vfunc_called(this, "_ZN6S780C43v42Ev");}
void  S780C4 ::v43(){vfunc_called(this, "_ZN6S780C43v43Ev");}
void  S780C4 ::v44(){vfunc_called(this, "_ZN6S780C43v44Ev");}
void  S780C4 ::v45(){vfunc_called(this, "_ZN6S780C43v45Ev");}
S780C4 ::~S780C4(){ note_dtor("S780C4", this);} // tgen
S780C4 ::S780C4(){ note_ctor("S780C4", this);} // tgen

static void Test_S780C4()
{
  extern Class_Descriptor cd_S780C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S780C4, buf);
    S780C4 *dp, &lv = *(dp=new (buf) S780C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S780C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S780C4)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S780C4");
    test_class_info(&lv, &cd_S780C4);
    dp->~S780C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS780C4(Test_S780C4, "S780C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S780C4C1Ev();
extern void _ZN6S780C4D1Ev();
Name_Map name_map_S780C4[] = {
  NSPAIR(_ZN6S780C4C1Ev),
  NSPAIR(_ZN6S780C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S780C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI6S780C4[];
extern void _ZN6S780C4D1Ev();
extern void _ZN6S780C4D0Ev();
extern void _ZN6S780C42v3Ev();
extern void _ZN6S780C42v4Ev();
extern void _ZN6S780C42v5Ev();
extern void _ZN6S780C42v6Ev();
extern void _ZN6S780C42v7Ev();
extern void _ZN6S780C42v8Ev();
extern void _ZN6S780C42v9Ev();
extern void _ZN6S780C43v10Ev();
extern void _ZN6S780C43v11Ev();
extern void _ZN6S780C43v12Ev();
extern void _ZN6S780C43v13Ev();
extern void _ZN6S780C43v14Ev();
extern void _ZN6S780C43v15Ev();
extern void _ZN6S780C43v16Ev();
extern void _ZN6S780C43v17Ev();
extern void _ZN6S780C43v18Ev();
extern void _ZN6S780C43v19Ev();
extern void _ZN6S780C43v20Ev();
extern void _ZN6S780C43v21Ev();
extern void _ZN6S780C43v22Ev();
extern void _ZN6S780C43v23Ev();
extern void _ZN6S780C43v24Ev();
extern void _ZN6S780C43v25Ev();
extern void _ZN6S780C43v26Ev();
extern void _ZN6S780C43v27Ev();
extern void _ZN6S780C43v28Ev();
extern void _ZN6S780C43v29Ev();
extern void _ZN6S780C43v30Ev();
extern void _ZN6S780C43v31Ev();
extern void _ZN6S780C43v32Ev();
extern void _ZN6S780C43v33Ev();
extern void _ZN6S780C43v34Ev();
extern void _ZN6S780C43v35Ev();
extern void _ZN6S780C43v36Ev();
extern void _ZN6S780C43v37Ev();
extern void _ZN6S780C43v38Ev();
extern void _ZN6S780C43v39Ev();
extern void _ZN6S780C43v40Ev();
extern void _ZN6S780C43v41Ev();
extern void _ZN6S780C43v42Ev();
extern void _ZN6S780C43v43Ev();
extern void _ZN6S780C43v44Ev();
extern void _ZN6S780C43v45Ev();
static  VTBL_ENTRY vtc_S780C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S780C4[0]),
  (VTBL_ENTRY)&_ZN6S780C4D1Ev,
  (VTBL_ENTRY)&_ZN6S780C4D0Ev,
  (VTBL_ENTRY)&_ZN6S780C42v3Ev,
  (VTBL_ENTRY)&_ZN6S780C42v4Ev,
  (VTBL_ENTRY)&_ZN6S780C42v5Ev,
  (VTBL_ENTRY)&_ZN6S780C42v6Ev,
  (VTBL_ENTRY)&_ZN6S780C42v7Ev,
  (VTBL_ENTRY)&_ZN6S780C42v8Ev,
  (VTBL_ENTRY)&_ZN6S780C42v9Ev,
  (VTBL_ENTRY)&_ZN6S780C43v10Ev,
  (VTBL_ENTRY)&_ZN6S780C43v11Ev,
  (VTBL_ENTRY)&_ZN6S780C43v12Ev,
  (VTBL_ENTRY)&_ZN6S780C43v13Ev,
  (VTBL_ENTRY)&_ZN6S780C43v14Ev,
  (VTBL_ENTRY)&_ZN6S780C43v15Ev,
  (VTBL_ENTRY)&_ZN6S780C43v16Ev,
  (VTBL_ENTRY)&_ZN6S780C43v17Ev,
  (VTBL_ENTRY)&_ZN6S780C43v18Ev,
  (VTBL_ENTRY)&_ZN6S780C43v19Ev,
  (VTBL_ENTRY)&_ZN6S780C43v20Ev,
  (VTBL_ENTRY)&_ZN6S780C43v21Ev,
  (VTBL_ENTRY)&_ZN6S780C43v22Ev,
  (VTBL_ENTRY)&_ZN6S780C43v23Ev,
  (VTBL_ENTRY)&_ZN6S780C43v24Ev,
  (VTBL_ENTRY)&_ZN6S780C43v25Ev,
  (VTBL_ENTRY)&_ZN6S780C43v26Ev,
  (VTBL_ENTRY)&_ZN6S780C43v27Ev,
  (VTBL_ENTRY)&_ZN6S780C43v28Ev,
  (VTBL_ENTRY)&_ZN6S780C43v29Ev,
  (VTBL_ENTRY)&_ZN6S780C43v30Ev,
  (VTBL_ENTRY)&_ZN6S780C43v31Ev,
  (VTBL_ENTRY)&_ZN6S780C43v32Ev,
  (VTBL_ENTRY)&_ZN6S780C43v33Ev,
  (VTBL_ENTRY)&_ZN6S780C43v34Ev,
  (VTBL_ENTRY)&_ZN6S780C43v35Ev,
  (VTBL_ENTRY)&_ZN6S780C43v36Ev,
  (VTBL_ENTRY)&_ZN6S780C43v37Ev,
  (VTBL_ENTRY)&_ZN6S780C43v38Ev,
  (VTBL_ENTRY)&_ZN6S780C43v39Ev,
  (VTBL_ENTRY)&_ZN6S780C43v40Ev,
  (VTBL_ENTRY)&_ZN6S780C43v41Ev,
  (VTBL_ENTRY)&_ZN6S780C43v42Ev,
  (VTBL_ENTRY)&_ZN6S780C43v43Ev,
  (VTBL_ENTRY)&_ZN6S780C43v44Ev,
  (VTBL_ENTRY)&_ZN6S780C43v45Ev,
};
extern VTBL_ENTRY _ZTI6S780C4[];
extern  VTBL_ENTRY _ZTV6S780C4[];
Class_Descriptor cd_S780C4 = {  "S780C4", // class name
  bases_S780C4, 1,
  &(vtc_S780C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S780C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S780C4),47, //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  S780C3  : S780C4 {
  virtual void  v46(); // _ZN6S780C33v46Ev
  virtual void  v47(); // _ZN6S780C33v47Ev
  virtual void  v48(); // _ZN6S780C33v48Ev
  virtual void  v49(); // _ZN6S780C33v49Ev
  ~S780C3(); // tgen
  S780C3(); // tgen
};
//SIG(-1 S780C3) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4}


void  S780C3 ::v46(){vfunc_called(this, "_ZN6S780C33v46Ev");}
void  S780C3 ::v47(){vfunc_called(this, "_ZN6S780C33v47Ev");}
void  S780C3 ::v48(){vfunc_called(this, "_ZN6S780C33v48Ev");}
void  S780C3 ::v49(){vfunc_called(this, "_ZN6S780C33v49Ev");}
S780C3 ::~S780C3(){ note_dtor("S780C3", this);} // tgen
S780C3 ::S780C3(){ note_ctor("S780C3", this);} // tgen

static void Test_S780C3()
{
  extern Class_Descriptor cd_S780C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S780C3, buf);
    S780C3 *dp, &lv = *(dp=new (buf) S780C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S780C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S780C3)");
    check_base_class_offset(lv, (S1C11_nt*)(S780C4*), 0, "S780C3");
    check_base_class_offset(lv, (S780C4*), 0, "S780C3");
    test_class_info(&lv, &cd_S780C3);
    dp->~S780C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS780C3(Test_S780C3, "S780C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S780C3C1Ev();
extern void _ZN6S780C3D1Ev();
Name_Map name_map_S780C3[] = {
  NSPAIR(_ZN6S780C3C1Ev),
  NSPAIR(_ZN6S780C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S780C4;
extern VTBL_ENTRY _ZTI6S780C4[];
extern  VTBL_ENTRY _ZTV6S780C4[];
static Base_Class bases_S780C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S780C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S780C3[];
extern void _ZN6S780C3D1Ev();
extern void _ZN6S780C3D0Ev();
extern void _ZN6S780C42v3Ev();
extern void _ZN6S780C42v4Ev();
extern void _ZN6S780C42v5Ev();
extern void _ZN6S780C42v6Ev();
extern void _ZN6S780C42v7Ev();
extern void _ZN6S780C42v8Ev();
extern void _ZN6S780C42v9Ev();
extern void _ZN6S780C43v10Ev();
extern void _ZN6S780C43v11Ev();
extern void _ZN6S780C43v12Ev();
extern void _ZN6S780C43v13Ev();
extern void _ZN6S780C43v14Ev();
extern void _ZN6S780C43v15Ev();
extern void _ZN6S780C43v16Ev();
extern void _ZN6S780C43v17Ev();
extern void _ZN6S780C43v18Ev();
extern void _ZN6S780C43v19Ev();
extern void _ZN6S780C43v20Ev();
extern void _ZN6S780C43v21Ev();
extern void _ZN6S780C43v22Ev();
extern void _ZN6S780C43v23Ev();
extern void _ZN6S780C43v24Ev();
extern void _ZN6S780C43v25Ev();
extern void _ZN6S780C43v26Ev();
extern void _ZN6S780C43v27Ev();
extern void _ZN6S780C43v28Ev();
extern void _ZN6S780C43v29Ev();
extern void _ZN6S780C43v30Ev();
extern void _ZN6S780C43v31Ev();
extern void _ZN6S780C43v32Ev();
extern void _ZN6S780C43v33Ev();
extern void _ZN6S780C43v34Ev();
extern void _ZN6S780C43v35Ev();
extern void _ZN6S780C43v36Ev();
extern void _ZN6S780C43v37Ev();
extern void _ZN6S780C43v38Ev();
extern void _ZN6S780C43v39Ev();
extern void _ZN6S780C43v40Ev();
extern void _ZN6S780C43v41Ev();
extern void _ZN6S780C43v42Ev();
extern void _ZN6S780C43v43Ev();
extern void _ZN6S780C43v44Ev();
extern void _ZN6S780C43v45Ev();
extern void _ZN6S780C33v46Ev();
extern void _ZN6S780C33v47Ev();
extern void _ZN6S780C33v48Ev();
extern void _ZN6S780C33v49Ev();
static  VTBL_ENTRY vtc_S780C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S780C3[0]),
  (VTBL_ENTRY)&_ZN6S780C3D1Ev,
  (VTBL_ENTRY)&_ZN6S780C3D0Ev,
  (VTBL_ENTRY)&_ZN6S780C42v3Ev,
  (VTBL_ENTRY)&_ZN6S780C42v4Ev,
  (VTBL_ENTRY)&_ZN6S780C42v5Ev,
  (VTBL_ENTRY)&_ZN6S780C42v6Ev,
  (VTBL_ENTRY)&_ZN6S780C42v7Ev,
  (VTBL_ENTRY)&_ZN6S780C42v8Ev,
  (VTBL_ENTRY)&_ZN6S780C42v9Ev,
  (VTBL_ENTRY)&_ZN6S780C43v10Ev,
  (VTBL_ENTRY)&_ZN6S780C43v11Ev,
  (VTBL_ENTRY)&_ZN6S780C43v12Ev,
  (VTBL_ENTRY)&_ZN6S780C43v13Ev,
  (VTBL_ENTRY)&_ZN6S780C43v14Ev,
  (VTBL_ENTRY)&_ZN6S780C43v15Ev,
  (VTBL_ENTRY)&_ZN6S780C43v16Ev,
  (VTBL_ENTRY)&_ZN6S780C43v17Ev,
  (VTBL_ENTRY)&_ZN6S780C43v18Ev,
  (VTBL_ENTRY)&_ZN6S780C43v19Ev,
  (VTBL_ENTRY)&_ZN6S780C43v20Ev,
  (VTBL_ENTRY)&_ZN6S780C43v21Ev,
  (VTBL_ENTRY)&_ZN6S780C43v22Ev,
  (VTBL_ENTRY)&_ZN6S780C43v23Ev,
  (VTBL_ENTRY)&_ZN6S780C43v24Ev,
  (VTBL_ENTRY)&_ZN6S780C43v25Ev,
  (VTBL_ENTRY)&_ZN6S780C43v26Ev,
  (VTBL_ENTRY)&_ZN6S780C43v27Ev,
  (VTBL_ENTRY)&_ZN6S780C43v28Ev,
  (VTBL_ENTRY)&_ZN6S780C43v29Ev,
  (VTBL_ENTRY)&_ZN6S780C43v30Ev,
  (VTBL_ENTRY)&_ZN6S780C43v31Ev,
  (VTBL_ENTRY)&_ZN6S780C43v32Ev,
  (VTBL_ENTRY)&_ZN6S780C43v33Ev,
  (VTBL_ENTRY)&_ZN6S780C43v34Ev,
  (VTBL_ENTRY)&_ZN6S780C43v35Ev,
  (VTBL_ENTRY)&_ZN6S780C43v36Ev,
  (VTBL_ENTRY)&_ZN6S780C43v37Ev,
  (VTBL_ENTRY)&_ZN6S780C43v38Ev,
  (VTBL_ENTRY)&_ZN6S780C43v39Ev,
  (VTBL_ENTRY)&_ZN6S780C43v40Ev,
  (VTBL_ENTRY)&_ZN6S780C43v41Ev,
  (VTBL_ENTRY)&_ZN6S780C43v42Ev,
  (VTBL_ENTRY)&_ZN6S780C43v43Ev,
  (VTBL_ENTRY)&_ZN6S780C43v44Ev,
  (VTBL_ENTRY)&_ZN6S780C43v45Ev,
  (VTBL_ENTRY)&_ZN6S780C33v46Ev,
  (VTBL_ENTRY)&_ZN6S780C33v47Ev,
  (VTBL_ENTRY)&_ZN6S780C33v48Ev,
  (VTBL_ENTRY)&_ZN6S780C33v49Ev,
};
extern VTBL_ENTRY _ZTI6S780C3[];
extern  VTBL_ENTRY _ZTV6S780C3[];
Class_Descriptor cd_S780C3 = {  "S780C3", // class name
  bases_S780C3, 2,
  &(vtc_S780C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S780C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S780C3),51, //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  S780C2  : S780C3 {
  virtual void  v50(); // _ZN6S780C23v50Ev
  ~S780C2(); // tgen
  S780C2(); // tgen
};
//SIG(-1 S780C2) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1}


void  S780C2 ::v50(){vfunc_called(this, "_ZN6S780C23v50Ev");}
S780C2 ::~S780C2(){ note_dtor("S780C2", this);} // tgen
S780C2 ::S780C2(){ note_ctor("S780C2", this);} // tgen

static void Test_S780C2()
{
  extern Class_Descriptor cd_S780C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S780C2, buf);
    S780C2 *dp, &lv = *(dp=new (buf) S780C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S780C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S780C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S780C4*)(S780C3*), 0, "S780C2");
    check_base_class_offset(lv, (S780C4*)(S780C3*), 0, "S780C2");
    check_base_class_offset(lv, (S780C3*), 0, "S780C2");
    test_class_info(&lv, &cd_S780C2);
    dp->~S780C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS780C2(Test_S780C2, "S780C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S780C2C1Ev();
extern void _ZN6S780C2D1Ev();
Name_Map name_map_S780C2[] = {
  NSPAIR(_ZN6S780C2C1Ev),
  NSPAIR(_ZN6S780C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S780C4;
extern VTBL_ENTRY _ZTI6S780C4[];
extern  VTBL_ENTRY _ZTV6S780C4[];
extern Class_Descriptor cd_S780C3;
extern VTBL_ENTRY _ZTI6S780C3[];
extern  VTBL_ENTRY _ZTV6S780C3[];
static Base_Class bases_S780C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S780C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S780C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S780C2[];
extern void _ZN6S780C2D1Ev();
extern void _ZN6S780C2D0Ev();
extern void _ZN6S780C42v3Ev();
extern void _ZN6S780C42v4Ev();
extern void _ZN6S780C42v5Ev();
extern void _ZN6S780C42v6Ev();
extern void _ZN6S780C42v7Ev();
extern void _ZN6S780C42v8Ev();
extern void _ZN6S780C42v9Ev();
extern void _ZN6S780C43v10Ev();
extern void _ZN6S780C43v11Ev();
extern void _ZN6S780C43v12Ev();
extern void _ZN6S780C43v13Ev();
extern void _ZN6S780C43v14Ev();
extern void _ZN6S780C43v15Ev();
extern void _ZN6S780C43v16Ev();
extern void _ZN6S780C43v17Ev();
extern void _ZN6S780C43v18Ev();
extern void _ZN6S780C43v19Ev();
extern void _ZN6S780C43v20Ev();
extern void _ZN6S780C43v21Ev();
extern void _ZN6S780C43v22Ev();
extern void _ZN6S780C43v23Ev();
extern void _ZN6S780C43v24Ev();
extern void _ZN6S780C43v25Ev();
extern void _ZN6S780C43v26Ev();
extern void _ZN6S780C43v27Ev();
extern void _ZN6S780C43v28Ev();
extern void _ZN6S780C43v29Ev();
extern void _ZN6S780C43v30Ev();
extern void _ZN6S780C43v31Ev();
extern void _ZN6S780C43v32Ev();
extern void _ZN6S780C43v33Ev();
extern void _ZN6S780C43v34Ev();
extern void _ZN6S780C43v35Ev();
extern void _ZN6S780C43v36Ev();
extern void _ZN6S780C43v37Ev();
extern void _ZN6S780C43v38Ev();
extern void _ZN6S780C43v39Ev();
extern void _ZN6S780C43v40Ev();
extern void _ZN6S780C43v41Ev();
extern void _ZN6S780C43v42Ev();
extern void _ZN6S780C43v43Ev();
extern void _ZN6S780C43v44Ev();
extern void _ZN6S780C43v45Ev();
extern void _ZN6S780C33v46Ev();
extern void _ZN6S780C33v47Ev();
extern void _ZN6S780C33v48Ev();
extern void _ZN6S780C33v49Ev();
extern void _ZN6S780C23v50Ev();
static  VTBL_ENTRY vtc_S780C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S780C2[0]),
  (VTBL_ENTRY)&_ZN6S780C2D1Ev,
  (VTBL_ENTRY)&_ZN6S780C2D0Ev,
  (VTBL_ENTRY)&_ZN6S780C42v3Ev,
  (VTBL_ENTRY)&_ZN6S780C42v4Ev,
  (VTBL_ENTRY)&_ZN6S780C42v5Ev,
  (VTBL_ENTRY)&_ZN6S780C42v6Ev,
  (VTBL_ENTRY)&_ZN6S780C42v7Ev,
  (VTBL_ENTRY)&_ZN6S780C42v8Ev,
  (VTBL_ENTRY)&_ZN6S780C42v9Ev,
  (VTBL_ENTRY)&_ZN6S780C43v10Ev,
  (VTBL_ENTRY)&_ZN6S780C43v11Ev,
  (VTBL_ENTRY)&_ZN6S780C43v12Ev,
  (VTBL_ENTRY)&_ZN6S780C43v13Ev,
  (VTBL_ENTRY)&_ZN6S780C43v14Ev,
  (VTBL_ENTRY)&_ZN6S780C43v15Ev,
  (VTBL_ENTRY)&_ZN6S780C43v16Ev,
  (VTBL_ENTRY)&_ZN6S780C43v17Ev,
  (VTBL_ENTRY)&_ZN6S780C43v18Ev,
  (VTBL_ENTRY)&_ZN6S780C43v19Ev,
  (VTBL_ENTRY)&_ZN6S780C43v20Ev,
  (VTBL_ENTRY)&_ZN6S780C43v21Ev,
  (VTBL_ENTRY)&_ZN6S780C43v22Ev,
  (VTBL_ENTRY)&_ZN6S780C43v23Ev,
  (VTBL_ENTRY)&_ZN6S780C43v24Ev,
  (VTBL_ENTRY)&_ZN6S780C43v25Ev,
  (VTBL_ENTRY)&_ZN6S780C43v26Ev,
  (VTBL_ENTRY)&_ZN6S780C43v27Ev,
  (VTBL_ENTRY)&_ZN6S780C43v28Ev,
  (VTBL_ENTRY)&_ZN6S780C43v29Ev,
  (VTBL_ENTRY)&_ZN6S780C43v30Ev,
  (VTBL_ENTRY)&_ZN6S780C43v31Ev,
  (VTBL_ENTRY)&_ZN6S780C43v32Ev,
  (VTBL_ENTRY)&_ZN6S780C43v33Ev,
  (VTBL_ENTRY)&_ZN6S780C43v34Ev,
  (VTBL_ENTRY)&_ZN6S780C43v35Ev,
  (VTBL_ENTRY)&_ZN6S780C43v36Ev,
  (VTBL_ENTRY)&_ZN6S780C43v37Ev,
  (VTBL_ENTRY)&_ZN6S780C43v38Ev,
  (VTBL_ENTRY)&_ZN6S780C43v39Ev,
  (VTBL_ENTRY)&_ZN6S780C43v40Ev,
  (VTBL_ENTRY)&_ZN6S780C43v41Ev,
  (VTBL_ENTRY)&_ZN6S780C43v42Ev,
  (VTBL_ENTRY)&_ZN6S780C43v43Ev,
  (VTBL_ENTRY)&_ZN6S780C43v44Ev,
  (VTBL_ENTRY)&_ZN6S780C43v45Ev,
  (VTBL_ENTRY)&_ZN6S780C33v46Ev,
  (VTBL_ENTRY)&_ZN6S780C33v47Ev,
  (VTBL_ENTRY)&_ZN6S780C33v48Ev,
  (VTBL_ENTRY)&_ZN6S780C33v49Ev,
  (VTBL_ENTRY)&_ZN6S780C23v50Ev,
};
extern VTBL_ENTRY _ZTI6S780C2[];
extern  VTBL_ENTRY _ZTV6S780C2[];
Class_Descriptor cd_S780C2 = {  "S780C2", // class name
  bases_S780C2, 3,
  &(vtc_S780C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S780C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S780C2),52, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S780C1  : S780C2 {
  virtual void  v1(); // _ZN6S780C12v1Ev
  virtual void  v2(); // _ZN6S780C12v2Ev
  ~S780C1(); // tgen
  S780C1(); // tgen
};
//SIG(1 S780C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m Fp Fi} 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} v1 v2}


void  S780C1 ::v1(){vfunc_called(this, "_ZN6S780C12v1Ev");}
void  S780C1 ::v2(){vfunc_called(this, "_ZN6S780C12v2Ev");}
S780C1 ::~S780C1(){ note_dtor("S780C1", this);} // tgen
S780C1 ::S780C1(){ note_ctor("S780C1", this);} // tgen

static void Test_S780C1()
{
  extern Class_Descriptor cd_S780C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S780C1, buf);
    S780C1 *dp, &lv = *(dp=new (buf) S780C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S780C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S780C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S780C4*)(S780C3*)(S780C2*), 0, "S780C1");
    check_base_class_offset(lv, (S780C4*)(S780C3*)(S780C2*), 0, "S780C1");
    check_base_class_offset(lv, (S780C3*)(S780C2*), 0, "S780C1");
    check_base_class_offset(lv, (S780C2*), 0, "S780C1");
    test_class_info(&lv, &cd_S780C1);
    dp->~S780C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS780C1(Test_S780C1, "S780C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S780C1C1Ev();
extern void _ZN6S780C1D1Ev();
Name_Map name_map_S780C1[] = {
  NSPAIR(_ZN6S780C1C1Ev),
  NSPAIR(_ZN6S780C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S780C4;
extern VTBL_ENTRY _ZTI6S780C4[];
extern  VTBL_ENTRY _ZTV6S780C4[];
extern Class_Descriptor cd_S780C3;
extern VTBL_ENTRY _ZTI6S780C3[];
extern  VTBL_ENTRY _ZTV6S780C3[];
extern Class_Descriptor cd_S780C2;
extern VTBL_ENTRY _ZTI6S780C2[];
extern  VTBL_ENTRY _ZTV6S780C2[];
static Base_Class bases_S780C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S780C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S780C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S780C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S780C1[];
extern void _ZN6S780C1D1Ev();
extern void _ZN6S780C1D0Ev();
extern void _ZN6S780C42v3Ev();
extern void _ZN6S780C42v4Ev();
extern void _ZN6S780C42v5Ev();
extern void _ZN6S780C42v6Ev();
extern void _ZN6S780C42v7Ev();
extern void _ZN6S780C42v8Ev();
extern void _ZN6S780C42v9Ev();
extern void _ZN6S780C43v10Ev();
extern void _ZN6S780C43v11Ev();
extern void _ZN6S780C43v12Ev();
extern void _ZN6S780C43v13Ev();
extern void _ZN6S780C43v14Ev();
extern void _ZN6S780C43v15Ev();
extern void _ZN6S780C43v16Ev();
extern void _ZN6S780C43v17Ev();
extern void _ZN6S780C43v18Ev();
extern void _ZN6S780C43v19Ev();
extern void _ZN6S780C43v20Ev();
extern void _ZN6S780C43v21Ev();
extern void _ZN6S780C43v22Ev();
extern void _ZN6S780C43v23Ev();
extern void _ZN6S780C43v24Ev();
extern void _ZN6S780C43v25Ev();
extern void _ZN6S780C43v26Ev();
extern void _ZN6S780C43v27Ev();
extern void _ZN6S780C43v28Ev();
extern void _ZN6S780C43v29Ev();
extern void _ZN6S780C43v30Ev();
extern void _ZN6S780C43v31Ev();
extern void _ZN6S780C43v32Ev();
extern void _ZN6S780C43v33Ev();
extern void _ZN6S780C43v34Ev();
extern void _ZN6S780C43v35Ev();
extern void _ZN6S780C43v36Ev();
extern void _ZN6S780C43v37Ev();
extern void _ZN6S780C43v38Ev();
extern void _ZN6S780C43v39Ev();
extern void _ZN6S780C43v40Ev();
extern void _ZN6S780C43v41Ev();
extern void _ZN6S780C43v42Ev();
extern void _ZN6S780C43v43Ev();
extern void _ZN6S780C43v44Ev();
extern void _ZN6S780C43v45Ev();
extern void _ZN6S780C33v46Ev();
extern void _ZN6S780C33v47Ev();
extern void _ZN6S780C33v48Ev();
extern void _ZN6S780C33v49Ev();
extern void _ZN6S780C23v50Ev();
extern void _ZN6S780C12v1Ev();
extern void _ZN6S780C12v2Ev();
static  VTBL_ENTRY vtc_S780C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S780C1[0]),
  (VTBL_ENTRY)&_ZN6S780C1D1Ev,
  (VTBL_ENTRY)&_ZN6S780C1D0Ev,
  (VTBL_ENTRY)&_ZN6S780C42v3Ev,
  (VTBL_ENTRY)&_ZN6S780C42v4Ev,
  (VTBL_ENTRY)&_ZN6S780C42v5Ev,
  (VTBL_ENTRY)&_ZN6S780C42v6Ev,
  (VTBL_ENTRY)&_ZN6S780C42v7Ev,
  (VTBL_ENTRY)&_ZN6S780C42v8Ev,
  (VTBL_ENTRY)&_ZN6S780C42v9Ev,
  (VTBL_ENTRY)&_ZN6S780C43v10Ev,
  (VTBL_ENTRY)&_ZN6S780C43v11Ev,
  (VTBL_ENTRY)&_ZN6S780C43v12Ev,
  (VTBL_ENTRY)&_ZN6S780C43v13Ev,
  (VTBL_ENTRY)&_ZN6S780C43v14Ev,
  (VTBL_ENTRY)&_ZN6S780C43v15Ev,
  (VTBL_ENTRY)&_ZN6S780C43v16Ev,
  (VTBL_ENTRY)&_ZN6S780C43v17Ev,
  (VTBL_ENTRY)&_ZN6S780C43v18Ev,
  (VTBL_ENTRY)&_ZN6S780C43v19Ev,
  (VTBL_ENTRY)&_ZN6S780C43v20Ev,
  (VTBL_ENTRY)&_ZN6S780C43v21Ev,
  (VTBL_ENTRY)&_ZN6S780C43v22Ev,
  (VTBL_ENTRY)&_ZN6S780C43v23Ev,
  (VTBL_ENTRY)&_ZN6S780C43v24Ev,
  (VTBL_ENTRY)&_ZN6S780C43v25Ev,
  (VTBL_ENTRY)&_ZN6S780C43v26Ev,
  (VTBL_ENTRY)&_ZN6S780C43v27Ev,
  (VTBL_ENTRY)&_ZN6S780C43v28Ev,
  (VTBL_ENTRY)&_ZN6S780C43v29Ev,
  (VTBL_ENTRY)&_ZN6S780C43v30Ev,
  (VTBL_ENTRY)&_ZN6S780C43v31Ev,
  (VTBL_ENTRY)&_ZN6S780C43v32Ev,
  (VTBL_ENTRY)&_ZN6S780C43v33Ev,
  (VTBL_ENTRY)&_ZN6S780C43v34Ev,
  (VTBL_ENTRY)&_ZN6S780C43v35Ev,
  (VTBL_ENTRY)&_ZN6S780C43v36Ev,
  (VTBL_ENTRY)&_ZN6S780C43v37Ev,
  (VTBL_ENTRY)&_ZN6S780C43v38Ev,
  (VTBL_ENTRY)&_ZN6S780C43v39Ev,
  (VTBL_ENTRY)&_ZN6S780C43v40Ev,
  (VTBL_ENTRY)&_ZN6S780C43v41Ev,
  (VTBL_ENTRY)&_ZN6S780C43v42Ev,
  (VTBL_ENTRY)&_ZN6S780C43v43Ev,
  (VTBL_ENTRY)&_ZN6S780C43v44Ev,
  (VTBL_ENTRY)&_ZN6S780C43v45Ev,
  (VTBL_ENTRY)&_ZN6S780C33v46Ev,
  (VTBL_ENTRY)&_ZN6S780C33v47Ev,
  (VTBL_ENTRY)&_ZN6S780C33v48Ev,
  (VTBL_ENTRY)&_ZN6S780C33v49Ev,
  (VTBL_ENTRY)&_ZN6S780C23v50Ev,
  (VTBL_ENTRY)&_ZN6S780C12v1Ev,
  (VTBL_ENTRY)&_ZN6S780C12v2Ev,
};
extern VTBL_ENTRY _ZTI6S780C1[];
extern  VTBL_ENTRY _ZTV6S780C1[];
Class_Descriptor cd_S780C1 = {  "S780C1", // class name
  bases_S780C1, 4,
  &(vtc_S780C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S780C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S780C1),54, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20170C2  {
  virtual void  v3(); // _ZN8S20170C22v3Ev
  ~S20170C2(); // tgen
  S20170C2(); // tgen
};
//SIG(-1 S20170C2) C1{ v1}


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

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

#else // __cplusplus

extern void _ZN8S20170C2C1Ev();
extern void _ZN8S20170C2D1Ev();
Name_Map name_map_S20170C2[] = {
  NSPAIR(_ZN8S20170C2C1Ev),
  NSPAIR(_ZN8S20170C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20170C2[];
extern void _ZN8S20170C22v3Ev();
static  VTBL_ENTRY vtc_S20170C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C2[0]),
  (VTBL_ENTRY)&_ZN8S20170C22v3Ev,
};
extern VTBL_ENTRY _ZTI8S20170C2[];
extern  VTBL_ENTRY _ZTV8S20170C2[];
Class_Descriptor cd_S20170C2 = {  "S20170C2", // class name
  0,0,//no base classes
  &(vtc_S20170C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20170C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20170C2),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  S20170C3  {
  long double s20170c3f0;
  void *s20170c3f1;
  virtual void  v8(); // _ZN8S20170C32v8Ev
  virtual void  v9(); // _ZN8S20170C32v9Ev
  virtual void  v10(); // _ZN8S20170C33v10Ev
  virtual void  v11(); // _ZN8S20170C33v11Ev
  virtual void  v12(); // _ZN8S20170C33v12Ev
  virtual void  v13(); // _ZN8S20170C33v13Ev
  virtual void  v14(); // _ZN8S20170C33v14Ev
  ~S20170C3(); // tgen
  S20170C3(); // tgen
};
//SIG(-1 S20170C3) C1{ v1 v2 v3 v4 v5 v6 v7 FD Fp}


void  S20170C3 ::v8(){vfunc_called(this, "_ZN8S20170C32v8Ev");}
void  S20170C3 ::v9(){vfunc_called(this, "_ZN8S20170C32v9Ev");}
void  S20170C3 ::v10(){vfunc_called(this, "_ZN8S20170C33v10Ev");}
void  S20170C3 ::v11(){vfunc_called(this, "_ZN8S20170C33v11Ev");}
void  S20170C3 ::v12(){vfunc_called(this, "_ZN8S20170C33v12Ev");}
void  S20170C3 ::v13(){vfunc_called(this, "_ZN8S20170C33v13Ev");}
void  S20170C3 ::v14(){vfunc_called(this, "_ZN8S20170C33v14Ev");}
S20170C3 ::~S20170C3(){ note_dtor("S20170C3", this);} // tgen
S20170C3 ::S20170C3(){ note_ctor("S20170C3", this);} // tgen

static void Test_S20170C3()
{
  extern Class_Descriptor cd_S20170C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,6)];
    init_test(&cd_S20170C3, buf);
    S20170C3 *dp, &lv = *(dp=new (buf) S20170C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,20), "sizeof(S20170C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20170C3)");
    check_field_offset(lv, s20170c3f0, ABISELECT(16,4), "S20170C3.s20170c3f0");
    check_field_offset(lv, s20170c3f1, ABISELECT(32,16), "S20170C3.s20170c3f1");
    test_class_info(&lv, &cd_S20170C3);
    dp->~S20170C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20170C3(Test_S20170C3, "S20170C3", ABISELECT(48,20));

#else // __cplusplus

extern void _ZN8S20170C3C1Ev();
extern void _ZN8S20170C3D1Ev();
Name_Map name_map_S20170C3[] = {
  NSPAIR(_ZN8S20170C3C1Ev),
  NSPAIR(_ZN8S20170C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20170C3[];
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
static  VTBL_ENTRY vtc_S20170C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C3[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
};
extern VTBL_ENTRY _ZTI8S20170C3[];
extern  VTBL_ENTRY _ZTV8S20170C3[];
Class_Descriptor cd_S20170C3 = {  "S20170C3", // class name
  0,0,//no base classes
  &(vtc_S20170C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,20), // object size
  NSPAIRA(_ZTI8S20170C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20170C3),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  S20170C5  {
  virtual void  v4(); // _ZN8S20170C52v4Ev
  virtual void  v5(); // _ZN8S20170C52v5Ev
  virtual void  v6(); // _ZN8S20170C52v6Ev
  virtual void  v7(); // _ZN8S20170C52v7Ev
  ~S20170C5(); // tgen
  S20170C5(); // tgen
};
//SIG(-1 S20170C5) C1{ v1 v2 v3 v4}


void  S20170C5 ::v4(){vfunc_called(this, "_ZN8S20170C52v4Ev");}
void  S20170C5 ::v5(){vfunc_called(this, "_ZN8S20170C52v5Ev");}
void  S20170C5 ::v6(){vfunc_called(this, "_ZN8S20170C52v6Ev");}
void  S20170C5 ::v7(){vfunc_called(this, "_ZN8S20170C52v7Ev");}
S20170C5 ::~S20170C5(){ note_dtor("S20170C5", this);} // tgen
S20170C5 ::S20170C5(){ note_ctor("S20170C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20170C5C1Ev();
extern void _ZN8S20170C5D1Ev();
Name_Map name_map_S20170C5[] = {
  NSPAIR(_ZN8S20170C5C1Ev),
  NSPAIR(_ZN8S20170C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20170C5[];
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
static  VTBL_ENTRY vtc_S20170C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C5[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
};
extern VTBL_ENTRY _ZTI8S20170C5[];
extern  VTBL_ENTRY _ZTV8S20170C5[];
Class_Descriptor cd_S20170C5 = {  "S20170C5", // class name
  0,0,//no base classes
  &(vtc_S20170C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20170C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20170C5),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  S20170C7  : virtual S20170C5 , S20170C3 {
  virtual  ~S20170C7(); // _ZN8S20170C7D2Ev
  virtual void  v15(); // _ZN8S20170C73v15Ev
  virtual void  v16(); // _ZN8S20170C73v16Ev
  virtual void  v17(); // _ZN8S20170C73v17Ev
  S20170C7(); // tgen
};
//SIG(-1 S20170C7) C1{ VBC2{ v4 v5 v6 v7} BC3{ v8 v9 v10 v11 v12 v13 v14 FD Fp} vd v1 v2 v3}


 S20170C7 ::~S20170C7(){ note_dtor("S20170C7", this);}
void  S20170C7 ::v15(){vfunc_called(this, "_ZN8S20170C73v15Ev");}
void  S20170C7 ::v16(){vfunc_called(this, "_ZN8S20170C73v16Ev");}
void  S20170C7 ::v17(){vfunc_called(this, "_ZN8S20170C73v17Ev");}
S20170C7 ::S20170C7(){ note_ctor("S20170C7", this);} // tgen

static void Test_S20170C7()
{
  extern Class_Descriptor cd_S20170C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S20170C7, buf);
    S20170C7 *dp, &lv = *(dp=new (buf) S20170C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20170C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20170C7)");
    check_base_class_offset(lv, (S20170C5*), ABISELECT(40,20), "S20170C7");
    check_base_class_offset(lv, (S20170C3*), 0, "S20170C7");
    test_class_info(&lv, &cd_S20170C7);
    dp->~S20170C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20170C7(Test_S20170C7, "S20170C7", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20170C7C1Ev();
extern void _ZN8S20170C7D2Ev();
Name_Map name_map_S20170C7[] = {
  NSPAIR(_ZN8S20170C7C1Ev),
  NSPAIR(_ZN8S20170C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20170C5;
extern VTBL_ENTRY _ZTI8S20170C5[];
extern  VTBL_ENTRY _ZTV8S20170C5[];
extern Class_Descriptor cd_S20170C3;
extern VTBL_ENTRY _ZTI8S20170C3[];
extern  VTBL_ENTRY _ZTV8S20170C3[];
static Base_Class bases_S20170C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20170C5,    ABISELECT(40,20), //bcp->offset
    15, //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_S20170C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20170C7[];
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void _ZN8S20170C7D1Ev();
extern void _ZN8S20170C7D0Ev();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
static  VTBL_ENTRY vtc_S20170C7[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
};
extern VTBL_ENTRY _ZTV8S20170C7[];
static  VTT_ENTRY vtt_S20170C7[] = {
  {&(_ZTV8S20170C7[3]),  3,25},
  {&(_ZTV8S20170C7[21]),  21,25},
};
extern VTBL_ENTRY _ZTI8S20170C7[];
extern  VTBL_ENTRY _ZTV8S20170C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C7[];
Class_Descriptor cd_S20170C7 = {  "S20170C7", // class name
  bases_S20170C7, 2,
  &(vtc_S20170C7[0]), // expected_vtbl_contents
  &(vtt_S20170C7[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20170C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20170C7),25, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20170C7),2, //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  S20170C6  : virtual S20170C7 {
  int s20170c6f0;
  __tsi64 s20170c6f1;
  virtual void  v18(); // _ZN8S20170C63v18Ev
  virtual void  v19(); // _ZN8S20170C63v19Ev
  virtual void  v20(); // _ZN8S20170C63v20Ev
  ~S20170C6(); // tgen
  S20170C6(); // tgen
};
//SIG(-1 S20170C6) C1{ VBC2{ VBC3{ v4 v5 v6 v7} BC4{ v8 v9 v10 v11 v12 v13 v14 FD Fp} vd v15 v16 v17} v1 v2 v3 Fi FL}


void  S20170C6 ::v18(){vfunc_called(this, "_ZN8S20170C63v18Ev");}
void  S20170C6 ::v19(){vfunc_called(this, "_ZN8S20170C63v19Ev");}
void  S20170C6 ::v20(){vfunc_called(this, "_ZN8S20170C63v20Ev");}
S20170C6 ::~S20170C6(){ note_dtor("S20170C6", this);} // tgen
S20170C6 ::S20170C6(){ note_ctor("S20170C6", this);} // tgen

static void Test_S20170C6()
{
  extern Class_Descriptor cd_S20170C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,10)];
    init_test(&cd_S20170C6, buf);
    S20170C6 *dp, &lv = *(dp=new (buf) S20170C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,36), "sizeof(S20170C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20170C6)");
    check_base_class_offset(lv, (S20170C5*)(S20170C7*), 0, "S20170C6");
    check_base_class_offset(lv, (S20170C3*)(S20170C7*), ABISELECT(32,16), "S20170C6");
    check_base_class_offset(lv, (S20170C7*), ABISELECT(32,16), "S20170C6");
    check_field_offset(lv, s20170c6f0, ABISELECT(8,4), "S20170C6.s20170c6f0");
    check_field_offset(lv, s20170c6f1, ABISELECT(16,8), "S20170C6.s20170c6f1");
    test_class_info(&lv, &cd_S20170C6);
    dp->~S20170C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20170C6(Test_S20170C6, "S20170C6", ABISELECT(80,36));

#else // __cplusplus

extern void _ZN8S20170C6C1Ev();
extern void _ZN8S20170C6D1Ev();
Name_Map name_map_S20170C6[] = {
  NSPAIR(_ZN8S20170C6C1Ev),
  NSPAIR(_ZN8S20170C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20170C5;
extern VTBL_ENTRY _ZTI8S20170C5[];
extern  VTBL_ENTRY _ZTV8S20170C5[];
extern Class_Descriptor cd_S20170C3;
extern VTBL_ENTRY _ZTI8S20170C3[];
extern  VTBL_ENTRY _ZTV8S20170C3[];
extern Class_Descriptor cd_S20170C7;
extern VTBL_ENTRY _ZTI8S20170C7[];
extern  VTBL_ENTRY _ZTV8S20170C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C7[];
static Base_Class bases_S20170C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20170C5,    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
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20170C3,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20170C7,    ABISELECT(32,16), //bcp->offset
    17, //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 _ZTI8S20170C6[];
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
extern void _ZN8S20170C63v18Ev();
extern void _ZN8S20170C63v19Ev();
extern void _ZN8S20170C63v20Ev();
extern void _ZN8S20170C6D1Ev();
extern void _ZN8S20170C6D0Ev();
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void ABISELECT(_ZTv0_n88_N8S20170C6D1Ev,_ZTv0_n44_N8S20170C6D1Ev)();
extern void ABISELECT(_ZThn32_N8S20170C6D1Ev,_ZThn16_N8S20170C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20170C6D0Ev,_ZTv0_n44_N8S20170C6D0Ev)();
extern void ABISELECT(_ZThn32_N8S20170C6D0Ev,_ZThn16_N8S20170C6D0Ev)() __attribute__((weak));
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY vtc_S20170C6[] = {
  0,
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C6[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20170C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C6D0Ev,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20170C6[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C6D1Ev,_ZTv0_n44_N8S20170C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C6D0Ev,_ZTv0_n44_N8S20170C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern VTBL_ENTRY _ZTV8S20170C6[];
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void _ZN8S20170C7D1Ev();
extern void _ZN8S20170C7D0Ev();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C7__8S20170C6[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C5__8S20170C7__8S20170C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
};
static  VTT_ENTRY vtt_S20170C6[] = {
  {&(_ZTV8S20170C6[8]),  8,43},
  {&(_ZTV8S20170C6[31]),  31,43},
  {&(_ZTV8S20170C6[8]),  8,43},
  {&(_tg__ZTV8S20170C7__8S20170C6[3]),  3,15},
  {&(_tg__ZTV8S20170C5__8S20170C7__8S20170C6[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20170C6[];
extern  VTBL_ENTRY _ZTV8S20170C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C6[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C6D0Ev,_ZTv0_n44_N8S20170C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20170C6D0Ev,_ZThn16_N8S20170C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C6D1Ev,_ZTv0_n44_N8S20170C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20170C6D1Ev,_ZThn16_N8S20170C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20170C6 = {  "S20170C6", // class name
  bases_S20170C6, 3,
  &(vtc_S20170C6[0]), // expected_vtbl_contents
  &(vtt_S20170C6[0]), // expected_vtt_contents
  ABISELECT(80,36), // object size
  NSPAIRA(_ZTI8S20170C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20170C6),43, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20170C6),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20170C4  : virtual S20170C5 , virtual S20170C3 , S20170C6 , S20170C7 {
  virtual void  v21(); // _ZN8S20170C43v21Ev
  virtual void  v22(); // _ZN8S20170C43v22Ev
  virtual void  v23(); // _ZN8S20170C43v23Ev
  virtual void  v24(); // _ZN8S20170C43v24Ev
  virtual void  v25(); // _ZN8S20170C43v25Ev
  virtual void  v26(); // _ZN8S20170C43v26Ev
  ~S20170C4(); // tgen
  S20170C4(); // tgen
};
//SIG(-1 S20170C4) C1{ VBC2{ v7 v8 v9 v10} VBC3{ v11 v12 v13 v14 v15 v16 v17 FD Fp} BC4{ VBC5{ VBC2 BC3 vd v18 v19 v20} v21 v22 v23 Fi FL} BC5 v1 v2 v3 v4 v5 v6}


void  S20170C4 ::v21(){vfunc_called(this, "_ZN8S20170C43v21Ev");}
void  S20170C4 ::v22(){vfunc_called(this, "_ZN8S20170C43v22Ev");}
void  S20170C4 ::v23(){vfunc_called(this, "_ZN8S20170C43v23Ev");}
void  S20170C4 ::v24(){vfunc_called(this, "_ZN8S20170C43v24Ev");}
void  S20170C4 ::v25(){vfunc_called(this, "_ZN8S20170C43v25Ev");}
void  S20170C4 ::v26(){vfunc_called(this, "_ZN8S20170C43v26Ev");}
S20170C4 ::~S20170C4(){ note_dtor("S20170C4", this);} // tgen
S20170C4 ::S20170C4(){ note_ctor("S20170C4", this);} // tgen

static void Test_S20170C4()
{
  extern Class_Descriptor cd_S20170C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,20)];
    init_test(&cd_S20170C4, buf);
    S20170C4 *dp, &lv = *(dp=new (buf) S20170C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,76), "sizeof(S20170C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20170C4)");
    check_base_class_offset(lv, (S20170C5*), 0, "S20170C4");
    /*is_ambiguous_... S20170C4::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C5*)(S20170C7*), 0, "S20170C4");
    /*is_ambiguous_... S20170C4::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C5*)(S20170C7*), 0, "S20170C4");
    /*is_ambiguous_... S20170C4::S20170C3 */ AMB_check_base_class_offset(lv, (S20170C3*), ABISELECT(80,36), "S20170C4");
    /*is_ambiguous_... S20170C4::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C3*)(S20170C7*), ABISELECT(128,56), "S20170C4");
    check_base_class_offset(lv, (S20170C7*)(S20170C6*), ABISELECT(128,56), "S20170C4");
    check_base_class_offset(lv, (S20170C6*), 0, "S20170C4");
    /*is_ambiguous_... S20170C4::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C3*)(S20170C7*), ABISELECT(32,16), "S20170C4");
    /*is_ambiguous_... S20170C4::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C7*), ABISELECT(32,16), "S20170C4");
    test_class_info(&lv, &cd_S20170C4);
    dp->~S20170C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20170C4(Test_S20170C4, "S20170C4", ABISELECT(176,76));

#else // __cplusplus

extern void _ZN8S20170C4C1Ev();
extern void _ZN8S20170C4D1Ev();
Name_Map name_map_S20170C4[] = {
  NSPAIR(_ZN8S20170C4C1Ev),
  NSPAIR(_ZN8S20170C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20170C5;
extern VTBL_ENTRY _ZTI8S20170C5[];
extern  VTBL_ENTRY _ZTV8S20170C5[];
extern Class_Descriptor cd_S20170C3;
extern VTBL_ENTRY _ZTI8S20170C3[];
extern  VTBL_ENTRY _ZTV8S20170C3[];
extern Class_Descriptor cd_S20170C3;
extern VTBL_ENTRY _ZTI8S20170C3[];
extern  VTBL_ENTRY _ZTV8S20170C3[];
extern Class_Descriptor cd_S20170C7;
extern VTBL_ENTRY _ZTI8S20170C7[];
extern  VTBL_ENTRY _ZTV8S20170C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C7[];
extern Class_Descriptor cd_S20170C6;
extern VTBL_ENTRY _ZTI8S20170C6[];
extern  VTBL_ENTRY _ZTV8S20170C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C6[];
extern Class_Descriptor cd_S20170C3;
extern VTBL_ENTRY _ZTI8S20170C3[];
extern  VTBL_ENTRY _ZTV8S20170C3[];
extern Class_Descriptor cd_S20170C7;
extern VTBL_ENTRY _ZTI8S20170C7[];
extern  VTBL_ENTRY _ZTV8S20170C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C7[];
static Base_Class bases_S20170C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20170C5,    0, //bcp->offset
    -1, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20170C3,    ABISELECT(80,36), //bcp->offset
    39, //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_S20170C3,    ABISELECT(128,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
    3, //immediately_derived
  0, 0},
  {&cd_S20170C7,    ABISELECT(128,56), //bcp->offset
    55, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20170C6,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20170C3,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20170C7,    ABISELECT(32,16), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20170C4[];
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
extern void _ZN8S20170C63v18Ev();
extern void _ZN8S20170C63v19Ev();
extern void _ZN8S20170C63v20Ev();
extern void _ZN8S20170C4D1Ev();
extern void _ZN8S20170C4D0Ev();
extern void _ZN8S20170C43v21Ev();
extern void _ZN8S20170C43v22Ev();
extern void _ZN8S20170C43v23Ev();
extern void _ZN8S20170C43v24Ev();
extern void _ZN8S20170C43v25Ev();
extern void _ZN8S20170C43v26Ev();
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void ABISELECT(_ZThn32_N8S20170C4D1Ev,_ZThn16_N8S20170C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S20170C4D0Ev,_ZThn16_N8S20170C4D0Ev)();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void ABISELECT(_ZTv0_n88_N8S20170C4D1Ev,_ZTv0_n44_N8S20170C4D1Ev)();
extern void ABISELECT(_ZThn128_N8S20170C4D1Ev,_ZThn56_N8S20170C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20170C4D0Ev,_ZTv0_n44_N8S20170C4D0Ev)();
extern void ABISELECT(_ZThn128_N8S20170C4D0Ev,_ZThn56_N8S20170C4D0Ev)() __attribute__((weak));
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY vtc_S20170C4[] = {
  ABISELECT(80,36),
  0,
  ABISELECT(128,56),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C4[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20170C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v26Ev,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20170C4[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20170C4D1Ev,_ZThn16_N8S20170C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20170C4D0Ev,_ZThn16_N8S20170C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S20170C4[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  0,
  0,
  0,
  ABISELECT(-128,-56),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-56),
  ABISELECT(-128,-56),
  (VTBL_ENTRY)&(_ZTI8S20170C4[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C4D1Ev,_ZTv0_n44_N8S20170C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C4D0Ev,_ZTv0_n44_N8S20170C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern VTBL_ENTRY _ZTV8S20170C4[];
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
extern void _ZN8S20170C63v18Ev();
extern void _ZN8S20170C63v19Ev();
extern void _ZN8S20170C63v20Ev();
extern void _ZN8S20170C6D1Ev();
extern void _ZN8S20170C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C6__8S20170C4[] = {
  0,
  ABISELECT(128,56),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C6[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20170C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C6D0Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void ABISELECT(_ZTv0_n88_N8S20170C6D1Ev,_ZTv0_n44_N8S20170C6D1Ev)();
extern void ABISELECT(_ZThn128_N8S20170C6D1Ev,_ZThn56_N8S20170C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20170C6D0Ev,_ZTv0_n44_N8S20170C6D0Ev)();
extern void ABISELECT(_ZThn128_N8S20170C6D0Ev,_ZThn56_N8S20170C6D0Ev)() __attribute__((weak));
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C7__8S20170C6__8S20170C4[] = {
  0,
  0,
  0,
  ABISELECT(-128,-56),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-56),
  ABISELECT(-128,-56),
  (VTBL_ENTRY)&(_ZTI8S20170C6[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C6D1Ev,_ZTv0_n44_N8S20170C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C6D0Ev,_ZTv0_n44_N8S20170C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void _ZN8S20170C7D1Ev();
extern void _ZN8S20170C7D0Ev();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C7__A__8S20170C4[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C5__8S20170C7__A__8S20170C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void _ZN8S20170C7D1Ev();
extern void _ZN8S20170C7D0Ev();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C7__8S20170C4[] = {
  ABISELECT(-128,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C5__8S20170C7__8S20170C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(128,56),
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
};
static  VTT_ENTRY vtt_S20170C4[] = {
  {&(_ZTV8S20170C4[9]),  9,81},
  {&(_tg__ZTV8S20170C6__8S20170C4[8]),  8,17},
  {&(_tg__ZTV8S20170C7__8S20170C6__8S20170C4[14]),  14,26},
  {&(_tg__ZTV8S20170C6__8S20170C4[8]),  8,17},
  {&(_tg__ZTV8S20170C7__A__8S20170C4[3]),  3,15},
  {&(_tg__ZTV8S20170C5__8S20170C7__A__8S20170C4[6]),  6,10},
  {&(_ZTV8S20170C4[9]),  9,81},
  {&(_ZTV8S20170C4[48]),  48,81},
  {&(_ZTV8S20170C4[69]),  69,81},
  {&(_ZTV8S20170C4[27]),  27,81},
  {&(_tg__ZTV8S20170C7__8S20170C4[3]),  3,15},
  {&(_tg__ZTV8S20170C5__8S20170C7__8S20170C4[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20170C4[];
extern  VTBL_ENTRY _ZTV8S20170C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C4[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C6D0Ev,_ZTv0_n44_N8S20170C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20170C6D0Ev,_ZThn56_N8S20170C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C6D1Ev,_ZTv0_n44_N8S20170C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20170C6D1Ev,_ZThn56_N8S20170C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C4D0Ev,_ZTv0_n44_N8S20170C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20170C4D0Ev,_ZThn56_N8S20170C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C4D1Ev,_ZTv0_n44_N8S20170C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20170C4D1Ev,_ZThn56_N8S20170C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20170C4 = {  "S20170C4", // class name
  bases_S20170C4, 7,
  &(vtc_S20170C4[0]), // expected_vtbl_contents
  &(vtt_S20170C4[0]), // expected_vtt_contents
  ABISELECT(176,76), // object size
  NSPAIRA(_ZTI8S20170C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20170C4),81, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20170C4),12, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20170C8  : S20170C7 , S20170C2 , virtual S20170C3 , virtual S20170C4 , S20170C5 {
  virtual void  v27(); // _ZN8S20170C83v27Ev
  virtual void  v28(); // _ZN8S20170C83v28Ev
  ~S20170C8(); // tgen
  S20170C8(); // tgen
};
//SIG(-1 S20170C8) C1{ BC2{ VBC3{ v3 v4 v5 v6} BC4{ v7 v8 v9 v10 v11 v12 v13 FD Fp} vd v14 v15 v16} BC5{ v17} VBC4 VBC6{ VBC3 VBC4 BC7{ VBC2 v18 v19 v20 Fi FL} BC2 v21 v22 v23 v24 v25 v26} BC3 v1 v2}


void  S20170C8 ::v27(){vfunc_called(this, "_ZN8S20170C83v27Ev");}
void  S20170C8 ::v28(){vfunc_called(this, "_ZN8S20170C83v28Ev");}
S20170C8 ::~S20170C8(){ note_dtor("S20170C8", this);} // tgen
S20170C8 ::S20170C8(){ note_ctor("S20170C8", this);} // tgen

static void Test_S20170C8()
{
  extern Class_Descriptor cd_S20170C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,27)];
    init_test(&cd_S20170C8, buf);
    S20170C8 *dp, &lv = *(dp=new (buf) S20170C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,104), "sizeof(S20170C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20170C8)");
    /*is_ambiguous_... S20170C8::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C5*)(S20170C7*), ABISELECT(112,48), "S20170C8");
    check_base_class_offset(lv, (S20170C5*)(S20170C4*), ABISELECT(112,48), "S20170C8");
    /*is_ambiguous_... S20170C8::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C5*)(S20170C7*), ABISELECT(112,48), "S20170C8");
    /*is_ambiguous_... S20170C4::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C5*)(S20170C7*)(S20170C4*), ABISELECT(112,48), "S20170C8");
    /*is_ambiguous_... S20170C8::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C3*)(S20170C7*), 0, "S20170C8");
    /*is_ambiguous_... S20170C8::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C7*), 0, "S20170C8");
    check_base_class_offset(lv, (S20170C2*), ABISELECT(40,20), "S20170C8");
    /*is_ambiguous_... S20170C8::S20170C3 */ AMB_check_base_class_offset(lv, (S20170C3*), ABISELECT(64,28), "S20170C8");
    /*is_ambiguous_... S20170C4::S20170C3 */ AMB_check_base_class_offset(lv, (S20170C3*)(S20170C4*), ABISELECT(64,28), "S20170C8");
    /*is_ambiguous_... S20170C8::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C3*)(S20170C7*), ABISELECT(192,84), "S20170C8");
    check_base_class_offset(lv, (S20170C7*)(S20170C6*)(S20170C4*), ABISELECT(192,84), "S20170C8");
    check_base_class_offset(lv, (S20170C6*)(S20170C4*), ABISELECT(112,48), "S20170C8");
    /*is_ambiguous_... S20170C4::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C3*)(S20170C7*)(S20170C4*), ABISELECT(144,64), "S20170C8");
    /*is_ambiguous_... S20170C4::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C7*)(S20170C4*), ABISELECT(144,64), "S20170C8");
    check_base_class_offset(lv, (S20170C4*), ABISELECT(112,48), "S20170C8");
    /*is_ambiguous_... S20170C8::S20170C5 */ AMB_check_base_class_offset(lv, (S20170C5*), ABISELECT(48,24), "S20170C8");
    test_class_info(&lv, &cd_S20170C8);
    dp->~S20170C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20170C8(Test_S20170C8, "S20170C8", ABISELECT(240,104));

#else // __cplusplus

extern void _ZN8S20170C8C1Ev();
extern void _ZN8S20170C8D1Ev();
Name_Map name_map_S20170C8[] = {
  NSPAIR(_ZN8S20170C8C1Ev),
  NSPAIR(_ZN8S20170C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20170C5;
extern VTBL_ENTRY _ZTI8S20170C5[];
extern  VTBL_ENTRY _ZTV8S20170C5[];
extern Class_Descriptor cd_S20170C3;
extern VTBL_ENTRY _ZTI8S20170C3[];
extern  VTBL_ENTRY _ZTV8S20170C3[];
extern Class_Descriptor cd_S20170C7;
extern VTBL_ENTRY _ZTI8S20170C7[];
extern  VTBL_ENTRY _ZTV8S20170C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C7[];
extern Class_Descriptor cd_S20170C2;
extern VTBL_ENTRY _ZTI8S20170C2[];
extern  VTBL_ENTRY _ZTV8S20170C2[];
extern Class_Descriptor cd_S20170C3;
extern VTBL_ENTRY _ZTI8S20170C3[];
extern  VTBL_ENTRY _ZTV8S20170C3[];
extern Class_Descriptor cd_S20170C3;
extern VTBL_ENTRY _ZTI8S20170C3[];
extern  VTBL_ENTRY _ZTV8S20170C3[];
extern Class_Descriptor cd_S20170C7;
extern VTBL_ENTRY _ZTI8S20170C7[];
extern  VTBL_ENTRY _ZTV8S20170C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C7[];
extern Class_Descriptor cd_S20170C6;
extern VTBL_ENTRY _ZTI8S20170C6[];
extern  VTBL_ENTRY _ZTV8S20170C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C6[];
extern Class_Descriptor cd_S20170C3;
extern VTBL_ENTRY _ZTI8S20170C3[];
extern  VTBL_ENTRY _ZTV8S20170C3[];
extern Class_Descriptor cd_S20170C7;
extern VTBL_ENTRY _ZTI8S20170C7[];
extern  VTBL_ENTRY _ZTV8S20170C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C7[];
extern Class_Descriptor cd_S20170C4;
extern VTBL_ENTRY _ZTI8S20170C4[];
extern  VTBL_ENTRY _ZTV8S20170C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C4[];
extern Class_Descriptor cd_S20170C5;
extern VTBL_ENTRY _ZTI8S20170C5[];
extern  VTBL_ENTRY _ZTV8S20170C5[];
static Base_Class bases_S20170C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20170C5,    ABISELECT(112,48), //bcp->offset
    -1, //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
    2, //immediately_derived
  0, 1},
  {&cd_S20170C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S20170C7,    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_S20170C2,    ABISELECT(40,20), //bcp->offset
    20, //bcp->virtual_function_table_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_S20170C3,    ABISELECT(64,28), //bcp->offset
    29, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20170C3,    ABISELECT(192,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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20170C7,    ABISELECT(192,84), //bcp->offset
    104, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20170C6,    ABISELECT(112,48), //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
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20170C3,    ABISELECT(144,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
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20170C7,    ABISELECT(144,64), //bcp->offset
    89, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20170C4,    ABISELECT(112,48), //bcp->offset
    45, //bcp->virtual_function_table_offset
    29, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20170C5,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20170C8[];
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void _ZN8S20170C8D1Ev();
extern void _ZN8S20170C8D0Ev();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
extern void _ZN8S20170C83v27Ev();
extern void _ZN8S20170C83v28Ev();
extern void _ZN8S20170C22v3Ev();
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
extern void _ZN8S20170C63v18Ev();
extern void _ZN8S20170C63v19Ev();
extern void _ZN8S20170C63v20Ev();
extern void ABISELECT(_ZTv0_n104_N8S20170C8D1Ev,_ZTv0_n52_N8S20170C8D1Ev)();
extern void ABISELECT(_ZThn112_N8S20170C8D1Ev,_ZThn48_N8S20170C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S20170C8D0Ev,_ZTv0_n52_N8S20170C8D0Ev)();
extern void ABISELECT(_ZThn112_N8S20170C8D0Ev,_ZThn48_N8S20170C8D0Ev)() __attribute__((weak));
extern void _ZN8S20170C43v21Ev();
extern void _ZN8S20170C43v22Ev();
extern void _ZN8S20170C43v23Ev();
extern void _ZN8S20170C43v24Ev();
extern void _ZN8S20170C43v25Ev();
extern void _ZN8S20170C43v26Ev();
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void ABISELECT(_ZTvn32_n104_N8S20170C8D1Ev,_ZTvn16_n52_N8S20170C8D1Ev)();
extern void ABISELECT(_ZTvn32_n104_N8S20170C8D0Ev,_ZTvn16_n52_N8S20170C8D0Ev)();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void ABISELECT(_ZTv0_n88_N8S20170C8D1Ev,_ZTv0_n44_N8S20170C8D1Ev)();
extern void ABISELECT(_ZThn192_N8S20170C8D1Ev,_ZThn84_N8S20170C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20170C8D0Ev,_ZTv0_n44_N8S20170C8D0Ev)();
extern void ABISELECT(_ZThn192_N8S20170C8D0Ev,_ZThn84_N8S20170C8D0Ev)() __attribute__((weak));
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY vtc_S20170C8[] = {
  ABISELECT(192,84),
  ABISELECT(112,48),
  ABISELECT(64,28),
  ABISELECT(112,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C8[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20170C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20170C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20170C83v28Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20170C8[0]),
  (VTBL_ENTRY)&_ZN8S20170C22v3Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20170C8[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S20170C8[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  0,
  0,
  0,
  ABISELECT(-48,-20),
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  (VTBL_ENTRY)&(_ZTI8S20170C8[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20170C8D1Ev,_ZTv0_n52_N8S20170C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20170C8D0Ev,_ZTv0_n52_N8S20170C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v26Ev,
  ABISELECT(-32,-16),
  ABISELECT(-144,-64),
  (VTBL_ENTRY)&(_ZTI8S20170C8[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N8S20170C8D1Ev,_ZTvn16_n52_N8S20170C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N8S20170C8D0Ev,_ZTvn16_n52_N8S20170C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
  0,
  0,
  0,
  ABISELECT(-192,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-192,-84),
  (VTBL_ENTRY)&(_ZTI8S20170C8[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C8D1Ev,_ZTv0_n44_N8S20170C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C8D0Ev,_ZTv0_n44_N8S20170C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern VTBL_ENTRY _ZTV8S20170C8[];
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void _ZN8S20170C7D1Ev();
extern void _ZN8S20170C7D0Ev();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C7__A__8S20170C8[] = {
  ABISELECT(112,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C5__8S20170C7__A__8S20170C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
};
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
extern void _ZN8S20170C63v18Ev();
extern void _ZN8S20170C63v19Ev();
extern void _ZN8S20170C63v20Ev();
extern void _ZN8S20170C4D1Ev();
extern void _ZN8S20170C4D0Ev();
extern void _ZN8S20170C43v21Ev();
extern void _ZN8S20170C43v22Ev();
extern void _ZN8S20170C43v23Ev();
extern void _ZN8S20170C43v24Ev();
extern void _ZN8S20170C43v25Ev();
extern void _ZN8S20170C43v26Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C4__8S20170C8[] = {
  ABISELECT(-48,-20),
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C4[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20170C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v26Ev,
};
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
extern void _ZN8S20170C63v18Ev();
extern void _ZN8S20170C63v19Ev();
extern void _ZN8S20170C63v20Ev();
extern void _ZN8S20170C6D1Ev();
extern void _ZN8S20170C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C68S20170C4__8S20170C8[] = {
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C6[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20170C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C6D0Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void ABISELECT(_ZTv0_n88_N8S20170C6D1Ev,_ZTv0_n44_N8S20170C6D1Ev)();
extern void ABISELECT(_ZThn80_N8S20170C6D1Ev,_ZThn36_N8S20170C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20170C6D0Ev,_ZTv0_n44_N8S20170C6D0Ev)();
extern void ABISELECT(_ZThn80_N8S20170C6D0Ev,_ZThn36_N8S20170C6D0Ev)() __attribute__((weak));
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C7__8S20170C68S20170C4__8S20170C8[] = {
  0,
  0,
  0,
  ABISELECT(-80,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S20170C6[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C6D1Ev,_ZTv0_n44_N8S20170C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C6D0Ev,_ZTv0_n44_N8S20170C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void _ZN8S20170C7D1Ev();
extern void _ZN8S20170C7D0Ev();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C78S20170C4__A2__8S20170C8[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C5__8S20170C78S20170C4__A2__8S20170C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C3__8S20170C4__8S20170C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI8S20170C4[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void ABISELECT(_ZTv0_n88_N8S20170C4D1Ev,_ZTv0_n44_N8S20170C4D1Ev)();
extern void ABISELECT(_ZThn80_N8S20170C4D1Ev,_ZThn36_N8S20170C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20170C4D0Ev,_ZTv0_n44_N8S20170C4D0Ev)();
extern void ABISELECT(_ZThn80_N8S20170C4D0Ev,_ZThn36_N8S20170C4D0Ev)() __attribute__((weak));
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C7__8S20170C4__8S20170C8[] = {
  0,
  0,
  0,
  ABISELECT(-80,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S20170C4[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C4D1Ev,_ZTv0_n44_N8S20170C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C4D0Ev,_ZTv0_n44_N8S20170C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void ABISELECT(_ZThn32_N8S20170C4D1Ev,_ZThn16_N8S20170C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S20170C4D0Ev,_ZThn16_N8S20170C4D0Ev)();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C7__A__8S20170C4__8S20170C8[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20170C4[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20170C4D1Ev,_ZThn16_N8S20170C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20170C4D0Ev,_ZThn16_N8S20170C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void _ZN8S20170C7D1Ev();
extern void _ZN8S20170C7D0Ev();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C7__A1__8S20170C8[] = {
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C5__8S20170C7__A1__8S20170C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
};
static  VTT_ENTRY vtt_S20170C8[] = {
  {&(_ZTV8S20170C8[6]),  6,130},
  {&(_tg__ZTV8S20170C7__A__8S20170C8[3]),  3,15},
  {&(_tg__ZTV8S20170C5__8S20170C7__A__8S20170C8[6]),  6,10},
  {&(_ZTV8S20170C8[74]),  74,130},
  {&(_ZTV8S20170C8[38]),  38,130},
  {&(_ZTV8S20170C8[74]),  74,130},
  {&(_ZTV8S20170C8[118]),  118,130},
  {&(_ZTV8S20170C8[92]),  92,130},
  {&(_tg__ZTV8S20170C4__8S20170C8[9]),  9,24},
  {&(_tg__ZTV8S20170C68S20170C4__8S20170C8[8]),  8,17},
  {&(_tg__ZTV8S20170C7__8S20170C68S20170C4__8S20170C8[14]),  14,26},
  {&(_tg__ZTV8S20170C68S20170C4__8S20170C8[8]),  8,17},
  {&(_tg__ZTV8S20170C78S20170C4__A2__8S20170C8[3]),  3,15},
  {&(_tg__ZTV8S20170C5__8S20170C78S20170C4__A2__8S20170C8[6]),  6,10},
  {&(_tg__ZTV8S20170C4__8S20170C8[9]),  9,24},
  {&(_tg__ZTV8S20170C3__8S20170C4__8S20170C8[9]),  9,16},
  {&(_tg__ZTV8S20170C7__8S20170C4__8S20170C8[14]),  14,26},
  {&(_tg__ZTV8S20170C7__A__8S20170C4__8S20170C8[3]),  3,15},
  {&(_tg__ZTV8S20170C7__A1__8S20170C8[3]),  3,15},
  {&(_tg__ZTV8S20170C5__8S20170C7__A1__8S20170C8[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20170C8[];
extern  VTBL_ENTRY _ZTV8S20170C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C8[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C4D0Ev,_ZTv0_n44_N8S20170C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20170C4D0Ev,_ZThn36_N8S20170C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C4D1Ev,_ZTv0_n44_N8S20170C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20170C4D1Ev,_ZThn36_N8S20170C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C6D0Ev,_ZTv0_n44_N8S20170C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20170C6D0Ev,_ZThn36_N8S20170C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C6D1Ev,_ZTv0_n44_N8S20170C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20170C6D1Ev,_ZThn36_N8S20170C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C8D0Ev,_ZTv0_n44_N8S20170C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20170C8D0Ev,_ZThn84_N8S20170C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C8D1Ev,_ZTv0_n44_N8S20170C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20170C8D1Ev,_ZThn84_N8S20170C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20170C8D0Ev,_ZTv0_n52_N8S20170C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20170C8D0Ev,_ZThn48_N8S20170C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20170C8D1Ev,_ZTv0_n52_N8S20170C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20170C8D1Ev,_ZThn48_N8S20170C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20170C8 = {  "S20170C8", // class name
  bases_S20170C8, 12,
  &(vtc_S20170C8[0]), // expected_vtbl_contents
  &(vtt_S20170C8[0]), // expected_vtt_contents
  ABISELECT(240,104), // object size
  NSPAIRA(_ZTI8S20170C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20170C8),130, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20170C8),20, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20170C9  : virtual S20170C3 {
  virtual void  v29(); // _ZN8S20170C93v29Ev
  ~S20170C9(); // tgen
  S20170C9(); // tgen
};
//SIG(-1 S20170C9) C1{ VBC2{ v2 v3 v4 v5 v6 v7 v8 FD Fp} v1}


void  S20170C9 ::v29(){vfunc_called(this, "_ZN8S20170C93v29Ev");}
S20170C9 ::~S20170C9(){ note_dtor("S20170C9", this);} // tgen
S20170C9 ::S20170C9(){ note_ctor("S20170C9", this);} // tgen

static void Test_S20170C9()
{
  extern Class_Descriptor cd_S20170C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,7)];
    init_test(&cd_S20170C9, buf);
    S20170C9 *dp, &lv = *(dp=new (buf) S20170C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,24), "sizeof(S20170C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20170C9)");
    check_base_class_offset(lv, (S20170C3*), ABISELECT(16,4), "S20170C9");
    test_class_info(&lv, &cd_S20170C9);
    dp->~S20170C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20170C9(Test_S20170C9, "S20170C9", ABISELECT(64,24));

#else // __cplusplus

extern void _ZN8S20170C9C1Ev();
extern void _ZN8S20170C9D1Ev();
Name_Map name_map_S20170C9[] = {
  NSPAIR(_ZN8S20170C9C1Ev),
  NSPAIR(_ZN8S20170C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20170C3;
extern VTBL_ENTRY _ZTI8S20170C3[];
extern  VTBL_ENTRY _ZTV8S20170C3[];
static Base_Class bases_S20170C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20170C3,    ABISELECT(16,4), //bcp->offset
    4, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S20170C9[];
extern void _ZN8S20170C93v29Ev();
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
static  VTBL_ENTRY vtc_S20170C9[] = {
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C9[0]),
  (VTBL_ENTRY)&_ZN8S20170C93v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20170C9[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
};
extern VTBL_ENTRY _ZTV8S20170C9[];
static  VTT_ENTRY vtt_S20170C9[] = {
  {&(_ZTV8S20170C9[3]),  3,20},
  {&(_ZTV8S20170C9[13]),  13,20},
};
extern VTBL_ENTRY _ZTI8S20170C9[];
extern  VTBL_ENTRY _ZTV8S20170C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C9[];
Class_Descriptor cd_S20170C9 = {  "S20170C9", // class name
  bases_S20170C9, 1,
  &(vtc_S20170C9[0]), // expected_vtbl_contents
  &(vtt_S20170C9[0]), // expected_vtt_contents
  ABISELECT(64,24), // object size
  NSPAIRA(_ZTI8S20170C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20170C9),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20170C9),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  S20170C1  : virtual S20170C2 , virtual S20170C3 , virtual S20170C4 , S20170C8 , virtual S20170C9 {
  ::S19917C12_nt s20170c1f0;
  int s20170c1f1;
  virtual void  v1(); // _ZN8S20170C12v1Ev
  virtual void  v2(); // _ZN8S20170C12v2Ev
  ~S20170C1(); // tgen
  S20170C1(); // tgen
};
//SIG(1 S20170C1) C1{ VBC2{ v3} VBC3{ v4 v5 v6 v7 v8 v9 v10 FD Fp} VBC4{ VBC5{ v11 v12 v13 v14} VBC3 BC6{ VBC7{ VBC5 BC3 vd v15 v16 v17} v18 v19 v20 Fi FL} BC7 v21 v22 v23 v24 v25 v26} BC8{ BC7 BC2 VBC3 VBC4 BC5 v27 v28} VBC9{ VBC3 v29} v1 v2 FC10{} Fi}


void  S20170C1 ::v1(){vfunc_called(this, "_ZN8S20170C12v1Ev");}
void  S20170C1 ::v2(){vfunc_called(this, "_ZN8S20170C12v2Ev");}
S20170C1 ::~S20170C1(){ note_dtor("S20170C1", this);} // tgen
S20170C1 ::S20170C1(){ note_ctor("S20170C1", this);} // tgen

static void Test_S20170C1()
{
  extern Class_Descriptor cd_S20170C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,31)];
    init_test(&cd_S20170C1, buf);
    S20170C1 *dp, &lv = *(dp=new (buf) S20170C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,120), "sizeof(S20170C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20170C1)");
    /*is_ambiguous_... S20170C1::S20170C2 */ AMB_check_base_class_offset(lv, (S20170C2*), ABISELECT(64,36), "S20170C1");
    /*is_ambiguous_... S20170C1::S20170C3 */ AMB_check_base_class_offset(lv, (S20170C3*), ABISELECT(80,40), "S20170C1");
    /*is_ambiguous_... S20170C4::S20170C3 */ AMB_check_base_class_offset(lv, (S20170C3*)(S20170C4*), ABISELECT(80,40), "S20170C1");
    /*is_ambiguous_... S20170C8::S20170C3 */ AMB_check_base_class_offset(lv, (S20170C3*)(S20170C8*), ABISELECT(80,40), "S20170C1");
    check_base_class_offset(lv, (S20170C3*)(S20170C9*), ABISELECT(80,40), "S20170C1");
    check_base_class_offset(lv, (S20170C5*)(S20170C4*), ABISELECT(128,60), "S20170C1");
    /*is_ambiguous_... S20170C1::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C5*)(S20170C7*), ABISELECT(128,60), "S20170C1");
    /*is_ambiguous_... S20170C4::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C5*)(S20170C7*)(S20170C4*), ABISELECT(128,60), "S20170C1");
    /*is_ambiguous_... S20170C8::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C5*)(S20170C7*)(S20170C8*), ABISELECT(128,60), "S20170C1");
    /*is_ambiguous_... S20170C1::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C3*)(S20170C7*), ABISELECT(208,96), "S20170C1");
    check_base_class_offset(lv, (S20170C7*)(S20170C6*)(S20170C4*), ABISELECT(208,96), "S20170C1");
    check_base_class_offset(lv, (S20170C6*)(S20170C4*), ABISELECT(128,60), "S20170C1");
    /*is_ambiguous_... S20170C4::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C3*)(S20170C7*)(S20170C4*), ABISELECT(160,76), "S20170C1");
    /*is_ambiguous_... S20170C4::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C7*)(S20170C4*), ABISELECT(160,76), "S20170C1");
    check_base_class_offset(lv, (S20170C4*), ABISELECT(128,60), "S20170C1");
    check_base_class_offset(lv, (S20170C4*)(S20170C8*), ABISELECT(128,60), "S20170C1");
    /*is_ambiguous_... S20170C8::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C3*)(S20170C7*)(S20170C8*), 0, "S20170C1");
    /*is_ambiguous_... S20170C8::S20170C7 */ AMB_check_base_class_offset(lv, (S20170C7*)(S20170C8*), 0, "S20170C1");
    check_base_class_offset(lv, (S20170C2*)(S20170C8*), ABISELECT(40,20), "S20170C1");
    /*is_ambiguous_... S20170C8::S20170C5 */ AMB_check_base_class_offset(lv, (S20170C5*)(S20170C8*), ABISELECT(48,24), "S20170C1");
    check_base_class_offset(lv, (S20170C8*), 0, "S20170C1");
    check_base_class_offset(lv, (S20170C9*), ABISELECT(248,116), "S20170C1");
    check_field_offset(lv, s20170c1f0, ABISELECT(56,28), "S20170C1.s20170c1f0");
    check_field_offset(lv, s20170c1f1, ABISELECT(60,32), "S20170C1.s20170c1f1");
    test_class_info(&lv, &cd_S20170C1);
    dp->~S20170C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20170C1(Test_S20170C1, "S20170C1", ABISELECT(256,120));

#else // __cplusplus

extern void _ZN8S20170C1C1Ev();
extern void _ZN8S20170C1D1Ev();
Name_Map name_map_S20170C1[] = {
  NSPAIR(_ZN8S20170C1C1Ev),
  NSPAIR(_ZN8S20170C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20170C2;
extern VTBL_ENTRY _ZTI8S20170C2[];
extern  VTBL_ENTRY _ZTV8S20170C2[];
extern Class_Descriptor cd_S20170C3;
extern VTBL_ENTRY _ZTI8S20170C3[];
extern  VTBL_ENTRY _ZTV8S20170C3[];
extern Class_Descriptor cd_S20170C5;
extern VTBL_ENTRY _ZTI8S20170C5[];
extern  VTBL_ENTRY _ZTV8S20170C5[];
extern Class_Descriptor cd_S20170C3;
extern VTBL_ENTRY _ZTI8S20170C3[];
extern  VTBL_ENTRY _ZTV8S20170C3[];
extern Class_Descriptor cd_S20170C7;
extern VTBL_ENTRY _ZTI8S20170C7[];
extern  VTBL_ENTRY _ZTV8S20170C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C7[];
extern Class_Descriptor cd_S20170C6;
extern VTBL_ENTRY _ZTI8S20170C6[];
extern  VTBL_ENTRY _ZTV8S20170C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C6[];
extern Class_Descriptor cd_S20170C3;
extern VTBL_ENTRY _ZTI8S20170C3[];
extern  VTBL_ENTRY _ZTV8S20170C3[];
extern Class_Descriptor cd_S20170C7;
extern VTBL_ENTRY _ZTI8S20170C7[];
extern  VTBL_ENTRY _ZTV8S20170C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C7[];
extern Class_Descriptor cd_S20170C4;
extern VTBL_ENTRY _ZTI8S20170C4[];
extern  VTBL_ENTRY _ZTV8S20170C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C4[];
extern Class_Descriptor cd_S20170C3;
extern VTBL_ENTRY _ZTI8S20170C3[];
extern  VTBL_ENTRY _ZTV8S20170C3[];
extern Class_Descriptor cd_S20170C7;
extern VTBL_ENTRY _ZTI8S20170C7[];
extern  VTBL_ENTRY _ZTV8S20170C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C7[];
extern Class_Descriptor cd_S20170C2;
extern VTBL_ENTRY _ZTI8S20170C2[];
extern  VTBL_ENTRY _ZTV8S20170C2[];
extern Class_Descriptor cd_S20170C5;
extern VTBL_ENTRY _ZTI8S20170C5[];
extern  VTBL_ENTRY _ZTV8S20170C5[];
extern Class_Descriptor cd_S20170C8;
extern VTBL_ENTRY _ZTI8S20170C8[];
extern  VTBL_ENTRY _ZTV8S20170C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C8[];
extern Class_Descriptor cd_S20170C9;
extern VTBL_ENTRY _ZTI8S20170C9[];
extern  VTBL_ENTRY _ZTV8S20170C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C9[];
static Base_Class bases_S20170C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20170C2,    ABISELECT(64,36), //bcp->offset
    33, //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_S20170C3,    ABISELECT(80,40), //bcp->offset
    37, //bcp->virtual_function_table_offset
    9, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20170C5,    ABISELECT(128,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20170C3,    ABISELECT(208,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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20170C7,    ABISELECT(208,96), //bcp->offset
    112, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20170C6,    ABISELECT(128,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20170C3,    ABISELECT(160,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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20170C7,    ABISELECT(160,76), //bcp->offset
    97, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20170C4,    ABISELECT(128,60), //bcp->offset
    53, //bcp->virtual_function_table_offset
    29, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20170C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S20170C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20170C2,    ABISELECT(40,20), //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
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20170C5,    ABISELECT(48,24), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20170C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20170C9,    ABISELECT(248,116), //bcp->offset
    138, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20170C1[];
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void _ZN8S20170C1D1Ev();
extern void _ZN8S20170C1D0Ev();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
extern void _ZN8S20170C83v27Ev();
extern void _ZN8S20170C83v28Ev();
extern void _ZN8S20170C12v1Ev();
extern void _ZN8S20170C12v2Ev();
extern void _ZN8S20170C22v3Ev();
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
extern void _ZN8S20170C22v3Ev();
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
extern void _ZN8S20170C63v18Ev();
extern void _ZN8S20170C63v19Ev();
extern void _ZN8S20170C63v20Ev();
extern void ABISELECT(_ZTv0_n104_N8S20170C1D1Ev,_ZTv0_n52_N8S20170C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S20170C1D1Ev,_ZThn60_N8S20170C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S20170C1D0Ev,_ZTv0_n52_N8S20170C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S20170C1D0Ev,_ZThn60_N8S20170C1D0Ev)() __attribute__((weak));
extern void _ZN8S20170C43v21Ev();
extern void _ZN8S20170C43v22Ev();
extern void _ZN8S20170C43v23Ev();
extern void _ZN8S20170C43v24Ev();
extern void _ZN8S20170C43v25Ev();
extern void _ZN8S20170C43v26Ev();
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void ABISELECT(_ZTvn32_n104_N8S20170C1D1Ev,_ZTvn16_n52_N8S20170C1D1Ev)();
extern void ABISELECT(_ZTvn32_n104_N8S20170C1D0Ev,_ZTvn16_n52_N8S20170C1D0Ev)();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void ABISELECT(_ZTv0_n88_N8S20170C1D1Ev,_ZTv0_n44_N8S20170C1D1Ev)();
extern void ABISELECT(_ZThn208_N8S20170C1D1Ev,_ZThn96_N8S20170C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20170C1D0Ev,_ZTv0_n44_N8S20170C1D0Ev)();
extern void ABISELECT(_ZThn208_N8S20170C1D0Ev,_ZThn96_N8S20170C1D0Ev)() __attribute__((weak));
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
extern void _ZN8S20170C93v29Ev();
static  VTBL_ENTRY vtc_S20170C1[] = {
  ABISELECT(248,116),
  ABISELECT(64,36),
  ABISELECT(208,96),
  ABISELECT(128,60),
  ABISELECT(80,40),
  ABISELECT(128,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C1[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20170C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20170C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20170C83v28Ev,
  (VTBL_ENTRY)&_ZN8S20170C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20170C12v2Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20170C1[0]),
  (VTBL_ENTRY)&_ZN8S20170C22v3Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20170C1[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20170C1[0]),
  (VTBL_ENTRY)&_ZN8S20170C22v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S20170C1[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-60),
  0,
  0,
  0,
  ABISELECT(-48,-20),
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  ABISELECT(-128,-60),
  (VTBL_ENTRY)&(_ZTI8S20170C1[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20170C1D1Ev,_ZTv0_n52_N8S20170C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20170C1D0Ev,_ZTv0_n52_N8S20170C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v26Ev,
  ABISELECT(-32,-16),
  ABISELECT(-160,-76),
  (VTBL_ENTRY)&(_ZTI8S20170C1[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N8S20170C1D1Ev,_ZTvn16_n52_N8S20170C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N8S20170C1D0Ev,_ZTvn16_n52_N8S20170C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
  0,
  0,
  0,
  ABISELECT(-208,-96),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-208,-96),
  (VTBL_ENTRY)&(_ZTI8S20170C1[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C1D1Ev,_ZTv0_n44_N8S20170C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C1D0Ev,_ZTv0_n44_N8S20170C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
  0,
  ABISELECT(-168,-76),
  ABISELECT(-248,-116),
  (VTBL_ENTRY)&(_ZTI8S20170C1[0]),
  (VTBL_ENTRY)&_ZN8S20170C93v29Ev,
};
extern VTBL_ENTRY _ZTV8S20170C1[];
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void _ZN8S20170C8D1Ev();
extern void _ZN8S20170C8D0Ev();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
extern void _ZN8S20170C83v27Ev();
extern void _ZN8S20170C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C8__8S20170C1[] = {
  ABISELECT(208,96),
  ABISELECT(128,60),
  ABISELECT(80,40),
  ABISELECT(128,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C8[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20170C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20170C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20170C83v28Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void _ZN8S20170C7D1Ev();
extern void _ZN8S20170C7D0Ev();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C78S20170C8__A2__8S20170C1[] = {
  ABISELECT(128,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C5__8S20170C78S20170C8__A2__8S20170C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-128,-60),
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
};
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
extern void _ZN8S20170C63v18Ev();
extern void _ZN8S20170C63v19Ev();
extern void _ZN8S20170C63v20Ev();
extern void ABISELECT(_ZTv0_n104_N8S20170C8D1Ev,_ZTv0_n52_N8S20170C8D1Ev)();
extern void ABISELECT(_ZThn128_N8S20170C8D1Ev,_ZThn60_N8S20170C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S20170C8D0Ev,_ZTv0_n52_N8S20170C8D0Ev)();
extern void ABISELECT(_ZThn128_N8S20170C8D0Ev,_ZThn60_N8S20170C8D0Ev)() __attribute__((weak));
extern void _ZN8S20170C43v21Ev();
extern void _ZN8S20170C43v22Ev();
extern void _ZN8S20170C43v23Ev();
extern void _ZN8S20170C43v24Ev();
extern void _ZN8S20170C43v25Ev();
extern void _ZN8S20170C43v26Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C4__8S20170C8__8S20170C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-60),
  0,
  0,
  0,
  ABISELECT(-48,-20),
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  ABISELECT(-128,-60),
  (VTBL_ENTRY)&(_ZTI8S20170C8[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20170C8D1Ev,_ZTv0_n52_N8S20170C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20170C8D0Ev,_ZTv0_n52_N8S20170C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v26Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C3__A1__8S20170C8__8S20170C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S20170C8[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void ABISELECT(_ZTv0_n88_N8S20170C8D1Ev,_ZTv0_n44_N8S20170C8D1Ev)();
extern void ABISELECT(_ZThn208_N8S20170C8D1Ev,_ZThn96_N8S20170C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20170C8D0Ev,_ZTv0_n44_N8S20170C8D0Ev)();
extern void ABISELECT(_ZThn208_N8S20170C8D0Ev,_ZThn96_N8S20170C8D0Ev)() __attribute__((weak));
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C7__A1__8S20170C8__8S20170C1[] = {
  0,
  0,
  0,
  ABISELECT(-208,-96),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-208,-96),
  (VTBL_ENTRY)&(_ZTI8S20170C8[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C8D1Ev,_ZTv0_n44_N8S20170C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C8D0Ev,_ZTv0_n44_N8S20170C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void ABISELECT(_ZTvn32_n104_N8S20170C8D1Ev,_ZTvn16_n52_N8S20170C8D1Ev)();
extern void ABISELECT(_ZTvn32_n104_N8S20170C8D0Ev,_ZTvn16_n52_N8S20170C8D0Ev)();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C78S20170C4__A2__8S20170C8__8S20170C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-160,-76),
  (VTBL_ENTRY)&(_ZTI8S20170C8[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N8S20170C8D1Ev,_ZTvn16_n52_N8S20170C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N8S20170C8D0Ev,_ZTvn16_n52_N8S20170C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
extern void _ZN8S20170C63v18Ev();
extern void _ZN8S20170C63v19Ev();
extern void _ZN8S20170C63v20Ev();
extern void _ZN8S20170C4D1Ev();
extern void _ZN8S20170C4D0Ev();
extern void _ZN8S20170C43v21Ev();
extern void _ZN8S20170C43v22Ev();
extern void _ZN8S20170C43v23Ev();
extern void _ZN8S20170C43v24Ev();
extern void _ZN8S20170C43v25Ev();
extern void _ZN8S20170C43v26Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C4__8S20170C1[] = {
  ABISELECT(-48,-20),
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C4[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20170C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v21Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v22Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v23Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v24Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v25Ev,
  (VTBL_ENTRY)&_ZN8S20170C43v26Ev,
};
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
extern void _ZN8S20170C63v18Ev();
extern void _ZN8S20170C63v19Ev();
extern void _ZN8S20170C63v20Ev();
extern void _ZN8S20170C6D1Ev();
extern void _ZN8S20170C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C68S20170C4__8S20170C1[] = {
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C6[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20170C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20170C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C6D0Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void ABISELECT(_ZTv0_n88_N8S20170C6D1Ev,_ZTv0_n44_N8S20170C6D1Ev)();
extern void ABISELECT(_ZThn80_N8S20170C6D1Ev,_ZThn36_N8S20170C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20170C6D0Ev,_ZTv0_n44_N8S20170C6D0Ev)();
extern void ABISELECT(_ZThn80_N8S20170C6D0Ev,_ZThn36_N8S20170C6D0Ev)() __attribute__((weak));
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C7__8S20170C68S20170C4__8S20170C1[] = {
  0,
  0,
  0,
  ABISELECT(-80,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S20170C6[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C6D1Ev,_ZTv0_n44_N8S20170C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C6D0Ev,_ZTv0_n44_N8S20170C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void _ZN8S20170C7D1Ev();
extern void _ZN8S20170C7D0Ev();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C78S20170C4__A1__8S20170C1[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C5__8S20170C78S20170C4__A1__8S20170C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C3__8S20170C4__8S20170C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI8S20170C4[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void ABISELECT(_ZTv0_n88_N8S20170C4D1Ev,_ZTv0_n44_N8S20170C4D1Ev)();
extern void ABISELECT(_ZThn80_N8S20170C4D1Ev,_ZThn36_N8S20170C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20170C4D0Ev,_ZTv0_n44_N8S20170C4D0Ev)();
extern void ABISELECT(_ZThn80_N8S20170C4D0Ev,_ZThn36_N8S20170C4D0Ev)() __attribute__((weak));
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C7__8S20170C4__8S20170C1[] = {
  0,
  0,
  0,
  ABISELECT(-80,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S20170C4[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C4D1Ev,_ZTv0_n44_N8S20170C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20170C4D0Ev,_ZTv0_n44_N8S20170C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void ABISELECT(_ZThn32_N8S20170C4D1Ev,_ZThn16_N8S20170C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S20170C4D0Ev,_ZThn16_N8S20170C4D0Ev)();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C7__A__8S20170C4__8S20170C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20170C4[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20170C4D1Ev,_ZThn16_N8S20170C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20170C4D0Ev,_ZThn16_N8S20170C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
extern void _ZN8S20170C7D1Ev();
extern void _ZN8S20170C7D0Ev();
extern void _ZN8S20170C73v15Ev();
extern void _ZN8S20170C73v16Ev();
extern void _ZN8S20170C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C7__8S20170C1[] = {
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20170C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20170C73v17Ev,
};
extern void _ZN8S20170C52v4Ev();
extern void _ZN8S20170C52v5Ev();
extern void _ZN8S20170C52v6Ev();
extern void _ZN8S20170C52v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C5__8S20170C7__8S20170C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI8S20170C7[0]),
  (VTBL_ENTRY)&_ZN8S20170C52v4Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v5Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v6Ev,
  (VTBL_ENTRY)&_ZN8S20170C52v7Ev,
};
extern void _ZN8S20170C93v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C9__8S20170C1[] = {
  ABISELECT(-168,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20170C9[0]),
  (VTBL_ENTRY)&_ZN8S20170C93v29Ev,
};
extern void _ZN8S20170C32v8Ev();
extern void _ZN8S20170C32v9Ev();
extern void _ZN8S20170C33v10Ev();
extern void _ZN8S20170C33v11Ev();
extern void _ZN8S20170C33v12Ev();
extern void _ZN8S20170C33v13Ev();
extern void _ZN8S20170C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20170C3__8S20170C9__8S20170C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(168,76),
  (VTBL_ENTRY)&(_ZTI8S20170C9[0]),
  (VTBL_ENTRY)&_ZN8S20170C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20170C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20170C33v14Ev,
};
static  VTT_ENTRY vtt_S20170C1[] = {
  {&(_ZTV8S20170C1[8]),  8,143},
  {&(_tg__ZTV8S20170C8__8S20170C1[6]),  6,20},
  {&(_tg__ZTV8S20170C78S20170C8__A2__8S20170C1[3]),  3,15},
  {&(_tg__ZTV8S20170C5__8S20170C78S20170C8__A2__8S20170C1[6]),  6,10},
  {&(_tg__ZTV8S20170C4__8S20170C8__8S20170C1[29]),  29,44},
  {&(_tg__ZTV8S20170C3__A1__8S20170C8__8S20170C1[9]),  9,16},
  {&(_tg__ZTV8S20170C4__8S20170C8__8S20170C1[29]),  29,44},
  {&(_tg__ZTV8S20170C7__A1__8S20170C8__8S20170C1[14]),  14,26},
  {&(_tg__ZTV8S20170C78S20170C4__A2__8S20170C8__8S20170C1[3]),  3,15},
  {&(_ZTV8S20170C1[36]),  36,143},
  {&(_ZTV8S20170C1[46]),  46,143},
  {&(_ZTV8S20170C1[82]),  82,143},
  {&(_ZTV8S20170C1[82]),  82,143},
  {&(_ZTV8S20170C1[126]),  126,143},
  {&(_ZTV8S20170C1[100]),  100,143},
  {&(_ZTV8S20170C1[142]),  142,143},
  {&(_tg__ZTV8S20170C4__8S20170C1[9]),  9,24},
  {&(_tg__ZTV8S20170C68S20170C4__8S20170C1[8]),  8,17},
  {&(_tg__ZTV8S20170C7__8S20170C68S20170C4__8S20170C1[14]),  14,26},
  {&(_tg__ZTV8S20170C68S20170C4__8S20170C1[8]),  8,17},
  {&(_tg__ZTV8S20170C78S20170C4__A1__8S20170C1[3]),  3,15},
  {&(_tg__ZTV8S20170C5__8S20170C78S20170C4__A1__8S20170C1[6]),  6,10},
  {&(_tg__ZTV8S20170C4__8S20170C1[9]),  9,24},
  {&(_tg__ZTV8S20170C3__8S20170C4__8S20170C1[9]),  9,16},
  {&(_tg__ZTV8S20170C7__8S20170C4__8S20170C1[14]),  14,26},
  {&(_tg__ZTV8S20170C7__A__8S20170C4__8S20170C1[3]),  3,15},
  {&(_tg__ZTV8S20170C7__8S20170C1[3]),  3,15},
  {&(_tg__ZTV8S20170C5__8S20170C7__8S20170C1[6]),  6,10},
  {&(_tg__ZTV8S20170C9__8S20170C1[3]),  3,4},
  {&(_tg__ZTV8S20170C3__8S20170C9__8S20170C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S20170C1[];
extern  VTBL_ENTRY _ZTV8S20170C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20170C1[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C4D0Ev,_ZTv0_n44_N8S20170C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20170C4D0Ev,_ZThn36_N8S20170C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C4D1Ev,_ZTv0_n44_N8S20170C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20170C4D1Ev,_ZThn36_N8S20170C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C6D0Ev,_ZTv0_n44_N8S20170C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20170C6D0Ev,_ZThn36_N8S20170C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C6D1Ev,_ZTv0_n44_N8S20170C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20170C6D1Ev,_ZThn36_N8S20170C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C8D0Ev,_ZTv0_n44_N8S20170C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20170C8D0Ev,_ZThn96_N8S20170C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C8D1Ev,_ZTv0_n44_N8S20170C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20170C8D1Ev,_ZThn96_N8S20170C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20170C8D0Ev,_ZTv0_n52_N8S20170C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20170C8D0Ev,_ZThn60_N8S20170C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20170C8D1Ev,_ZTv0_n52_N8S20170C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20170C8D1Ev,_ZThn60_N8S20170C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C1D0Ev,_ZTv0_n44_N8S20170C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20170C1D0Ev,_ZThn96_N8S20170C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20170C1D1Ev,_ZTv0_n44_N8S20170C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20170C1D1Ev,_ZThn96_N8S20170C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20170C1D0Ev,_ZTv0_n52_N8S20170C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20170C1D0Ev,_ZThn60_N8S20170C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20170C1D1Ev,_ZTv0_n52_N8S20170C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20170C1D1Ev,_ZThn60_N8S20170C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20170C1 = {  "S20170C1", // class name
  bases_S20170C1, 15,
  &(vtc_S20170C1[0]), // expected_vtbl_contents
  &(vtt_S20170C1[0]), // expected_vtt_contents
  ABISELECT(256,120), // object size
  NSPAIRA(_ZTI8S20170C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20170C1),143, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20170C1),30, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1802C3  : S1C11_nt {
  virtual void  v4(); // _ZN7S1802C32v4Ev
  virtual void  v5(); // _ZN7S1802C32v5Ev
  virtual void  v6(); // _ZN7S1802C32v6Ev
  virtual void  v7(); // _ZN7S1802C32v7Ev
  virtual void  v8(); // _ZN7S1802C32v8Ev
  virtual void  v9(); // _ZN7S1802C32v9Ev
  virtual void  v10(); // _ZN7S1802C33v10Ev
  virtual void  v11(); // _ZN7S1802C33v11Ev
  virtual void  v12(); // _ZN7S1802C33v12Ev
  virtual void  v13(); // _ZN7S1802C33v13Ev
  virtual void  v14(); // _ZN7S1802C33v14Ev
  virtual void  v15(); // _ZN7S1802C33v15Ev
  virtual void  v16(); // _ZN7S1802C33v16Ev
  virtual void  v17(); // _ZN7S1802C33v17Ev
  virtual void  v18(); // _ZN7S1802C33v18Ev
  virtual void  v19(); // _ZN7S1802C33v19Ev
  virtual void  v20(); // _ZN7S1802C33v20Ev
  virtual void  v21(); // _ZN7S1802C33v21Ev
  virtual void  v22(); // _ZN7S1802C33v22Ev
  virtual void  v23(); // _ZN7S1802C33v23Ev
  virtual void  v24(); // _ZN7S1802C33v24Ev
  virtual void  v25(); // _ZN7S1802C33v25Ev
  virtual void  v26(); // _ZN7S1802C33v26Ev
  virtual void  v27(); // _ZN7S1802C33v27Ev
  virtual void  v28(); // _ZN7S1802C33v28Ev
  virtual void  v29(); // _ZN7S1802C33v29Ev
  virtual void  v30(); // _ZN7S1802C33v30Ev
  virtual void  v31(); // _ZN7S1802C33v31Ev
  virtual void  v32(); // _ZN7S1802C33v32Ev
  virtual void  v33(); // _ZN7S1802C33v33Ev
  virtual void  v34(); // _ZN7S1802C33v34Ev
  virtual void  v35(); // _ZN7S1802C33v35Ev
  virtual void  v36(); // _ZN7S1802C33v36Ev
  virtual void  v37(); // _ZN7S1802C33v37Ev
  virtual void  v38(); // _ZN7S1802C33v38Ev
  virtual void  v39(); // _ZN7S1802C33v39Ev
  virtual void  v40(); // _ZN7S1802C33v40Ev
  virtual void  v41(); // _ZN7S1802C33v41Ev
  virtual void  v42(); // _ZN7S1802C33v42Ev
  virtual void  v43(); // _ZN7S1802C33v43Ev
  virtual void  v44(); // _ZN7S1802C33v44Ev
  virtual void  v45(); // _ZN7S1802C33v45Ev
  virtual void  v46(); // _ZN7S1802C33v46Ev
  ~S1802C3(); // tgen
  S1802C3(); // tgen
};
//SIG(-1 S1802C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1802C3 ::v4(){vfunc_called(this, "_ZN7S1802C32v4Ev");}
void  S1802C3 ::v5(){vfunc_called(this, "_ZN7S1802C32v5Ev");}
void  S1802C3 ::v6(){vfunc_called(this, "_ZN7S1802C32v6Ev");}
void  S1802C3 ::v7(){vfunc_called(this, "_ZN7S1802C32v7Ev");}
void  S1802C3 ::v8(){vfunc_called(this, "_ZN7S1802C32v8Ev");}
void  S1802C3 ::v9(){vfunc_called(this, "_ZN7S1802C32v9Ev");}
void  S1802C3 ::v10(){vfunc_called(this, "_ZN7S1802C33v10Ev");}
void  S1802C3 ::v11(){vfunc_called(this, "_ZN7S1802C33v11Ev");}
void  S1802C3 ::v12(){vfunc_called(this, "_ZN7S1802C33v12Ev");}
void  S1802C3 ::v13(){vfunc_called(this, "_ZN7S1802C33v13Ev");}
void  S1802C3 ::v14(){vfunc_called(this, "_ZN7S1802C33v14Ev");}
void  S1802C3 ::v15(){vfunc_called(this, "_ZN7S1802C33v15Ev");}
void  S1802C3 ::v16(){vfunc_called(this, "_ZN7S1802C33v16Ev");}
void  S1802C3 ::v17(){vfunc_called(this, "_ZN7S1802C33v17Ev");}
void  S1802C3 ::v18(){vfunc_called(this, "_ZN7S1802C33v18Ev");}
void  S1802C3 ::v19(){vfunc_called(this, "_ZN7S1802C33v19Ev");}
void  S1802C3 ::v20(){vfunc_called(this, "_ZN7S1802C33v20Ev");}
void  S1802C3 ::v21(){vfunc_called(this, "_ZN7S1802C33v21Ev");}
void  S1802C3 ::v22(){vfunc_called(this, "_ZN7S1802C33v22Ev");}
void  S1802C3 ::v23(){vfunc_called(this, "_ZN7S1802C33v23Ev");}
void  S1802C3 ::v24(){vfunc_called(this, "_ZN7S1802C33v24Ev");}
void  S1802C3 ::v25(){vfunc_called(this, "_ZN7S1802C33v25Ev");}
void  S1802C3 ::v26(){vfunc_called(this, "_ZN7S1802C33v26Ev");}
void  S1802C3 ::v27(){vfunc_called(this, "_ZN7S1802C33v27Ev");}
void  S1802C3 ::v28(){vfunc_called(this, "_ZN7S1802C33v28Ev");}
void  S1802C3 ::v29(){vfunc_called(this, "_ZN7S1802C33v29Ev");}
void  S1802C3 ::v30(){vfunc_called(this, "_ZN7S1802C33v30Ev");}
void  S1802C3 ::v31(){vfunc_called(this, "_ZN7S1802C33v31Ev");}
void  S1802C3 ::v32(){vfunc_called(this, "_ZN7S1802C33v32Ev");}
void  S1802C3 ::v33(){vfunc_called(this, "_ZN7S1802C33v33Ev");}
void  S1802C3 ::v34(){vfunc_called(this, "_ZN7S1802C33v34Ev");}
void  S1802C3 ::v35(){vfunc_called(this, "_ZN7S1802C33v35Ev");}
void  S1802C3 ::v36(){vfunc_called(this, "_ZN7S1802C33v36Ev");}
void  S1802C3 ::v37(){vfunc_called(this, "_ZN7S1802C33v37Ev");}
void  S1802C3 ::v38(){vfunc_called(this, "_ZN7S1802C33v38Ev");}
void  S1802C3 ::v39(){vfunc_called(this, "_ZN7S1802C33v39Ev");}
void  S1802C3 ::v40(){vfunc_called(this, "_ZN7S1802C33v40Ev");}
void  S1802C3 ::v41(){vfunc_called(this, "_ZN7S1802C33v41Ev");}
void  S1802C3 ::v42(){vfunc_called(this, "_ZN7S1802C33v42Ev");}
void  S1802C3 ::v43(){vfunc_called(this, "_ZN7S1802C33v43Ev");}
void  S1802C3 ::v44(){vfunc_called(this, "_ZN7S1802C33v44Ev");}
void  S1802C3 ::v45(){vfunc_called(this, "_ZN7S1802C33v45Ev");}
void  S1802C3 ::v46(){vfunc_called(this, "_ZN7S1802C33v46Ev");}
S1802C3 ::~S1802C3(){ note_dtor("S1802C3", this);} // tgen
S1802C3 ::S1802C3(){ note_ctor("S1802C3", this);} // tgen

static void Test_S1802C3()
{
  extern Class_Descriptor cd_S1802C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1802C3, buf);
    S1802C3 *dp, &lv = *(dp=new (buf) S1802C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1802C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1802C3)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S1802C3");
    test_class_info(&lv, &cd_S1802C3);
    dp->~S1802C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1802C3(Test_S1802C3, "S1802C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1802C3C1Ev();
extern void _ZN7S1802C3D1Ev();
Name_Map name_map_S1802C3[] = {
  NSPAIR(_ZN7S1802C3C1Ev),
  NSPAIR(_ZN7S1802C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S1802C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1802C3[];
extern void _ZN7S1802C3D1Ev();
extern void _ZN7S1802C3D0Ev();
extern void _ZN7S1802C32v4Ev();
extern void _ZN7S1802C32v5Ev();
extern void _ZN7S1802C32v6Ev();
extern void _ZN7S1802C32v7Ev();
extern void _ZN7S1802C32v8Ev();
extern void _ZN7S1802C32v9Ev();
extern void _ZN7S1802C33v10Ev();
extern void _ZN7S1802C33v11Ev();
extern void _ZN7S1802C33v12Ev();
extern void _ZN7S1802C33v13Ev();
extern void _ZN7S1802C33v14Ev();
extern void _ZN7S1802C33v15Ev();
extern void _ZN7S1802C33v16Ev();
extern void _ZN7S1802C33v17Ev();
extern void _ZN7S1802C33v18Ev();
extern void _ZN7S1802C33v19Ev();
extern void _ZN7S1802C33v20Ev();
extern void _ZN7S1802C33v21Ev();
extern void _ZN7S1802C33v22Ev();
extern void _ZN7S1802C33v23Ev();
extern void _ZN7S1802C33v24Ev();
extern void _ZN7S1802C33v25Ev();
extern void _ZN7S1802C33v26Ev();
extern void _ZN7S1802C33v27Ev();
extern void _ZN7S1802C33v28Ev();
extern void _ZN7S1802C33v29Ev();
extern void _ZN7S1802C33v30Ev();
extern void _ZN7S1802C33v31Ev();
extern void _ZN7S1802C33v32Ev();
extern void _ZN7S1802C33v33Ev();
extern void _ZN7S1802C33v34Ev();
extern void _ZN7S1802C33v35Ev();
extern void _ZN7S1802C33v36Ev();
extern void _ZN7S1802C33v37Ev();
extern void _ZN7S1802C33v38Ev();
extern void _ZN7S1802C33v39Ev();
extern void _ZN7S1802C33v40Ev();
extern void _ZN7S1802C33v41Ev();
extern void _ZN7S1802C33v42Ev();
extern void _ZN7S1802C33v43Ev();
extern void _ZN7S1802C33v44Ev();
extern void _ZN7S1802C33v45Ev();
extern void _ZN7S1802C33v46Ev();
static  VTBL_ENTRY vtc_S1802C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1802C3[0]),
  (VTBL_ENTRY)&_ZN7S1802C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1802C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1802C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1802C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1802C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1802C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1802C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1802C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v46Ev,
};
extern VTBL_ENTRY _ZTI7S1802C3[];
extern  VTBL_ENTRY _ZTV7S1802C3[];
Class_Descriptor cd_S1802C3 = {  "S1802C3", // class name
  bases_S1802C3, 1,
  &(vtc_S1802C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1802C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1802C3),47, //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  S1802C2  : S1802C3 {
  virtual void  v47(); // _ZN7S1802C23v47Ev
  virtual void  v48(); // _ZN7S1802C23v48Ev
  virtual void  v49(); // _ZN7S1802C23v49Ev
  virtual void  v50(); // _ZN7S1802C23v50Ev
  ~S1802C2(); // tgen
  S1802C2(); // tgen
};
//SIG(-1 S1802C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4}


void  S1802C2 ::v47(){vfunc_called(this, "_ZN7S1802C23v47Ev");}
void  S1802C2 ::v48(){vfunc_called(this, "_ZN7S1802C23v48Ev");}
void  S1802C2 ::v49(){vfunc_called(this, "_ZN7S1802C23v49Ev");}
void  S1802C2 ::v50(){vfunc_called(this, "_ZN7S1802C23v50Ev");}
S1802C2 ::~S1802C2(){ note_dtor("S1802C2", this);} // tgen
S1802C2 ::S1802C2(){ note_ctor("S1802C2", this);} // tgen

static void Test_S1802C2()
{
  extern Class_Descriptor cd_S1802C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1802C2, buf);
    S1802C2 *dp, &lv = *(dp=new (buf) S1802C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1802C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1802C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S1802C3*), 0, "S1802C2");
    check_base_class_offset(lv, (S1802C3*), 0, "S1802C2");
    test_class_info(&lv, &cd_S1802C2);
    dp->~S1802C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1802C2(Test_S1802C2, "S1802C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1802C2C1Ev();
extern void _ZN7S1802C2D1Ev();
Name_Map name_map_S1802C2[] = {
  NSPAIR(_ZN7S1802C2C1Ev),
  NSPAIR(_ZN7S1802C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1802C3;
extern VTBL_ENTRY _ZTI7S1802C3[];
extern  VTBL_ENTRY _ZTV7S1802C3[];
static Base_Class bases_S1802C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1802C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1802C2[];
extern void _ZN7S1802C2D1Ev();
extern void _ZN7S1802C2D0Ev();
extern void _ZN7S1802C32v4Ev();
extern void _ZN7S1802C32v5Ev();
extern void _ZN7S1802C32v6Ev();
extern void _ZN7S1802C32v7Ev();
extern void _ZN7S1802C32v8Ev();
extern void _ZN7S1802C32v9Ev();
extern void _ZN7S1802C33v10Ev();
extern void _ZN7S1802C33v11Ev();
extern void _ZN7S1802C33v12Ev();
extern void _ZN7S1802C33v13Ev();
extern void _ZN7S1802C33v14Ev();
extern void _ZN7S1802C33v15Ev();
extern void _ZN7S1802C33v16Ev();
extern void _ZN7S1802C33v17Ev();
extern void _ZN7S1802C33v18Ev();
extern void _ZN7S1802C33v19Ev();
extern void _ZN7S1802C33v20Ev();
extern void _ZN7S1802C33v21Ev();
extern void _ZN7S1802C33v22Ev();
extern void _ZN7S1802C33v23Ev();
extern void _ZN7S1802C33v24Ev();
extern void _ZN7S1802C33v25Ev();
extern void _ZN7S1802C33v26Ev();
extern void _ZN7S1802C33v27Ev();
extern void _ZN7S1802C33v28Ev();
extern void _ZN7S1802C33v29Ev();
extern void _ZN7S1802C33v30Ev();
extern void _ZN7S1802C33v31Ev();
extern void _ZN7S1802C33v32Ev();
extern void _ZN7S1802C33v33Ev();
extern void _ZN7S1802C33v34Ev();
extern void _ZN7S1802C33v35Ev();
extern void _ZN7S1802C33v36Ev();
extern void _ZN7S1802C33v37Ev();
extern void _ZN7S1802C33v38Ev();
extern void _ZN7S1802C33v39Ev();
extern void _ZN7S1802C33v40Ev();
extern void _ZN7S1802C33v41Ev();
extern void _ZN7S1802C33v42Ev();
extern void _ZN7S1802C33v43Ev();
extern void _ZN7S1802C33v44Ev();
extern void _ZN7S1802C33v45Ev();
extern void _ZN7S1802C33v46Ev();
extern void _ZN7S1802C23v47Ev();
extern void _ZN7S1802C23v48Ev();
extern void _ZN7S1802C23v49Ev();
extern void _ZN7S1802C23v50Ev();
static  VTBL_ENTRY vtc_S1802C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1802C2[0]),
  (VTBL_ENTRY)&_ZN7S1802C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1802C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1802C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1802C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1802C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1802C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1802C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1802C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1802C23v47Ev,
  (VTBL_ENTRY)&_ZN7S1802C23v48Ev,
  (VTBL_ENTRY)&_ZN7S1802C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1802C23v50Ev,
};
extern VTBL_ENTRY _ZTI7S1802C2[];
extern  VTBL_ENTRY _ZTV7S1802C2[];
Class_Descriptor cd_S1802C2 = {  "S1802C2", // class name
  bases_S1802C2, 2,
  &(vtc_S1802C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1802C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1802C2),51, //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  S1802C1  : S1802C2 {
  virtual void  v1(); // _ZN7S1802C12v1Ev
  virtual void  v2(); // _ZN7S1802C12v2Ev
  virtual void  v3(); // _ZN7S1802C12v3Ev
  ~S1802C1(); // tgen
  S1802C1(); // tgen
};
//SIG(1 S1802C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1 v2 v3}


void  S1802C1 ::v1(){vfunc_called(this, "_ZN7S1802C12v1Ev");}
void  S1802C1 ::v2(){vfunc_called(this, "_ZN7S1802C12v2Ev");}
void  S1802C1 ::v3(){vfunc_called(this, "_ZN7S1802C12v3Ev");}
S1802C1 ::~S1802C1(){ note_dtor("S1802C1", this);} // tgen
S1802C1 ::S1802C1(){ note_ctor("S1802C1", this);} // tgen

static void Test_S1802C1()
{
  extern Class_Descriptor cd_S1802C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1802C1, buf);
    S1802C1 *dp, &lv = *(dp=new (buf) S1802C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1802C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1802C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S1802C3*)(S1802C2*), 0, "S1802C1");
    check_base_class_offset(lv, (S1802C3*)(S1802C2*), 0, "S1802C1");
    check_base_class_offset(lv, (S1802C2*), 0, "S1802C1");
    test_class_info(&lv, &cd_S1802C1);
    dp->~S1802C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1802C1(Test_S1802C1, "S1802C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1802C1C1Ev();
extern void _ZN7S1802C1D1Ev();
Name_Map name_map_S1802C1[] = {
  NSPAIR(_ZN7S1802C1C1Ev),
  NSPAIR(_ZN7S1802C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1802C3;
extern VTBL_ENTRY _ZTI7S1802C3[];
extern  VTBL_ENTRY _ZTV7S1802C3[];
extern Class_Descriptor cd_S1802C2;
extern VTBL_ENTRY _ZTI7S1802C2[];
extern  VTBL_ENTRY _ZTV7S1802C2[];
static Base_Class bases_S1802C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1802C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1802C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1802C1[];
extern void _ZN7S1802C1D1Ev();
extern void _ZN7S1802C1D0Ev();
extern void _ZN7S1802C32v4Ev();
extern void _ZN7S1802C32v5Ev();
extern void _ZN7S1802C32v6Ev();
extern void _ZN7S1802C32v7Ev();
extern void _ZN7S1802C32v8Ev();
extern void _ZN7S1802C32v9Ev();
extern void _ZN7S1802C33v10Ev();
extern void _ZN7S1802C33v11Ev();
extern void _ZN7S1802C33v12Ev();
extern void _ZN7S1802C33v13Ev();
extern void _ZN7S1802C33v14Ev();
extern void _ZN7S1802C33v15Ev();
extern void _ZN7S1802C33v16Ev();
extern void _ZN7S1802C33v17Ev();
extern void _ZN7S1802C33v18Ev();
extern void _ZN7S1802C33v19Ev();
extern void _ZN7S1802C33v20Ev();
extern void _ZN7S1802C33v21Ev();
extern void _ZN7S1802C33v22Ev();
extern void _ZN7S1802C33v23Ev();
extern void _ZN7S1802C33v24Ev();
extern void _ZN7S1802C33v25Ev();
extern void _ZN7S1802C33v26Ev();
extern void _ZN7S1802C33v27Ev();
extern void _ZN7S1802C33v28Ev();
extern void _ZN7S1802C33v29Ev();
extern void _ZN7S1802C33v30Ev();
extern void _ZN7S1802C33v31Ev();
extern void _ZN7S1802C33v32Ev();
extern void _ZN7S1802C33v33Ev();
extern void _ZN7S1802C33v34Ev();
extern void _ZN7S1802C33v35Ev();
extern void _ZN7S1802C33v36Ev();
extern void _ZN7S1802C33v37Ev();
extern void _ZN7S1802C33v38Ev();
extern void _ZN7S1802C33v39Ev();
extern void _ZN7S1802C33v40Ev();
extern void _ZN7S1802C33v41Ev();
extern void _ZN7S1802C33v42Ev();
extern void _ZN7S1802C33v43Ev();
extern void _ZN7S1802C33v44Ev();
extern void _ZN7S1802C33v45Ev();
extern void _ZN7S1802C33v46Ev();
extern void _ZN7S1802C23v47Ev();
extern void _ZN7S1802C23v48Ev();
extern void _ZN7S1802C23v49Ev();
extern void _ZN7S1802C23v50Ev();
extern void _ZN7S1802C12v1Ev();
extern void _ZN7S1802C12v2Ev();
extern void _ZN7S1802C12v3Ev();
static  VTBL_ENTRY vtc_S1802C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1802C1[0]),
  (VTBL_ENTRY)&_ZN7S1802C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1802C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1802C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1802C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1802C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1802C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1802C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1802C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1802C33v46Ev,
  (VTBL_ENTRY)&_ZN7S1802C23v47Ev,
  (VTBL_ENTRY)&_ZN7S1802C23v48Ev,
  (VTBL_ENTRY)&_ZN7S1802C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1802C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1802C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1802C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1802C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1802C1[];
extern  VTBL_ENTRY _ZTV7S1802C1[];
Class_Descriptor cd_S1802C1 = {  "S1802C1", // class name
  bases_S1802C1, 3,
  &(vtc_S1802C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1802C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1802C1),54, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2051C4  {
  virtual  ~S2051C4(); // _ZN7S2051C4D1Ev
  virtual void  v17(); // _ZN7S2051C43v17Ev
  virtual void  v18(); // _ZN7S2051C43v18Ev
  virtual void  v19(); // _ZN7S2051C43v19Ev
  S2051C4(); // tgen
};
//SIG(-1 S2051C4) C1{ vd v1 v2 v3}


 S2051C4 ::~S2051C4(){ note_dtor("S2051C4", this);}
void  S2051C4 ::v17(){vfunc_called(this, "_ZN7S2051C43v17Ev");}
void  S2051C4 ::v18(){vfunc_called(this, "_ZN7S2051C43v18Ev");}
void  S2051C4 ::v19(){vfunc_called(this, "_ZN7S2051C43v19Ev");}
S2051C4 ::S2051C4(){ note_ctor("S2051C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2051C4C1Ev();
extern void _ZN7S2051C4D1Ev();
Name_Map name_map_S2051C4[] = {
  NSPAIR(_ZN7S2051C4C1Ev),
  NSPAIR(_ZN7S2051C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2051C4[];
extern void _ZN7S2051C4D1Ev();
extern void _ZN7S2051C4D0Ev();
extern void _ZN7S2051C43v17Ev();
extern void _ZN7S2051C43v18Ev();
extern void _ZN7S2051C43v19Ev();
static  VTBL_ENTRY vtc_S2051C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2051C4[0]),
  (VTBL_ENTRY)&_ZN7S2051C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2051C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2051C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2051C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2051C43v19Ev,
};
extern VTBL_ENTRY _ZTI7S2051C4[];
extern  VTBL_ENTRY _ZTV7S2051C4[];
Class_Descriptor cd_S2051C4 = {  "S2051C4", // class name
  0,0,//no base classes
  &(vtc_S2051C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2051C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2051C4),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  S2051C3  : S2051C4 {
  ::S5166C36 s2051c3f0;
  ::S2355C13_nt s2051c3f1;
  char s2051c3f2;
  virtual  ~S2051C3(); // _ZN7S2051C3D1Ev
  virtual void  v20(); // _ZN7S2051C33v20Ev
  virtual void  v21(); // _ZN7S2051C33v21Ev
  virtual void  v22(); // _ZN7S2051C33v22Ev
  S2051C3(); // tgen
};
//SIG(-1 S2051C3) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2051C3 ::~S2051C3(){ note_dtor("S2051C3", this);}
void  S2051C3 ::v20(){vfunc_called(this, "_ZN7S2051C33v20Ev");}
void  S2051C3 ::v21(){vfunc_called(this, "_ZN7S2051C33v21Ev");}
void  S2051C3 ::v22(){vfunc_called(this, "_ZN7S2051C33v22Ev");}
S2051C3 ::S2051C3(){ note_ctor("S2051C3", this);} // tgen

static void Test_S2051C3()
{
  extern Class_Descriptor cd_S2051C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2051C3, buf);
    S2051C3 *dp, &lv = *(dp=new (buf) S2051C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2051C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2051C3)");
    check_base_class_offset(lv, (S2051C4*), 0, "S2051C3");
    check_field_offset(lv, s2051c3f0, ABISELECT(8,4), "S2051C3.s2051c3f0");
    check_field_offset(lv, s2051c3f1, ABISELECT(32,20), "S2051C3.s2051c3f1");
    check_field_offset(lv, s2051c3f2, ABISELECT(64,52), "S2051C3.s2051c3f2");
    test_class_info(&lv, &cd_S2051C3);
    dp->~S2051C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2051C3(Test_S2051C3, "S2051C3", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2051C3C1Ev();
extern void _ZN7S2051C3D1Ev();
Name_Map name_map_S2051C3[] = {
  NSPAIR(_ZN7S2051C3C1Ev),
  NSPAIR(_ZN7S2051C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2051C4;
extern VTBL_ENTRY _ZTI7S2051C4[];
extern  VTBL_ENTRY _ZTV7S2051C4[];
static Base_Class bases_S2051C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2051C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2051C3[];
extern void _ZN7S2051C3D1Ev();
extern void _ZN7S2051C3D0Ev();
extern void _ZN7S2051C43v17Ev();
extern void _ZN7S2051C43v18Ev();
extern void _ZN7S2051C43v19Ev();
extern void _ZN7S2051C33v20Ev();
extern void _ZN7S2051C33v21Ev();
extern void _ZN7S2051C33v22Ev();
static  VTBL_ENTRY vtc_S2051C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2051C3[0]),
  (VTBL_ENTRY)&_ZN7S2051C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2051C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2051C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2051C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2051C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2051C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2051C33v21Ev,
  (VTBL_ENTRY)&_ZN7S2051C33v22Ev,
};
extern VTBL_ENTRY _ZTI7S2051C3[];
extern  VTBL_ENTRY _ZTV7S2051C3[];
Class_Descriptor cd_S2051C3 = {  "S2051C3", // class name
  bases_S2051C3, 1,
  &(vtc_S2051C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2051C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2051C3),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  S2051C2  : S2051C3 {
  virtual  ~S2051C2(); // _ZN7S2051C2D1Ev
  virtual void  v23(); // _ZN7S2051C23v23Ev
  virtual void  v24(); // _ZN7S2051C23v24Ev
  virtual void  v25(); // _ZN7S2051C23v25Ev
  virtual void  v26(); // _ZN7S2051C23v26Ev
  virtual void  v27(); // _ZN7S2051C23v27Ev
  virtual void  v28(); // _ZN7S2051C23v28Ev
  virtual void  v29(); // _ZN7S2051C23v29Ev
  virtual void  v30(); // _ZN7S2051C23v30Ev
  virtual void  v31(); // _ZN7S2051C23v31Ev
  virtual void  v32(); // _ZN7S2051C23v32Ev
  virtual void  v33(); // _ZN7S2051C23v33Ev
  virtual void  v34(); // _ZN7S2051C23v34Ev
  virtual void  v35(); // _ZN7S2051C23v35Ev
  virtual void  v36(); // _ZN7S2051C23v36Ev
  virtual void  v37(); // _ZN7S2051C23v37Ev
  virtual void  v38(); // _ZN7S2051C23v38Ev
  S2051C2(); // tgen
};
//SIG(-1 S2051C2) C1{ BC2{ BC3{ vd v17 v18 v19} vd v20 v21 v22 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


 S2051C2 ::~S2051C2(){ note_dtor("S2051C2", this);}
void  S2051C2 ::v23(){vfunc_called(this, "_ZN7S2051C23v23Ev");}
void  S2051C2 ::v24(){vfunc_called(this, "_ZN7S2051C23v24Ev");}
void  S2051C2 ::v25(){vfunc_called(this, "_ZN7S2051C23v25Ev");}
void  S2051C2 ::v26(){vfunc_called(this, "_ZN7S2051C23v26Ev");}
void  S2051C2 ::v27(){vfunc_called(this, "_ZN7S2051C23v27Ev");}
void  S2051C2 ::v28(){vfunc_called(this, "_ZN7S2051C23v28Ev");}
void  S2051C2 ::v29(){vfunc_called(this, "_ZN7S2051C23v29Ev");}
void  S2051C2 ::v30(){vfunc_called(this, "_ZN7S2051C23v30Ev");}
void  S2051C2 ::v31(){vfunc_called(this, "_ZN7S2051C23v31Ev");}
void  S2051C2 ::v32(){vfunc_called(this, "_ZN7S2051C23v32Ev");}
void  S2051C2 ::v33(){vfunc_called(this, "_ZN7S2051C23v33Ev");}
void  S2051C2 ::v34(){vfunc_called(this, "_ZN7S2051C23v34Ev");}
void  S2051C2 ::v35(){vfunc_called(this, "_ZN7S2051C23v35Ev");}
void  S2051C2 ::v36(){vfunc_called(this, "_ZN7S2051C23v36Ev");}
void  S2051C2 ::v37(){vfunc_called(this, "_ZN7S2051C23v37Ev");}
void  S2051C2 ::v38(){vfunc_called(this, "_ZN7S2051C23v38Ev");}
S2051C2 ::S2051C2(){ note_ctor("S2051C2", this);} // tgen

static void Test_S2051C2()
{
  extern Class_Descriptor cd_S2051C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2051C2, buf);
    S2051C2 *dp, &lv = *(dp=new (buf) S2051C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2051C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2051C2)");
    check_base_class_offset(lv, (S2051C4*)(S2051C3*), 0, "S2051C2");
    check_base_class_offset(lv, (S2051C3*), 0, "S2051C2");
    test_class_info(&lv, &cd_S2051C2);
    dp->~S2051C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2051C2(Test_S2051C2, "S2051C2", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2051C2C1Ev();
extern void _ZN7S2051C2D1Ev();
Name_Map name_map_S2051C2[] = {
  NSPAIR(_ZN7S2051C2C1Ev),
  NSPAIR(_ZN7S2051C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2051C4;
extern VTBL_ENTRY _ZTI7S2051C4[];
extern  VTBL_ENTRY _ZTV7S2051C4[];
extern Class_Descriptor cd_S2051C3;
extern VTBL_ENTRY _ZTI7S2051C3[];
extern  VTBL_ENTRY _ZTV7S2051C3[];
static Base_Class bases_S2051C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2051C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2051C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2051C2[];
extern void _ZN7S2051C2D1Ev();
extern void _ZN7S2051C2D0Ev();
extern void _ZN7S2051C43v17Ev();
extern void _ZN7S2051C43v18Ev();
extern void _ZN7S2051C43v19Ev();
extern void _ZN7S2051C33v20Ev();
extern void _ZN7S2051C33v21Ev();
extern void _ZN7S2051C33v22Ev();
extern void _ZN7S2051C23v23Ev();
extern void _ZN7S2051C23v24Ev();
extern void _ZN7S2051C23v25Ev();
extern void _ZN7S2051C23v26Ev();
extern void _ZN7S2051C23v27Ev();
extern void _ZN7S2051C23v28Ev();
extern void _ZN7S2051C23v29Ev();
extern void _ZN7S2051C23v30Ev();
extern void _ZN7S2051C23v31Ev();
extern void _ZN7S2051C23v32Ev();
extern void _ZN7S2051C23v33Ev();
extern void _ZN7S2051C23v34Ev();
extern void _ZN7S2051C23v35Ev();
extern void _ZN7S2051C23v36Ev();
extern void _ZN7S2051C23v37Ev();
extern void _ZN7S2051C23v38Ev();
static  VTBL_ENTRY vtc_S2051C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2051C2[0]),
  (VTBL_ENTRY)&_ZN7S2051C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2051C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2051C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2051C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2051C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2051C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2051C33v21Ev,
  (VTBL_ENTRY)&_ZN7S2051C33v22Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v23Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v24Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v25Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v26Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v27Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v28Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v29Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v30Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v36Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v37Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v38Ev,
};
extern VTBL_ENTRY _ZTI7S2051C2[];
extern  VTBL_ENTRY _ZTV7S2051C2[];
Class_Descriptor cd_S2051C2 = {  "S2051C2", // class name
  bases_S2051C2, 2,
  &(vtc_S2051C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2051C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2051C2),26, //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  S2051C1  : S2051C2 {
  void *s2051c1f0;
  int s2051c1f1;
  char s2051c1f2;
  virtual  ~S2051C1(); // _ZN7S2051C1D1Ev
  virtual void  v1(); // _ZN7S2051C12v1Ev
  virtual void  v2(); // _ZN7S2051C12v2Ev
  virtual void  v3(); // _ZN7S2051C12v3Ev
  virtual void  v4(); // _ZN7S2051C12v4Ev
  virtual void  v5(); // _ZN7S2051C12v5Ev
  virtual void  v6(); // _ZN7S2051C12v6Ev
  virtual void  v7(); // _ZN7S2051C12v7Ev
  virtual void  v8(); // _ZN7S2051C12v8Ev
  virtual void  v9(); // _ZN7S2051C12v9Ev
  virtual void  v10(); // _ZN7S2051C13v10Ev
  virtual void  v11(); // _ZN7S2051C13v11Ev
  virtual void  v12(); // _ZN7S2051C13v12Ev
  virtual void  v13(); // _ZN7S2051C13v13Ev
  virtual void  v14(); // _ZN7S2051C13v14Ev
  virtual void  v15(); // _ZN7S2051C13v15Ev
  virtual void  v16(); // _ZN7S2051C13v16Ev
  S2051C1(); // tgen
};
//SIG(1 S2051C1) C1{ BC2{ BC3{ BC4{ vd v17 v18 v19} vd v20 v21 v22 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FL[4]} Fc} vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp Fi Fc}


 S2051C1 ::~S2051C1(){ note_dtor("S2051C1", this);}
void  S2051C1 ::v1(){vfunc_called(this, "_ZN7S2051C12v1Ev");}
void  S2051C1 ::v2(){vfunc_called(this, "_ZN7S2051C12v2Ev");}
void  S2051C1 ::v3(){vfunc_called(this, "_ZN7S2051C12v3Ev");}
void  S2051C1 ::v4(){vfunc_called(this, "_ZN7S2051C12v4Ev");}
void  S2051C1 ::v5(){vfunc_called(this, "_ZN7S2051C12v5Ev");}
void  S2051C1 ::v6(){vfunc_called(this, "_ZN7S2051C12v6Ev");}
void  S2051C1 ::v7(){vfunc_called(this, "_ZN7S2051C12v7Ev");}
void  S2051C1 ::v8(){vfunc_called(this, "_ZN7S2051C12v8Ev");}
void  S2051C1 ::v9(){vfunc_called(this, "_ZN7S2051C12v9Ev");}
void  S2051C1 ::v10(){vfunc_called(this, "_ZN7S2051C13v10Ev");}
void  S2051C1 ::v11(){vfunc_called(this, "_ZN7S2051C13v11Ev");}
void  S2051C1 ::v12(){vfunc_called(this, "_ZN7S2051C13v12Ev");}
void  S2051C1 ::v13(){vfunc_called(this, "_ZN7S2051C13v13Ev");}
void  S2051C1 ::v14(){vfunc_called(this, "_ZN7S2051C13v14Ev");}
void  S2051C1 ::v15(){vfunc_called(this, "_ZN7S2051C13v15Ev");}
void  S2051C1 ::v16(){vfunc_called(this, "_ZN7S2051C13v16Ev");}
S2051C1 ::S2051C1(){ note_ctor("S2051C1", this);} // tgen

static void Test_S2051C1()
{
  extern Class_Descriptor cd_S2051C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,18)];
    init_test(&cd_S2051C1, buf);
    S2051C1 *dp, &lv = *(dp=new (buf) S2051C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S2051C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2051C1)");
    check_base_class_offset(lv, (S2051C4*)(S2051C3*)(S2051C2*), 0, "S2051C1");
    check_base_class_offset(lv, (S2051C3*)(S2051C2*), 0, "S2051C1");
    check_base_class_offset(lv, (S2051C2*), 0, "S2051C1");
    check_field_offset(lv, s2051c1f0, ABISELECT(72,56), "S2051C1.s2051c1f0");
    check_field_offset(lv, s2051c1f1, ABISELECT(80,60), "S2051C1.s2051c1f1");
    check_field_offset(lv, s2051c1f2, ABISELECT(84,64), "S2051C1.s2051c1f2");
    test_class_info(&lv, &cd_S2051C1);
    dp->~S2051C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2051C1(Test_S2051C1, "S2051C1", ABISELECT(88,68));

#else // __cplusplus

extern void _ZN7S2051C1C1Ev();
extern void _ZN7S2051C1D1Ev();
Name_Map name_map_S2051C1[] = {
  NSPAIR(_ZN7S2051C1C1Ev),
  NSPAIR(_ZN7S2051C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2051C4;
extern VTBL_ENTRY _ZTI7S2051C4[];
extern  VTBL_ENTRY _ZTV7S2051C4[];
extern Class_Descriptor cd_S2051C3;
extern VTBL_ENTRY _ZTI7S2051C3[];
extern  VTBL_ENTRY _ZTV7S2051C3[];
extern Class_Descriptor cd_S2051C2;
extern VTBL_ENTRY _ZTI7S2051C2[];
extern  VTBL_ENTRY _ZTV7S2051C2[];
static Base_Class bases_S2051C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2051C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2051C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2051C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2051C1[];
extern void _ZN7S2051C1D1Ev();
extern void _ZN7S2051C1D0Ev();
extern void _ZN7S2051C43v17Ev();
extern void _ZN7S2051C43v18Ev();
extern void _ZN7S2051C43v19Ev();
extern void _ZN7S2051C33v20Ev();
extern void _ZN7S2051C33v21Ev();
extern void _ZN7S2051C33v22Ev();
extern void _ZN7S2051C23v23Ev();
extern void _ZN7S2051C23v24Ev();
extern void _ZN7S2051C23v25Ev();
extern void _ZN7S2051C23v26Ev();
extern void _ZN7S2051C23v27Ev();
extern void _ZN7S2051C23v28Ev();
extern void _ZN7S2051C23v29Ev();
extern void _ZN7S2051C23v30Ev();
extern void _ZN7S2051C23v31Ev();
extern void _ZN7S2051C23v32Ev();
extern void _ZN7S2051C23v33Ev();
extern void _ZN7S2051C23v34Ev();
extern void _ZN7S2051C23v35Ev();
extern void _ZN7S2051C23v36Ev();
extern void _ZN7S2051C23v37Ev();
extern void _ZN7S2051C23v38Ev();
extern void _ZN7S2051C12v1Ev();
extern void _ZN7S2051C12v2Ev();
extern void _ZN7S2051C12v3Ev();
extern void _ZN7S2051C12v4Ev();
extern void _ZN7S2051C12v5Ev();
extern void _ZN7S2051C12v6Ev();
extern void _ZN7S2051C12v7Ev();
extern void _ZN7S2051C12v8Ev();
extern void _ZN7S2051C12v9Ev();
extern void _ZN7S2051C13v10Ev();
extern void _ZN7S2051C13v11Ev();
extern void _ZN7S2051C13v12Ev();
extern void _ZN7S2051C13v13Ev();
extern void _ZN7S2051C13v14Ev();
extern void _ZN7S2051C13v15Ev();
extern void _ZN7S2051C13v16Ev();
static  VTBL_ENTRY vtc_S2051C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2051C1[0]),
  (VTBL_ENTRY)&_ZN7S2051C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2051C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2051C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2051C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2051C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2051C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2051C33v21Ev,
  (VTBL_ENTRY)&_ZN7S2051C33v22Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v23Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v24Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v25Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v26Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v27Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v28Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v29Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v30Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v36Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v37Ev,
  (VTBL_ENTRY)&_ZN7S2051C23v38Ev,
  (VTBL_ENTRY)&_ZN7S2051C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2051C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2051C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2051C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2051C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2051C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2051C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2051C12v8Ev,
  (VTBL_ENTRY)&_ZN7S2051C12v9Ev,
  (VTBL_ENTRY)&_ZN7S2051C13v10Ev,
  (VTBL_ENTRY)&_ZN7S2051C13v11Ev,
  (VTBL_ENTRY)&_ZN7S2051C13v12Ev,
  (VTBL_ENTRY)&_ZN7S2051C13v13Ev,
  (VTBL_ENTRY)&_ZN7S2051C13v14Ev,
  (VTBL_ENTRY)&_ZN7S2051C13v15Ev,
  (VTBL_ENTRY)&_ZN7S2051C13v16Ev,
};
extern VTBL_ENTRY _ZTI7S2051C1[];
extern  VTBL_ENTRY _ZTV7S2051C1[];
Class_Descriptor cd_S2051C1 = {  "S2051C1", // class name
  bases_S2051C1, 3,
  &(vtc_S2051C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,68), // object size
  NSPAIRA(_ZTI7S2051C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2051C1),42, //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  S1793C3  : S1C11_nt {
  virtual void  v3(); // _ZN7S1793C32v3Ev
  virtual void  v4(); // _ZN7S1793C32v4Ev
  virtual void  v5(); // _ZN7S1793C32v5Ev
  virtual void  v6(); // _ZN7S1793C32v6Ev
  virtual void  v7(); // _ZN7S1793C32v7Ev
  virtual void  v8(); // _ZN7S1793C32v8Ev
  virtual void  v9(); // _ZN7S1793C32v9Ev
  virtual void  v10(); // _ZN7S1793C33v10Ev
  virtual void  v11(); // _ZN7S1793C33v11Ev
  virtual void  v12(); // _ZN7S1793C33v12Ev
  virtual void  v13(); // _ZN7S1793C33v13Ev
  virtual void  v14(); // _ZN7S1793C33v14Ev
  virtual void  v15(); // _ZN7S1793C33v15Ev
  virtual void  v16(); // _ZN7S1793C33v16Ev
  virtual void  v17(); // _ZN7S1793C33v17Ev
  virtual void  v18(); // _ZN7S1793C33v18Ev
  virtual void  v19(); // _ZN7S1793C33v19Ev
  virtual void  v20(); // _ZN7S1793C33v20Ev
  virtual void  v21(); // _ZN7S1793C33v21Ev
  virtual void  v22(); // _ZN7S1793C33v22Ev
  virtual void  v23(); // _ZN7S1793C33v23Ev
  virtual void  v24(); // _ZN7S1793C33v24Ev
  virtual void  v25(); // _ZN7S1793C33v25Ev
  virtual void  v26(); // _ZN7S1793C33v26Ev
  virtual void  v27(); // _ZN7S1793C33v27Ev
  virtual void  v28(); // _ZN7S1793C33v28Ev
  virtual void  v29(); // _ZN7S1793C33v29Ev
  virtual void  v30(); // _ZN7S1793C33v30Ev
  virtual void  v31(); // _ZN7S1793C33v31Ev
  virtual void  v32(); // _ZN7S1793C33v32Ev
  virtual void  v33(); // _ZN7S1793C33v33Ev
  virtual void  v34(); // _ZN7S1793C33v34Ev
  virtual void  v35(); // _ZN7S1793C33v35Ev
  virtual void  v36(); // _ZN7S1793C33v36Ev
  virtual void  v37(); // _ZN7S1793C33v37Ev
  virtual void  v38(); // _ZN7S1793C33v38Ev
  virtual void  v39(); // _ZN7S1793C33v39Ev
  virtual void  v40(); // _ZN7S1793C33v40Ev
  virtual void  v41(); // _ZN7S1793C33v41Ev
  virtual void  v42(); // _ZN7S1793C33v42Ev
  virtual void  v43(); // _ZN7S1793C33v43Ev
  virtual void  v44(); // _ZN7S1793C33v44Ev
  virtual void  v45(); // _ZN7S1793C33v45Ev
  ~S1793C3(); // tgen
  S1793C3(); // tgen
};
//SIG(-1 S1793C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1793C3 ::v3(){vfunc_called(this, "_ZN7S1793C32v3Ev");}
void  S1793C3 ::v4(){vfunc_called(this, "_ZN7S1793C32v4Ev");}
void  S1793C3 ::v5(){vfunc_called(this, "_ZN7S1793C32v5Ev");}
void  S1793C3 ::v6(){vfunc_called(this, "_ZN7S1793C32v6Ev");}
void  S1793C3 ::v7(){vfunc_called(this, "_ZN7S1793C32v7Ev");}
void  S1793C3 ::v8(){vfunc_called(this, "_ZN7S1793C32v8Ev");}
void  S1793C3 ::v9(){vfunc_called(this, "_ZN7S1793C32v9Ev");}
void  S1793C3 ::v10(){vfunc_called(this, "_ZN7S1793C33v10Ev");}
void  S1793C3 ::v11(){vfunc_called(this, "_ZN7S1793C33v11Ev");}
void  S1793C3 ::v12(){vfunc_called(this, "_ZN7S1793C33v12Ev");}
void  S1793C3 ::v13(){vfunc_called(this, "_ZN7S1793C33v13Ev");}
void  S1793C3 ::v14(){vfunc_called(this, "_ZN7S1793C33v14Ev");}
void  S1793C3 ::v15(){vfunc_called(this, "_ZN7S1793C33v15Ev");}
void  S1793C3 ::v16(){vfunc_called(this, "_ZN7S1793C33v16Ev");}
void  S1793C3 ::v17(){vfunc_called(this, "_ZN7S1793C33v17Ev");}
void  S1793C3 ::v18(){vfunc_called(this, "_ZN7S1793C33v18Ev");}
void  S1793C3 ::v19(){vfunc_called(this, "_ZN7S1793C33v19Ev");}
void  S1793C3 ::v20(){vfunc_called(this, "_ZN7S1793C33v20Ev");}
void  S1793C3 ::v21(){vfunc_called(this, "_ZN7S1793C33v21Ev");}
void  S1793C3 ::v22(){vfunc_called(this, "_ZN7S1793C33v22Ev");}
void  S1793C3 ::v23(){vfunc_called(this, "_ZN7S1793C33v23Ev");}
void  S1793C3 ::v24(){vfunc_called(this, "_ZN7S1793C33v24Ev");}
void  S1793C3 ::v25(){vfunc_called(this, "_ZN7S1793C33v25Ev");}
void  S1793C3 ::v26(){vfunc_called(this, "_ZN7S1793C33v26Ev");}
void  S1793C3 ::v27(){vfunc_called(this, "_ZN7S1793C33v27Ev");}
void  S1793C3 ::v28(){vfunc_called(this, "_ZN7S1793C33v28Ev");}
void  S1793C3 ::v29(){vfunc_called(this, "_ZN7S1793C33v29Ev");}
void  S1793C3 ::v30(){vfunc_called(this, "_ZN7S1793C33v30Ev");}
void  S1793C3 ::v31(){vfunc_called(this, "_ZN7S1793C33v31Ev");}
void  S1793C3 ::v32(){vfunc_called(this, "_ZN7S1793C33v32Ev");}
void  S1793C3 ::v33(){vfunc_called(this, "_ZN7S1793C33v33Ev");}
void  S1793C3 ::v34(){vfunc_called(this, "_ZN7S1793C33v34Ev");}
void  S1793C3 ::v35(){vfunc_called(this, "_ZN7S1793C33v35Ev");}
void  S1793C3 ::v36(){vfunc_called(this, "_ZN7S1793C33v36Ev");}
void  S1793C3 ::v37(){vfunc_called(this, "_ZN7S1793C33v37Ev");}
void  S1793C3 ::v38(){vfunc_called(this, "_ZN7S1793C33v38Ev");}
void  S1793C3 ::v39(){vfunc_called(this, "_ZN7S1793C33v39Ev");}
void  S1793C3 ::v40(){vfunc_called(this, "_ZN7S1793C33v40Ev");}
void  S1793C3 ::v41(){vfunc_called(this, "_ZN7S1793C33v41Ev");}
void  S1793C3 ::v42(){vfunc_called(this, "_ZN7S1793C33v42Ev");}
void  S1793C3 ::v43(){vfunc_called(this, "_ZN7S1793C33v43Ev");}
void  S1793C3 ::v44(){vfunc_called(this, "_ZN7S1793C33v44Ev");}
void  S1793C3 ::v45(){vfunc_called(this, "_ZN7S1793C33v45Ev");}
S1793C3 ::~S1793C3(){ note_dtor("S1793C3", this);} // tgen
S1793C3 ::S1793C3(){ note_ctor("S1793C3", this);} // tgen

static void Test_S1793C3()
{
  extern Class_Descriptor cd_S1793C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1793C3, buf);
    S1793C3 *dp, &lv = *(dp=new (buf) S1793C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1793C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1793C3)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S1793C3");
    test_class_info(&lv, &cd_S1793C3);
    dp->~S1793C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1793C3(Test_S1793C3, "S1793C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1793C3C1Ev();
extern void _ZN7S1793C3D1Ev();
Name_Map name_map_S1793C3[] = {
  NSPAIR(_ZN7S1793C3C1Ev),
  NSPAIR(_ZN7S1793C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S1793C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1793C3[];
extern void _ZN7S1793C3D1Ev();
extern void _ZN7S1793C3D0Ev();
extern void _ZN7S1793C32v3Ev();
extern void _ZN7S1793C32v4Ev();
extern void _ZN7S1793C32v5Ev();
extern void _ZN7S1793C32v6Ev();
extern void _ZN7S1793C32v7Ev();
extern void _ZN7S1793C32v8Ev();
extern void _ZN7S1793C32v9Ev();
extern void _ZN7S1793C33v10Ev();
extern void _ZN7S1793C33v11Ev();
extern void _ZN7S1793C33v12Ev();
extern void _ZN7S1793C33v13Ev();
extern void _ZN7S1793C33v14Ev();
extern void _ZN7S1793C33v15Ev();
extern void _ZN7S1793C33v16Ev();
extern void _ZN7S1793C33v17Ev();
extern void _ZN7S1793C33v18Ev();
extern void _ZN7S1793C33v19Ev();
extern void _ZN7S1793C33v20Ev();
extern void _ZN7S1793C33v21Ev();
extern void _ZN7S1793C33v22Ev();
extern void _ZN7S1793C33v23Ev();
extern void _ZN7S1793C33v24Ev();
extern void _ZN7S1793C33v25Ev();
extern void _ZN7S1793C33v26Ev();
extern void _ZN7S1793C33v27Ev();
extern void _ZN7S1793C33v28Ev();
extern void _ZN7S1793C33v29Ev();
extern void _ZN7S1793C33v30Ev();
extern void _ZN7S1793C33v31Ev();
extern void _ZN7S1793C33v32Ev();
extern void _ZN7S1793C33v33Ev();
extern void _ZN7S1793C33v34Ev();
extern void _ZN7S1793C33v35Ev();
extern void _ZN7S1793C33v36Ev();
extern void _ZN7S1793C33v37Ev();
extern void _ZN7S1793C33v38Ev();
extern void _ZN7S1793C33v39Ev();
extern void _ZN7S1793C33v40Ev();
extern void _ZN7S1793C33v41Ev();
extern void _ZN7S1793C33v42Ev();
extern void _ZN7S1793C33v43Ev();
extern void _ZN7S1793C33v44Ev();
extern void _ZN7S1793C33v45Ev();
static  VTBL_ENTRY vtc_S1793C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1793C3[0]),
  (VTBL_ENTRY)&_ZN7S1793C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1793C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v45Ev,
};
extern VTBL_ENTRY _ZTI7S1793C3[];
extern  VTBL_ENTRY _ZTV7S1793C3[];
Class_Descriptor cd_S1793C3 = {  "S1793C3", // class name
  bases_S1793C3, 1,
  &(vtc_S1793C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1793C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1793C3),47, //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  S1793C2  : S1793C3 {
  virtual void  v46(); // _ZN7S1793C23v46Ev
  virtual void  v47(); // _ZN7S1793C23v47Ev
  virtual void  v48(); // _ZN7S1793C23v48Ev
  virtual void  v49(); // _ZN7S1793C23v49Ev
  ~S1793C2(); // tgen
  S1793C2(); // tgen
};
//SIG(-1 S1793C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1 v2 v3 v4}


void  S1793C2 ::v46(){vfunc_called(this, "_ZN7S1793C23v46Ev");}
void  S1793C2 ::v47(){vfunc_called(this, "_ZN7S1793C23v47Ev");}
void  S1793C2 ::v48(){vfunc_called(this, "_ZN7S1793C23v48Ev");}
void  S1793C2 ::v49(){vfunc_called(this, "_ZN7S1793C23v49Ev");}
S1793C2 ::~S1793C2(){ note_dtor("S1793C2", this);} // tgen
S1793C2 ::S1793C2(){ note_ctor("S1793C2", this);} // tgen

static void Test_S1793C2()
{
  extern Class_Descriptor cd_S1793C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1793C2, buf);
    S1793C2 *dp, &lv = *(dp=new (buf) S1793C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1793C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1793C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S1793C3*), 0, "S1793C2");
    check_base_class_offset(lv, (S1793C3*), 0, "S1793C2");
    test_class_info(&lv, &cd_S1793C2);
    dp->~S1793C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1793C2(Test_S1793C2, "S1793C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1793C2C1Ev();
extern void _ZN7S1793C2D1Ev();
Name_Map name_map_S1793C2[] = {
  NSPAIR(_ZN7S1793C2C1Ev),
  NSPAIR(_ZN7S1793C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1793C3;
extern VTBL_ENTRY _ZTI7S1793C3[];
extern  VTBL_ENTRY _ZTV7S1793C3[];
static Base_Class bases_S1793C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1793C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1793C2[];
extern void _ZN7S1793C2D1Ev();
extern void _ZN7S1793C2D0Ev();
extern void _ZN7S1793C32v3Ev();
extern void _ZN7S1793C32v4Ev();
extern void _ZN7S1793C32v5Ev();
extern void _ZN7S1793C32v6Ev();
extern void _ZN7S1793C32v7Ev();
extern void _ZN7S1793C32v8Ev();
extern void _ZN7S1793C32v9Ev();
extern void _ZN7S1793C33v10Ev();
extern void _ZN7S1793C33v11Ev();
extern void _ZN7S1793C33v12Ev();
extern void _ZN7S1793C33v13Ev();
extern void _ZN7S1793C33v14Ev();
extern void _ZN7S1793C33v15Ev();
extern void _ZN7S1793C33v16Ev();
extern void _ZN7S1793C33v17Ev();
extern void _ZN7S1793C33v18Ev();
extern void _ZN7S1793C33v19Ev();
extern void _ZN7S1793C33v20Ev();
extern void _ZN7S1793C33v21Ev();
extern void _ZN7S1793C33v22Ev();
extern void _ZN7S1793C33v23Ev();
extern void _ZN7S1793C33v24Ev();
extern void _ZN7S1793C33v25Ev();
extern void _ZN7S1793C33v26Ev();
extern void _ZN7S1793C33v27Ev();
extern void _ZN7S1793C33v28Ev();
extern void _ZN7S1793C33v29Ev();
extern void _ZN7S1793C33v30Ev();
extern void _ZN7S1793C33v31Ev();
extern void _ZN7S1793C33v32Ev();
extern void _ZN7S1793C33v33Ev();
extern void _ZN7S1793C33v34Ev();
extern void _ZN7S1793C33v35Ev();
extern void _ZN7S1793C33v36Ev();
extern void _ZN7S1793C33v37Ev();
extern void _ZN7S1793C33v38Ev();
extern void _ZN7S1793C33v39Ev();
extern void _ZN7S1793C33v40Ev();
extern void _ZN7S1793C33v41Ev();
extern void _ZN7S1793C33v42Ev();
extern void _ZN7S1793C33v43Ev();
extern void _ZN7S1793C33v44Ev();
extern void _ZN7S1793C33v45Ev();
extern void _ZN7S1793C23v46Ev();
extern void _ZN7S1793C23v47Ev();
extern void _ZN7S1793C23v48Ev();
extern void _ZN7S1793C23v49Ev();
static  VTBL_ENTRY vtc_S1793C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1793C2[0]),
  (VTBL_ENTRY)&_ZN7S1793C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1793C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1793C23v46Ev,
  (VTBL_ENTRY)&_ZN7S1793C23v47Ev,
  (VTBL_ENTRY)&_ZN7S1793C23v48Ev,
  (VTBL_ENTRY)&_ZN7S1793C23v49Ev,
};
extern VTBL_ENTRY _ZTI7S1793C2[];
extern  VTBL_ENTRY _ZTV7S1793C2[];
Class_Descriptor cd_S1793C2 = {  "S1793C2", // class name
  bases_S1793C2, 2,
  &(vtc_S1793C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1793C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1793C2),51, //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  S1793C1  : S1793C2 {
  virtual void  v1(); // _ZN7S1793C12v1Ev
  virtual void  v2(); // _ZN7S1793C12v2Ev
  ~S1793C1(); // tgen
  S1793C1(); // tgen
};
//SIG(1 S1793C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1 v2}


void  S1793C1 ::v1(){vfunc_called(this, "_ZN7S1793C12v1Ev");}
void  S1793C1 ::v2(){vfunc_called(this, "_ZN7S1793C12v2Ev");}
S1793C1 ::~S1793C1(){ note_dtor("S1793C1", this);} // tgen
S1793C1 ::S1793C1(){ note_ctor("S1793C1", this);} // tgen

static void Test_S1793C1()
{
  extern Class_Descriptor cd_S1793C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1793C1, buf);
    S1793C1 *dp, &lv = *(dp=new (buf) S1793C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1793C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1793C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S1793C3*)(S1793C2*), 0, "S1793C1");
    check_base_class_offset(lv, (S1793C3*)(S1793C2*), 0, "S1793C1");
    check_base_class_offset(lv, (S1793C2*), 0, "S1793C1");
    test_class_info(&lv, &cd_S1793C1);
    dp->~S1793C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1793C1(Test_S1793C1, "S1793C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1793C1C1Ev();
extern void _ZN7S1793C1D1Ev();
Name_Map name_map_S1793C1[] = {
  NSPAIR(_ZN7S1793C1C1Ev),
  NSPAIR(_ZN7S1793C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1793C3;
extern VTBL_ENTRY _ZTI7S1793C3[];
extern  VTBL_ENTRY _ZTV7S1793C3[];
extern Class_Descriptor cd_S1793C2;
extern VTBL_ENTRY _ZTI7S1793C2[];
extern  VTBL_ENTRY _ZTV7S1793C2[];
static Base_Class bases_S1793C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1793C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1793C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1793C1[];
extern void _ZN7S1793C1D1Ev();
extern void _ZN7S1793C1D0Ev();
extern void _ZN7S1793C32v3Ev();
extern void _ZN7S1793C32v4Ev();
extern void _ZN7S1793C32v5Ev();
extern void _ZN7S1793C32v6Ev();
extern void _ZN7S1793C32v7Ev();
extern void _ZN7S1793C32v8Ev();
extern void _ZN7S1793C32v9Ev();
extern void _ZN7S1793C33v10Ev();
extern void _ZN7S1793C33v11Ev();
extern void _ZN7S1793C33v12Ev();
extern void _ZN7S1793C33v13Ev();
extern void _ZN7S1793C33v14Ev();
extern void _ZN7S1793C33v15Ev();
extern void _ZN7S1793C33v16Ev();
extern void _ZN7S1793C33v17Ev();
extern void _ZN7S1793C33v18Ev();
extern void _ZN7S1793C33v19Ev();
extern void _ZN7S1793C33v20Ev();
extern void _ZN7S1793C33v21Ev();
extern void _ZN7S1793C33v22Ev();
extern void _ZN7S1793C33v23Ev();
extern void _ZN7S1793C33v24Ev();
extern void _ZN7S1793C33v25Ev();
extern void _ZN7S1793C33v26Ev();
extern void _ZN7S1793C33v27Ev();
extern void _ZN7S1793C33v28Ev();
extern void _ZN7S1793C33v29Ev();
extern void _ZN7S1793C33v30Ev();
extern void _ZN7S1793C33v31Ev();
extern void _ZN7S1793C33v32Ev();
extern void _ZN7S1793C33v33Ev();
extern void _ZN7S1793C33v34Ev();
extern void _ZN7S1793C33v35Ev();
extern void _ZN7S1793C33v36Ev();
extern void _ZN7S1793C33v37Ev();
extern void _ZN7S1793C33v38Ev();
extern void _ZN7S1793C33v39Ev();
extern void _ZN7S1793C33v40Ev();
extern void _ZN7S1793C33v41Ev();
extern void _ZN7S1793C33v42Ev();
extern void _ZN7S1793C33v43Ev();
extern void _ZN7S1793C33v44Ev();
extern void _ZN7S1793C33v45Ev();
extern void _ZN7S1793C23v46Ev();
extern void _ZN7S1793C23v47Ev();
extern void _ZN7S1793C23v48Ev();
extern void _ZN7S1793C23v49Ev();
extern void _ZN7S1793C12v1Ev();
extern void _ZN7S1793C12v2Ev();
static  VTBL_ENTRY vtc_S1793C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1793C1[0]),
  (VTBL_ENTRY)&_ZN7S1793C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1793C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1793C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v40Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v41Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v42Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v43Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v44Ev,
  (VTBL_ENTRY)&_ZN7S1793C33v45Ev,
  (VTBL_ENTRY)&_ZN7S1793C23v46Ev,
  (VTBL_ENTRY)&_ZN7S1793C23v47Ev,
  (VTBL_ENTRY)&_ZN7S1793C23v48Ev,
  (VTBL_ENTRY)&_ZN7S1793C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1793C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1793C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1793C1[];
extern  VTBL_ENTRY _ZTV7S1793C1[];
Class_Descriptor cd_S1793C1 = {  "S1793C1", // class name
  bases_S1793C1, 3,
  &(vtc_S1793C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1793C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1793C1),53, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2052C4  {
  virtual  ~S2052C4(); // _ZN7S2052C4D1Ev
  virtual void  v17(); // _ZN7S2052C43v17Ev
  virtual void  v18(); // _ZN7S2052C43v18Ev
  virtual void  v19(); // _ZN7S2052C43v19Ev
  S2052C4(); // tgen
};
//SIG(-1 S2052C4) C1{ vd v1 v2 v3}


 S2052C4 ::~S2052C4(){ note_dtor("S2052C4", this);}
void  S2052C4 ::v17(){vfunc_called(this, "_ZN7S2052C43v17Ev");}
void  S2052C4 ::v18(){vfunc_called(this, "_ZN7S2052C43v18Ev");}
void  S2052C4 ::v19(){vfunc_called(this, "_ZN7S2052C43v19Ev");}
S2052C4 ::S2052C4(){ note_ctor("S2052C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2052C4C1Ev();
extern void _ZN7S2052C4D1Ev();
Name_Map name_map_S2052C4[] = {
  NSPAIR(_ZN7S2052C4C1Ev),
  NSPAIR(_ZN7S2052C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2052C4[];
extern void _ZN7S2052C4D1Ev();
extern void _ZN7S2052C4D0Ev();
extern void _ZN7S2052C43v17Ev();
extern void _ZN7S2052C43v18Ev();
extern void _ZN7S2052C43v19Ev();
static  VTBL_ENTRY vtc_S2052C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2052C4[0]),
  (VTBL_ENTRY)&_ZN7S2052C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2052C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2052C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2052C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2052C43v19Ev,
};
extern VTBL_ENTRY _ZTI7S2052C4[];
extern  VTBL_ENTRY _ZTV7S2052C4[];
Class_Descriptor cd_S2052C4 = {  "S2052C4", // class name
  0,0,//no base classes
  &(vtc_S2052C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2052C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2052C4),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  S2052C3  : S2052C4 {
  ::S5166C36 s2052c3f0;
  ::S2355C13_nt s2052c3f1;
  char s2052c3f2;
  virtual  ~S2052C3(); // _ZN7S2052C3D1Ev
  virtual void  v20(); // _ZN7S2052C33v20Ev
  virtual void  v21(); // _ZN7S2052C33v21Ev
  virtual void  v22(); // _ZN7S2052C33v22Ev
  S2052C3(); // tgen
};
//SIG(-1 S2052C3) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2052C3 ::~S2052C3(){ note_dtor("S2052C3", this);}
void  S2052C3 ::v20(){vfunc_called(this, "_ZN7S2052C33v20Ev");}
void  S2052C3 ::v21(){vfunc_called(this, "_ZN7S2052C33v21Ev");}
void  S2052C3 ::v22(){vfunc_called(this, "_ZN7S2052C33v22Ev");}
S2052C3 ::S2052C3(){ note_ctor("S2052C3", this);} // tgen

static void Test_S2052C3()
{
  extern Class_Descriptor cd_S2052C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2052C3, buf);
    S2052C3 *dp, &lv = *(dp=new (buf) S2052C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2052C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2052C3)");
    check_base_class_offset(lv, (S2052C4*), 0, "S2052C3");
    check_field_offset(lv, s2052c3f0, ABISELECT(8,4), "S2052C3.s2052c3f0");
    check_field_offset(lv, s2052c3f1, ABISELECT(32,20), "S2052C3.s2052c3f1");
    check_field_offset(lv, s2052c3f2, ABISELECT(64,52), "S2052C3.s2052c3f2");
    test_class_info(&lv, &cd_S2052C3);
    dp->~S2052C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2052C3(Test_S2052C3, "S2052C3", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2052C3C1Ev();
extern void _ZN7S2052C3D1Ev();
Name_Map name_map_S2052C3[] = {
  NSPAIR(_ZN7S2052C3C1Ev),
  NSPAIR(_ZN7S2052C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2052C4;
extern VTBL_ENTRY _ZTI7S2052C4[];
extern  VTBL_ENTRY _ZTV7S2052C4[];
static Base_Class bases_S2052C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2052C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2052C3[];
extern void _ZN7S2052C3D1Ev();
extern void _ZN7S2052C3D0Ev();
extern void _ZN7S2052C43v17Ev();
extern void _ZN7S2052C43v18Ev();
extern void _ZN7S2052C43v19Ev();
extern void _ZN7S2052C33v20Ev();
extern void _ZN7S2052C33v21Ev();
extern void _ZN7S2052C33v22Ev();
static  VTBL_ENTRY vtc_S2052C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2052C3[0]),
  (VTBL_ENTRY)&_ZN7S2052C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2052C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2052C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2052C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2052C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2052C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2052C33v21Ev,
  (VTBL_ENTRY)&_ZN7S2052C33v22Ev,
};
extern VTBL_ENTRY _ZTI7S2052C3[];
extern  VTBL_ENTRY _ZTV7S2052C3[];
Class_Descriptor cd_S2052C3 = {  "S2052C3", // class name
  bases_S2052C3, 1,
  &(vtc_S2052C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2052C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2052C3),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  S2052C2  : S2052C3 {
  virtual  ~S2052C2(); // _ZN7S2052C2D1Ev
  virtual void  v23(); // _ZN7S2052C23v23Ev
  virtual void  v24(); // _ZN7S2052C23v24Ev
  virtual void  v25(); // _ZN7S2052C23v25Ev
  virtual void  v26(); // _ZN7S2052C23v26Ev
  virtual void  v27(); // _ZN7S2052C23v27Ev
  virtual void  v28(); // _ZN7S2052C23v28Ev
  virtual void  v29(); // _ZN7S2052C23v29Ev
  virtual void  v30(); // _ZN7S2052C23v30Ev
  virtual void  v31(); // _ZN7S2052C23v31Ev
  virtual void  v32(); // _ZN7S2052C23v32Ev
  virtual void  v33(); // _ZN7S2052C23v33Ev
  virtual void  v34(); // _ZN7S2052C23v34Ev
  virtual void  v35(); // _ZN7S2052C23v35Ev
  virtual void  v36(); // _ZN7S2052C23v36Ev
  virtual void  v37(); // _ZN7S2052C23v37Ev
  virtual void  v38(); // _ZN7S2052C23v38Ev
  S2052C2(); // tgen
};
//SIG(-1 S2052C2) C1{ BC2{ BC3{ vd v17 v18 v19} vd v20 v21 v22 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


 S2052C2 ::~S2052C2(){ note_dtor("S2052C2", this);}
void  S2052C2 ::v23(){vfunc_called(this, "_ZN7S2052C23v23Ev");}
void  S2052C2 ::v24(){vfunc_called(this, "_ZN7S2052C23v24Ev");}
void  S2052C2 ::v25(){vfunc_called(this, "_ZN7S2052C23v25Ev");}
void  S2052C2 ::v26(){vfunc_called(this, "_ZN7S2052C23v26Ev");}
void  S2052C2 ::v27(){vfunc_called(this, "_ZN7S2052C23v27Ev");}
void  S2052C2 ::v28(){vfunc_called(this, "_ZN7S2052C23v28Ev");}
void  S2052C2 ::v29(){vfunc_called(this, "_ZN7S2052C23v29Ev");}
void  S2052C2 ::v30(){vfunc_called(this, "_ZN7S2052C23v30Ev");}
void  S2052C2 ::v31(){vfunc_called(this, "_ZN7S2052C23v31Ev");}
void  S2052C2 ::v32(){vfunc_called(this, "_ZN7S2052C23v32Ev");}
void  S2052C2 ::v33(){vfunc_called(this, "_ZN7S2052C23v33Ev");}
void  S2052C2 ::v34(){vfunc_called(this, "_ZN7S2052C23v34Ev");}
void  S2052C2 ::v35(){vfunc_called(this, "_ZN7S2052C23v35Ev");}
void  S2052C2 ::v36(){vfunc_called(this, "_ZN7S2052C23v36Ev");}
void  S2052C2 ::v37(){vfunc_called(this, "_ZN7S2052C23v37Ev");}
void  S2052C2 ::v38(){vfunc_called(this, "_ZN7S2052C23v38Ev");}
S2052C2 ::S2052C2(){ note_ctor("S2052C2", this);} // tgen

static void Test_S2052C2()
{
  extern Class_Descriptor cd_S2052C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2052C2, buf);
    S2052C2 *dp, &lv = *(dp=new (buf) S2052C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2052C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2052C2)");
    check_base_class_offset(lv, (S2052C4*)(S2052C3*), 0, "S2052C2");
    check_base_class_offset(lv, (S2052C3*), 0, "S2052C2");
    test_class_info(&lv, &cd_S2052C2);
    dp->~S2052C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2052C2(Test_S2052C2, "S2052C2", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2052C2C1Ev();
extern void _ZN7S2052C2D1Ev();
Name_Map name_map_S2052C2[] = {
  NSPAIR(_ZN7S2052C2C1Ev),
  NSPAIR(_ZN7S2052C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2052C4;
extern VTBL_ENTRY _ZTI7S2052C4[];
extern  VTBL_ENTRY _ZTV7S2052C4[];
extern Class_Descriptor cd_S2052C3;
extern VTBL_ENTRY _ZTI7S2052C3[];
extern  VTBL_ENTRY _ZTV7S2052C3[];
static Base_Class bases_S2052C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2052C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2052C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2052C2[];
extern void _ZN7S2052C2D1Ev();
extern void _ZN7S2052C2D0Ev();
extern void _ZN7S2052C43v17Ev();
extern void _ZN7S2052C43v18Ev();
extern void _ZN7S2052C43v19Ev();
extern void _ZN7S2052C33v20Ev();
extern void _ZN7S2052C33v21Ev();
extern void _ZN7S2052C33v22Ev();
extern void _ZN7S2052C23v23Ev();
extern void _ZN7S2052C23v24Ev();
extern void _ZN7S2052C23v25Ev();
extern void _ZN7S2052C23v26Ev();
extern void _ZN7S2052C23v27Ev();
extern void _ZN7S2052C23v28Ev();
extern void _ZN7S2052C23v29Ev();
extern void _ZN7S2052C23v30Ev();
extern void _ZN7S2052C23v31Ev();
extern void _ZN7S2052C23v32Ev();
extern void _ZN7S2052C23v33Ev();
extern void _ZN7S2052C23v34Ev();
extern void _ZN7S2052C23v35Ev();
extern void _ZN7S2052C23v36Ev();
extern void _ZN7S2052C23v37Ev();
extern void _ZN7S2052C23v38Ev();
static  VTBL_ENTRY vtc_S2052C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2052C2[0]),
  (VTBL_ENTRY)&_ZN7S2052C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2052C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2052C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2052C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2052C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2052C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2052C33v21Ev,
  (VTBL_ENTRY)&_ZN7S2052C33v22Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v23Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v24Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v25Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v26Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v27Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v28Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v29Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v30Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v36Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v37Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v38Ev,
};
extern VTBL_ENTRY _ZTI7S2052C2[];
extern  VTBL_ENTRY _ZTV7S2052C2[];
Class_Descriptor cd_S2052C2 = {  "S2052C2", // class name
  bases_S2052C2, 2,
  &(vtc_S2052C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2052C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2052C2),26, //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  S2052C1  : S2052C2 {
  void *s2052c1f0;
  int s2052c1f1;
  virtual  ~S2052C1(); // _ZN7S2052C1D1Ev
  virtual void  v1(); // _ZN7S2052C12v1Ev
  virtual void  v2(); // _ZN7S2052C12v2Ev
  virtual void  v3(); // _ZN7S2052C12v3Ev
  virtual void  v4(); // _ZN7S2052C12v4Ev
  virtual void  v5(); // _ZN7S2052C12v5Ev
  virtual void  v6(); // _ZN7S2052C12v6Ev
  virtual void  v7(); // _ZN7S2052C12v7Ev
  virtual void  v8(); // _ZN7S2052C12v8Ev
  virtual void  v9(); // _ZN7S2052C12v9Ev
  virtual void  v10(); // _ZN7S2052C13v10Ev
  virtual void  v11(); // _ZN7S2052C13v11Ev
  virtual void  v12(); // _ZN7S2052C13v12Ev
  virtual void  v13(); // _ZN7S2052C13v13Ev
  virtual void  v14(); // _ZN7S2052C13v14Ev
  virtual void  v15(); // _ZN7S2052C13v15Ev
  virtual void  v16(); // _ZN7S2052C13v16Ev
  S2052C1(); // tgen
};
//SIG(1 S2052C1) C1{ BC2{ BC3{ BC4{ vd v17 v18 v19} vd v20 v21 v22 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FL[4]} Fc} vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp Fi}


 S2052C1 ::~S2052C1(){ note_dtor("S2052C1", this);}
void  S2052C1 ::v1(){vfunc_called(this, "_ZN7S2052C12v1Ev");}
void  S2052C1 ::v2(){vfunc_called(this, "_ZN7S2052C12v2Ev");}
void  S2052C1 ::v3(){vfunc_called(this, "_ZN7S2052C12v3Ev");}
void  S2052C1 ::v4(){vfunc_called(this, "_ZN7S2052C12v4Ev");}
void  S2052C1 ::v5(){vfunc_called(this, "_ZN7S2052C12v5Ev");}
void  S2052C1 ::v6(){vfunc_called(this, "_ZN7S2052C12v6Ev");}
void  S2052C1 ::v7(){vfunc_called(this, "_ZN7S2052C12v7Ev");}
void  S2052C1 ::v8(){vfunc_called(this, "_ZN7S2052C12v8Ev");}
void  S2052C1 ::v9(){vfunc_called(this, "_ZN7S2052C12v9Ev");}
void  S2052C1 ::v10(){vfunc_called(this, "_ZN7S2052C13v10Ev");}
void  S2052C1 ::v11(){vfunc_called(this, "_ZN7S2052C13v11Ev");}
void  S2052C1 ::v12(){vfunc_called(this, "_ZN7S2052C13v12Ev");}
void  S2052C1 ::v13(){vfunc_called(this, "_ZN7S2052C13v13Ev");}
void  S2052C1 ::v14(){vfunc_called(this, "_ZN7S2052C13v14Ev");}
void  S2052C1 ::v15(){vfunc_called(this, "_ZN7S2052C13v15Ev");}
void  S2052C1 ::v16(){vfunc_called(this, "_ZN7S2052C13v16Ev");}
S2052C1 ::S2052C1(){ note_ctor("S2052C1", this);} // tgen

static void Test_S2052C1()
{
  extern Class_Descriptor cd_S2052C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,17)];
    init_test(&cd_S2052C1, buf);
    S2052C1 *dp, &lv = *(dp=new (buf) S2052C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S2052C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2052C1)");
    check_base_class_offset(lv, (S2052C4*)(S2052C3*)(S2052C2*), 0, "S2052C1");
    check_base_class_offset(lv, (S2052C3*)(S2052C2*), 0, "S2052C1");
    check_base_class_offset(lv, (S2052C2*), 0, "S2052C1");
    check_field_offset(lv, s2052c1f0, ABISELECT(72,56), "S2052C1.s2052c1f0");
    check_field_offset(lv, s2052c1f1, ABISELECT(80,60), "S2052C1.s2052c1f1");
    test_class_info(&lv, &cd_S2052C1);
    dp->~S2052C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2052C1(Test_S2052C1, "S2052C1", ABISELECT(88,64));

#else // __cplusplus

extern void _ZN7S2052C1C1Ev();
extern void _ZN7S2052C1D1Ev();
Name_Map name_map_S2052C1[] = {
  NSPAIR(_ZN7S2052C1C1Ev),
  NSPAIR(_ZN7S2052C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2052C4;
extern VTBL_ENTRY _ZTI7S2052C4[];
extern  VTBL_ENTRY _ZTV7S2052C4[];
extern Class_Descriptor cd_S2052C3;
extern VTBL_ENTRY _ZTI7S2052C3[];
extern  VTBL_ENTRY _ZTV7S2052C3[];
extern Class_Descriptor cd_S2052C2;
extern VTBL_ENTRY _ZTI7S2052C2[];
extern  VTBL_ENTRY _ZTV7S2052C2[];
static Base_Class bases_S2052C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2052C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2052C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2052C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2052C1[];
extern void _ZN7S2052C1D1Ev();
extern void _ZN7S2052C1D0Ev();
extern void _ZN7S2052C43v17Ev();
extern void _ZN7S2052C43v18Ev();
extern void _ZN7S2052C43v19Ev();
extern void _ZN7S2052C33v20Ev();
extern void _ZN7S2052C33v21Ev();
extern void _ZN7S2052C33v22Ev();
extern void _ZN7S2052C23v23Ev();
extern void _ZN7S2052C23v24Ev();
extern void _ZN7S2052C23v25Ev();
extern void _ZN7S2052C23v26Ev();
extern void _ZN7S2052C23v27Ev();
extern void _ZN7S2052C23v28Ev();
extern void _ZN7S2052C23v29Ev();
extern void _ZN7S2052C23v30Ev();
extern void _ZN7S2052C23v31Ev();
extern void _ZN7S2052C23v32Ev();
extern void _ZN7S2052C23v33Ev();
extern void _ZN7S2052C23v34Ev();
extern void _ZN7S2052C23v35Ev();
extern void _ZN7S2052C23v36Ev();
extern void _ZN7S2052C23v37Ev();
extern void _ZN7S2052C23v38Ev();
extern void _ZN7S2052C12v1Ev();
extern void _ZN7S2052C12v2Ev();
extern void _ZN7S2052C12v3Ev();
extern void _ZN7S2052C12v4Ev();
extern void _ZN7S2052C12v5Ev();
extern void _ZN7S2052C12v6Ev();
extern void _ZN7S2052C12v7Ev();
extern void _ZN7S2052C12v8Ev();
extern void _ZN7S2052C12v9Ev();
extern void _ZN7S2052C13v10Ev();
extern void _ZN7S2052C13v11Ev();
extern void _ZN7S2052C13v12Ev();
extern void _ZN7S2052C13v13Ev();
extern void _ZN7S2052C13v14Ev();
extern void _ZN7S2052C13v15Ev();
extern void _ZN7S2052C13v16Ev();
static  VTBL_ENTRY vtc_S2052C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2052C1[0]),
  (VTBL_ENTRY)&_ZN7S2052C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2052C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2052C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2052C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2052C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2052C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2052C33v21Ev,
  (VTBL_ENTRY)&_ZN7S2052C33v22Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v23Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v24Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v25Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v26Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v27Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v28Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v29Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v30Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v31Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v32Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v33Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v34Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v35Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v36Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v37Ev,
  (VTBL_ENTRY)&_ZN7S2052C23v38Ev,
  (VTBL_ENTRY)&_ZN7S2052C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2052C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2052C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2052C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2052C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2052C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2052C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2052C12v8Ev,
  (VTBL_ENTRY)&_ZN7S2052C12v9Ev,
  (VTBL_ENTRY)&_ZN7S2052C13v10Ev,
  (VTBL_ENTRY)&_ZN7S2052C13v11Ev,
  (VTBL_ENTRY)&_ZN7S2052C13v12Ev,
  (VTBL_ENTRY)&_ZN7S2052C13v13Ev,
  (VTBL_ENTRY)&_ZN7S2052C13v14Ev,
  (VTBL_ENTRY)&_ZN7S2052C13v15Ev,
  (VTBL_ENTRY)&_ZN7S2052C13v16Ev,
};
extern VTBL_ENTRY _ZTI7S2052C1[];
extern  VTBL_ENTRY _ZTV7S2052C1[];
Class_Descriptor cd_S2052C1 = {  "S2052C1", // class name
  bases_S2052C1, 3,
  &(vtc_S2052C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,64), // object size
  NSPAIRA(_ZTI7S2052C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2052C1),42, //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  S3522C4  {
  virtual void  v3(); // _ZN7S3522C42v3Ev
  virtual void  v4(); // _ZN7S3522C42v4Ev
  virtual void  v5(); // _ZN7S3522C42v5Ev
  virtual void  v6(); // _ZN7S3522C42v6Ev
  ~S3522C4(); // tgen
  S3522C4(); // tgen
};
//SIG(-1 S3522C4) C1{ v1 v2 v3 v4}


void  S3522C4 ::v3(){vfunc_called(this, "_ZN7S3522C42v3Ev");}
void  S3522C4 ::v4(){vfunc_called(this, "_ZN7S3522C42v4Ev");}
void  S3522C4 ::v5(){vfunc_called(this, "_ZN7S3522C42v5Ev");}
void  S3522C4 ::v6(){vfunc_called(this, "_ZN7S3522C42v6Ev");}
S3522C4 ::~S3522C4(){ note_dtor("S3522C4", this);} // tgen
S3522C4 ::S3522C4(){ note_ctor("S3522C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3522C4C1Ev();
extern void _ZN7S3522C4D1Ev();
Name_Map name_map_S3522C4[] = {
  NSPAIR(_ZN7S3522C4C1Ev),
  NSPAIR(_ZN7S3522C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3522C4[];
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
static  VTBL_ENTRY vtc_S3522C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C4[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3522C4[];
extern  VTBL_ENTRY _ZTV7S3522C4[];
Class_Descriptor cd_S3522C4 = {  "S3522C4", // class name
  0,0,//no base classes
  &(vtc_S3522C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3522C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3522C4),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  S3522C5  {
  long double s3522c5f0;
  void *s3522c5f1;
  virtual void  v7(); // _ZN7S3522C52v7Ev
  virtual void  v8(); // _ZN7S3522C52v8Ev
  virtual void  v9(); // _ZN7S3522C52v9Ev
  virtual void  v10(); // _ZN7S3522C53v10Ev
  virtual void  v11(); // _ZN7S3522C53v11Ev
  virtual void  v12(); // _ZN7S3522C53v12Ev
  virtual void  v13(); // _ZN7S3522C53v13Ev
  ~S3522C5(); // tgen
  S3522C5(); // tgen
};
//SIG(-1 S3522C5) C1{ v1 v2 v3 v4 v5 v6 v7 FD Fp}


void  S3522C5 ::v7(){vfunc_called(this, "_ZN7S3522C52v7Ev");}
void  S3522C5 ::v8(){vfunc_called(this, "_ZN7S3522C52v8Ev");}
void  S3522C5 ::v9(){vfunc_called(this, "_ZN7S3522C52v9Ev");}
void  S3522C5 ::v10(){vfunc_called(this, "_ZN7S3522C53v10Ev");}
void  S3522C5 ::v11(){vfunc_called(this, "_ZN7S3522C53v11Ev");}
void  S3522C5 ::v12(){vfunc_called(this, "_ZN7S3522C53v12Ev");}
void  S3522C5 ::v13(){vfunc_called(this, "_ZN7S3522C53v13Ev");}
S3522C5 ::~S3522C5(){ note_dtor("S3522C5", this);} // tgen
S3522C5 ::S3522C5(){ note_ctor("S3522C5", this);} // tgen

static void Test_S3522C5()
{
  extern Class_Descriptor cd_S3522C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,6)];
    init_test(&cd_S3522C5, buf);
    S3522C5 *dp, &lv = *(dp=new (buf) S3522C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,20), "sizeof(S3522C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3522C5)");
    check_field_offset(lv, s3522c5f0, ABISELECT(16,4), "S3522C5.s3522c5f0");
    check_field_offset(lv, s3522c5f1, ABISELECT(32,16), "S3522C5.s3522c5f1");
    test_class_info(&lv, &cd_S3522C5);
    dp->~S3522C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3522C5(Test_S3522C5, "S3522C5", ABISELECT(48,20));

#else // __cplusplus

extern void _ZN7S3522C5C1Ev();
extern void _ZN7S3522C5D1Ev();
Name_Map name_map_S3522C5[] = {
  NSPAIR(_ZN7S3522C5C1Ev),
  NSPAIR(_ZN7S3522C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3522C5[];
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
static  VTBL_ENTRY vtc_S3522C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C5[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
};
extern VTBL_ENTRY _ZTI7S3522C5[];
extern  VTBL_ENTRY _ZTV7S3522C5[];
Class_Descriptor cd_S3522C5 = {  "S3522C5", // class name
  0,0,//no base classes
  &(vtc_S3522C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,20), // object size
  NSPAIRA(_ZTI7S3522C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3522C5),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  S3522C3  : virtual S3522C4 , S3522C5 {
  virtual  ~S3522C3(); // _ZN7S3522C3D2Ev
  virtual void  v14(); // _ZN7S3522C33v14Ev
  virtual void  v15(); // _ZN7S3522C33v15Ev
  virtual void  v16(); // _ZN7S3522C33v16Ev
  S3522C3(); // tgen
};
//SIG(-1 S3522C3) C1{ VBC2{ v4 v5 v6 v7} BC3{ v8 v9 v10 v11 v12 v13 v14 FD Fp} vd v1 v2 v3}


 S3522C3 ::~S3522C3(){ note_dtor("S3522C3", this);}
void  S3522C3 ::v14(){vfunc_called(this, "_ZN7S3522C33v14Ev");}
void  S3522C3 ::v15(){vfunc_called(this, "_ZN7S3522C33v15Ev");}
void  S3522C3 ::v16(){vfunc_called(this, "_ZN7S3522C33v16Ev");}
S3522C3 ::S3522C3(){ note_ctor("S3522C3", this);} // tgen

static void Test_S3522C3()
{
  extern Class_Descriptor cd_S3522C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S3522C3, buf);
    S3522C3 *dp, &lv = *(dp=new (buf) S3522C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3522C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3522C3)");
    check_base_class_offset(lv, (S3522C4*), ABISELECT(40,20), "S3522C3");
    check_base_class_offset(lv, (S3522C5*), 0, "S3522C3");
    test_class_info(&lv, &cd_S3522C3);
    dp->~S3522C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3522C3(Test_S3522C3, "S3522C3", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3522C3C1Ev();
extern void _ZN7S3522C3D2Ev();
Name_Map name_map_S3522C3[] = {
  NSPAIR(_ZN7S3522C3C1Ev),
  NSPAIR(_ZN7S3522C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3522C4;
extern VTBL_ENTRY _ZTI7S3522C4[];
extern  VTBL_ENTRY _ZTV7S3522C4[];
extern Class_Descriptor cd_S3522C5;
extern VTBL_ENTRY _ZTI7S3522C5[];
extern  VTBL_ENTRY _ZTV7S3522C5[];
static Base_Class bases_S3522C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3522C4,    ABISELECT(40,20), //bcp->offset
    15, //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_S3522C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3522C3[];
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void _ZN7S3522C3D1Ev();
extern void _ZN7S3522C3D0Ev();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
static  VTBL_ENTRY vtc_S3522C3[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
};
extern VTBL_ENTRY _ZTV7S3522C3[];
static  VTT_ENTRY vtt_S3522C3[] = {
  {&(_ZTV7S3522C3[3]),  3,25},
  {&(_ZTV7S3522C3[21]),  21,25},
};
extern VTBL_ENTRY _ZTI7S3522C3[];
extern  VTBL_ENTRY _ZTV7S3522C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C3[];
Class_Descriptor cd_S3522C3 = {  "S3522C3", // class name
  bases_S3522C3, 2,
  &(vtc_S3522C3[0]), // expected_vtbl_contents
  &(vtt_S3522C3[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3522C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3522C3),25, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3522C3),2, //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  S3522C6  {
  virtual void  v17(); // _ZN7S3522C63v17Ev
  ~S3522C6(); // tgen
  S3522C6(); // tgen
};
//SIG(-1 S3522C6) C1{ v1}


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

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

#else // __cplusplus

extern void _ZN7S3522C6C1Ev();
extern void _ZN7S3522C6D1Ev();
Name_Map name_map_S3522C6[] = {
  NSPAIR(_ZN7S3522C6C1Ev),
  NSPAIR(_ZN7S3522C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3522C6[];
extern void _ZN7S3522C63v17Ev();
static  VTBL_ENTRY vtc_S3522C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C6[0]),
  (VTBL_ENTRY)&_ZN7S3522C63v17Ev,
};
extern VTBL_ENTRY _ZTI7S3522C6[];
extern  VTBL_ENTRY _ZTV7S3522C6[];
Class_Descriptor cd_S3522C6 = {  "S3522C6", // class name
  0,0,//no base classes
  &(vtc_S3522C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3522C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3522C6),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  S3522C8  : virtual S3522C3 {
  int s3522c8f0;
  __tsi64 s3522c8f1;
  virtual void  v18(); // _ZN7S3522C83v18Ev
  virtual void  v19(); // _ZN7S3522C83v19Ev
  virtual void  v20(); // _ZN7S3522C83v20Ev
  ~S3522C8(); // tgen
  S3522C8(); // tgen
};
//SIG(-1 S3522C8) C1{ VBC2{ VBC3{ v4 v5 v6 v7} BC4{ v8 v9 v10 v11 v12 v13 v14 FD Fp} vd v15 v16 v17} v1 v2 v3 Fi FL}


void  S3522C8 ::v18(){vfunc_called(this, "_ZN7S3522C83v18Ev");}
void  S3522C8 ::v19(){vfunc_called(this, "_ZN7S3522C83v19Ev");}
void  S3522C8 ::v20(){vfunc_called(this, "_ZN7S3522C83v20Ev");}
S3522C8 ::~S3522C8(){ note_dtor("S3522C8", this);} // tgen
S3522C8 ::S3522C8(){ note_ctor("S3522C8", this);} // tgen

static void Test_S3522C8()
{
  extern Class_Descriptor cd_S3522C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,10)];
    init_test(&cd_S3522C8, buf);
    S3522C8 *dp, &lv = *(dp=new (buf) S3522C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,36), "sizeof(S3522C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3522C8)");
    check_base_class_offset(lv, (S3522C4*)(S3522C3*), 0, "S3522C8");
    check_base_class_offset(lv, (S3522C5*)(S3522C3*), ABISELECT(32,16), "S3522C8");
    check_base_class_offset(lv, (S3522C3*), ABISELECT(32,16), "S3522C8");
    check_field_offset(lv, s3522c8f0, ABISELECT(8,4), "S3522C8.s3522c8f0");
    check_field_offset(lv, s3522c8f1, ABISELECT(16,8), "S3522C8.s3522c8f1");
    test_class_info(&lv, &cd_S3522C8);
    dp->~S3522C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3522C8(Test_S3522C8, "S3522C8", ABISELECT(80,36));

#else // __cplusplus

extern void _ZN7S3522C8C1Ev();
extern void _ZN7S3522C8D1Ev();
Name_Map name_map_S3522C8[] = {
  NSPAIR(_ZN7S3522C8C1Ev),
  NSPAIR(_ZN7S3522C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3522C4;
extern VTBL_ENTRY _ZTI7S3522C4[];
extern  VTBL_ENTRY _ZTV7S3522C4[];
extern Class_Descriptor cd_S3522C5;
extern VTBL_ENTRY _ZTI7S3522C5[];
extern  VTBL_ENTRY _ZTV7S3522C5[];
extern Class_Descriptor cd_S3522C3;
extern VTBL_ENTRY _ZTI7S3522C3[];
extern  VTBL_ENTRY _ZTV7S3522C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C3[];
static Base_Class bases_S3522C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3522C4,    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
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3522C5,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3522C3,    ABISELECT(32,16), //bcp->offset
    17, //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 _ZTI7S3522C8[];
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
extern void _ZN7S3522C83v18Ev();
extern void _ZN7S3522C83v19Ev();
extern void _ZN7S3522C83v20Ev();
extern void _ZN7S3522C8D1Ev();
extern void _ZN7S3522C8D0Ev();
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void ABISELECT(_ZTv0_n88_N7S3522C8D1Ev,_ZTv0_n44_N7S3522C8D1Ev)();
extern void ABISELECT(_ZThn32_N7S3522C8D1Ev,_ZThn16_N7S3522C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S3522C8D0Ev,_ZTv0_n44_N7S3522C8D0Ev)();
extern void ABISELECT(_ZThn32_N7S3522C8D0Ev,_ZThn16_N7S3522C8D0Ev)() __attribute__((weak));
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY vtc_S3522C8[] = {
  0,
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C8[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3522C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C8D0Ev,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3522C8[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C8D1Ev,_ZTv0_n44_N7S3522C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C8D0Ev,_ZTv0_n44_N7S3522C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern VTBL_ENTRY _ZTV7S3522C8[];
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void _ZN7S3522C3D1Ev();
extern void _ZN7S3522C3D0Ev();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C3__7S3522C8[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C4__7S3522C3__7S3522C8[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
};
static  VTT_ENTRY vtt_S3522C8[] = {
  {&(_ZTV7S3522C8[8]),  8,43},
  {&(_ZTV7S3522C8[31]),  31,43},
  {&(_ZTV7S3522C8[8]),  8,43},
  {&(_tg__ZTV7S3522C3__7S3522C8[3]),  3,15},
  {&(_tg__ZTV7S3522C4__7S3522C3__7S3522C8[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S3522C8[];
extern  VTBL_ENTRY _ZTV7S3522C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C8[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C8D0Ev,_ZTv0_n44_N7S3522C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3522C8D0Ev,_ZThn16_N7S3522C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C8D1Ev,_ZTv0_n44_N7S3522C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3522C8D1Ev,_ZThn16_N7S3522C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3522C8 = {  "S3522C8", // class name
  bases_S3522C8, 3,
  &(vtc_S3522C8[0]), // expected_vtbl_contents
  &(vtt_S3522C8[0]), // expected_vtt_contents
  ABISELECT(80,36), // object size
  NSPAIRA(_ZTI7S3522C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3522C8),43, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3522C8),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3522C7  : virtual S3522C4 , virtual S3522C5 , S3522C8 , S3522C3 {
  virtual void  v21(); // _ZN7S3522C73v21Ev
  virtual void  v22(); // _ZN7S3522C73v22Ev
  virtual void  v23(); // _ZN7S3522C73v23Ev
  virtual void  v24(); // _ZN7S3522C73v24Ev
  virtual void  v25(); // _ZN7S3522C73v25Ev
  virtual void  v26(); // _ZN7S3522C73v26Ev
  ~S3522C7(); // tgen
  S3522C7(); // tgen
};
//SIG(-1 S3522C7) C1{ VBC2{ v7 v8 v9 v10} VBC3{ v11 v12 v13 v14 v15 v16 v17 FD Fp} BC4{ VBC5{ VBC2 BC3 vd v18 v19 v20} v21 v22 v23 Fi FL} BC5 v1 v2 v3 v4 v5 v6}


void  S3522C7 ::v21(){vfunc_called(this, "_ZN7S3522C73v21Ev");}
void  S3522C7 ::v22(){vfunc_called(this, "_ZN7S3522C73v22Ev");}
void  S3522C7 ::v23(){vfunc_called(this, "_ZN7S3522C73v23Ev");}
void  S3522C7 ::v24(){vfunc_called(this, "_ZN7S3522C73v24Ev");}
void  S3522C7 ::v25(){vfunc_called(this, "_ZN7S3522C73v25Ev");}
void  S3522C7 ::v26(){vfunc_called(this, "_ZN7S3522C73v26Ev");}
S3522C7 ::~S3522C7(){ note_dtor("S3522C7", this);} // tgen
S3522C7 ::S3522C7(){ note_ctor("S3522C7", this);} // tgen

static void Test_S3522C7()
{
  extern Class_Descriptor cd_S3522C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,20)];
    init_test(&cd_S3522C7, buf);
    S3522C7 *dp, &lv = *(dp=new (buf) S3522C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,76), "sizeof(S3522C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3522C7)");
    check_base_class_offset(lv, (S3522C4*), 0, "S3522C7");
    /*is_ambiguous_... S3522C7::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C4*)(S3522C3*), 0, "S3522C7");
    /*is_ambiguous_... S3522C7::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C4*)(S3522C3*), 0, "S3522C7");
    /*is_ambiguous_... S3522C7::S3522C5 */ AMB_check_base_class_offset(lv, (S3522C5*), ABISELECT(80,36), "S3522C7");
    /*is_ambiguous_... S3522C7::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C5*)(S3522C3*), ABISELECT(128,56), "S3522C7");
    check_base_class_offset(lv, (S3522C3*)(S3522C8*), ABISELECT(128,56), "S3522C7");
    check_base_class_offset(lv, (S3522C8*), 0, "S3522C7");
    /*is_ambiguous_... S3522C7::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C5*)(S3522C3*), ABISELECT(32,16), "S3522C7");
    /*is_ambiguous_... S3522C7::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C3*), ABISELECT(32,16), "S3522C7");
    test_class_info(&lv, &cd_S3522C7);
    dp->~S3522C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3522C7(Test_S3522C7, "S3522C7", ABISELECT(176,76));

#else // __cplusplus

extern void _ZN7S3522C7C1Ev();
extern void _ZN7S3522C7D1Ev();
Name_Map name_map_S3522C7[] = {
  NSPAIR(_ZN7S3522C7C1Ev),
  NSPAIR(_ZN7S3522C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3522C4;
extern VTBL_ENTRY _ZTI7S3522C4[];
extern  VTBL_ENTRY _ZTV7S3522C4[];
extern Class_Descriptor cd_S3522C5;
extern VTBL_ENTRY _ZTI7S3522C5[];
extern  VTBL_ENTRY _ZTV7S3522C5[];
extern Class_Descriptor cd_S3522C5;
extern VTBL_ENTRY _ZTI7S3522C5[];
extern  VTBL_ENTRY _ZTV7S3522C5[];
extern Class_Descriptor cd_S3522C3;
extern VTBL_ENTRY _ZTI7S3522C3[];
extern  VTBL_ENTRY _ZTV7S3522C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C3[];
extern Class_Descriptor cd_S3522C8;
extern VTBL_ENTRY _ZTI7S3522C8[];
extern  VTBL_ENTRY _ZTV7S3522C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C8[];
extern Class_Descriptor cd_S3522C5;
extern VTBL_ENTRY _ZTI7S3522C5[];
extern  VTBL_ENTRY _ZTV7S3522C5[];
extern Class_Descriptor cd_S3522C3;
extern VTBL_ENTRY _ZTI7S3522C3[];
extern  VTBL_ENTRY _ZTV7S3522C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C3[];
static Base_Class bases_S3522C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3522C4,    0, //bcp->offset
    -1, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3522C5,    ABISELECT(80,36), //bcp->offset
    39, //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_S3522C5,    ABISELECT(128,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
    3, //immediately_derived
  0, 0},
  {&cd_S3522C3,    ABISELECT(128,56), //bcp->offset
    55, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3522C8,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3522C5,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3522C3,    ABISELECT(32,16), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3522C7[];
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
extern void _ZN7S3522C83v18Ev();
extern void _ZN7S3522C83v19Ev();
extern void _ZN7S3522C83v20Ev();
extern void _ZN7S3522C7D1Ev();
extern void _ZN7S3522C7D0Ev();
extern void _ZN7S3522C73v21Ev();
extern void _ZN7S3522C73v22Ev();
extern void _ZN7S3522C73v23Ev();
extern void _ZN7S3522C73v24Ev();
extern void _ZN7S3522C73v25Ev();
extern void _ZN7S3522C73v26Ev();
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void ABISELECT(_ZThn32_N7S3522C7D1Ev,_ZThn16_N7S3522C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S3522C7D0Ev,_ZThn16_N7S3522C7D0Ev)();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void ABISELECT(_ZTv0_n88_N7S3522C7D1Ev,_ZTv0_n44_N7S3522C7D1Ev)();
extern void ABISELECT(_ZThn128_N7S3522C7D1Ev,_ZThn56_N7S3522C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S3522C7D0Ev,_ZTv0_n44_N7S3522C7D0Ev)();
extern void ABISELECT(_ZThn128_N7S3522C7D0Ev,_ZThn56_N7S3522C7D0Ev)() __attribute__((weak));
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY vtc_S3522C7[] = {
  ABISELECT(80,36),
  0,
  ABISELECT(128,56),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C7[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3522C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v21Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v22Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v23Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v24Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v25Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v26Ev,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3522C7[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3522C7D1Ev,_ZThn16_N7S3522C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3522C7D0Ev,_ZThn16_N7S3522C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S3522C7[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  0,
  0,
  0,
  ABISELECT(-128,-56),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-56),
  ABISELECT(-128,-56),
  (VTBL_ENTRY)&(_ZTI7S3522C7[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C7D1Ev,_ZTv0_n44_N7S3522C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C7D0Ev,_ZTv0_n44_N7S3522C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern VTBL_ENTRY _ZTV7S3522C7[];
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
extern void _ZN7S3522C83v18Ev();
extern void _ZN7S3522C83v19Ev();
extern void _ZN7S3522C83v20Ev();
extern void _ZN7S3522C8D1Ev();
extern void _ZN7S3522C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C8__7S3522C7[] = {
  0,
  ABISELECT(128,56),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C8[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3522C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C8D0Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void ABISELECT(_ZTv0_n88_N7S3522C8D1Ev,_ZTv0_n44_N7S3522C8D1Ev)();
extern void ABISELECT(_ZThn128_N7S3522C8D1Ev,_ZThn56_N7S3522C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S3522C8D0Ev,_ZTv0_n44_N7S3522C8D0Ev)();
extern void ABISELECT(_ZThn128_N7S3522C8D0Ev,_ZThn56_N7S3522C8D0Ev)() __attribute__((weak));
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C3__7S3522C8__7S3522C7[] = {
  0,
  0,
  0,
  ABISELECT(-128,-56),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-56),
  ABISELECT(-128,-56),
  (VTBL_ENTRY)&(_ZTI7S3522C8[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C8D1Ev,_ZTv0_n44_N7S3522C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C8D0Ev,_ZTv0_n44_N7S3522C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void _ZN7S3522C3D1Ev();
extern void _ZN7S3522C3D0Ev();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C3__A__7S3522C7[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C4__7S3522C3__A__7S3522C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void _ZN7S3522C3D1Ev();
extern void _ZN7S3522C3D0Ev();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C3__7S3522C7[] = {
  ABISELECT(-128,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C4__7S3522C3__7S3522C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(128,56),
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
};
static  VTT_ENTRY vtt_S3522C7[] = {
  {&(_ZTV7S3522C7[9]),  9,81},
  {&(_tg__ZTV7S3522C8__7S3522C7[8]),  8,17},
  {&(_tg__ZTV7S3522C3__7S3522C8__7S3522C7[14]),  14,26},
  {&(_tg__ZTV7S3522C8__7S3522C7[8]),  8,17},
  {&(_tg__ZTV7S3522C3__A__7S3522C7[3]),  3,15},
  {&(_tg__ZTV7S3522C4__7S3522C3__A__7S3522C7[6]),  6,10},
  {&(_ZTV7S3522C7[9]),  9,81},
  {&(_ZTV7S3522C7[48]),  48,81},
  {&(_ZTV7S3522C7[69]),  69,81},
  {&(_ZTV7S3522C7[27]),  27,81},
  {&(_tg__ZTV7S3522C3__7S3522C7[3]),  3,15},
  {&(_tg__ZTV7S3522C4__7S3522C3__7S3522C7[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S3522C7[];
extern  VTBL_ENTRY _ZTV7S3522C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C7[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C8D0Ev,_ZTv0_n44_N7S3522C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S3522C8D0Ev,_ZThn56_N7S3522C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C8D1Ev,_ZTv0_n44_N7S3522C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S3522C8D1Ev,_ZThn56_N7S3522C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C7D0Ev,_ZTv0_n44_N7S3522C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S3522C7D0Ev,_ZThn56_N7S3522C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C7D1Ev,_ZTv0_n44_N7S3522C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S3522C7D1Ev,_ZThn56_N7S3522C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3522C7 = {  "S3522C7", // class name
  bases_S3522C7, 7,
  &(vtc_S3522C7[0]), // expected_vtbl_contents
  &(vtt_S3522C7[0]), // expected_vtt_contents
  ABISELECT(176,76), // object size
  NSPAIRA(_ZTI7S3522C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3522C7),81, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3522C7),12, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3522C2  : S3522C3 , S3522C6 , virtual S3522C5 , virtual S3522C7 , S3522C4 {
  virtual void  v27(); // _ZN7S3522C23v27Ev
  virtual void  v28(); // _ZN7S3522C23v28Ev
  ~S3522C2(); // tgen
  S3522C2(); // tgen
};
//SIG(-1 S3522C2) C1{ BC2{ VBC3{ v3 v4 v5 v6} BC4{ v7 v8 v9 v10 v11 v12 v13 FD Fp} vd v14 v15 v16} BC5{ v17} VBC4 VBC6{ VBC3 VBC4 BC7{ VBC2 v18 v19 v20 Fi FL} BC2 v21 v22 v23 v24 v25 v26} BC3 v1 v2}


void  S3522C2 ::v27(){vfunc_called(this, "_ZN7S3522C23v27Ev");}
void  S3522C2 ::v28(){vfunc_called(this, "_ZN7S3522C23v28Ev");}
S3522C2 ::~S3522C2(){ note_dtor("S3522C2", this);} // tgen
S3522C2 ::S3522C2(){ note_ctor("S3522C2", this);} // tgen

static void Test_S3522C2()
{
  extern Class_Descriptor cd_S3522C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,27)];
    init_test(&cd_S3522C2, buf);
    S3522C2 *dp, &lv = *(dp=new (buf) S3522C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,104), "sizeof(S3522C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3522C2)");
    /*is_ambiguous_... S3522C2::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C4*)(S3522C3*), ABISELECT(112,48), "S3522C2");
    check_base_class_offset(lv, (S3522C4*)(S3522C7*), ABISELECT(112,48), "S3522C2");
    /*is_ambiguous_... S3522C2::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C4*)(S3522C3*), ABISELECT(112,48), "S3522C2");
    /*is_ambiguous_... S3522C7::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C4*)(S3522C3*)(S3522C7*), ABISELECT(112,48), "S3522C2");
    /*is_ambiguous_... S3522C2::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C5*)(S3522C3*), 0, "S3522C2");
    /*is_ambiguous_... S3522C2::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C3*), 0, "S3522C2");
    check_base_class_offset(lv, (S3522C6*), ABISELECT(40,20), "S3522C2");
    /*is_ambiguous_... S3522C2::S3522C5 */ AMB_check_base_class_offset(lv, (S3522C5*), ABISELECT(64,28), "S3522C2");
    /*is_ambiguous_... S3522C7::S3522C5 */ AMB_check_base_class_offset(lv, (S3522C5*)(S3522C7*), ABISELECT(64,28), "S3522C2");
    /*is_ambiguous_... S3522C2::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C5*)(S3522C3*), ABISELECT(192,84), "S3522C2");
    check_base_class_offset(lv, (S3522C3*)(S3522C8*)(S3522C7*), ABISELECT(192,84), "S3522C2");
    check_base_class_offset(lv, (S3522C8*)(S3522C7*), ABISELECT(112,48), "S3522C2");
    /*is_ambiguous_... S3522C7::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C5*)(S3522C3*)(S3522C7*), ABISELECT(144,64), "S3522C2");
    /*is_ambiguous_... S3522C7::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C3*)(S3522C7*), ABISELECT(144,64), "S3522C2");
    check_base_class_offset(lv, (S3522C7*), ABISELECT(112,48), "S3522C2");
    /*is_ambiguous_... S3522C2::S3522C4 */ AMB_check_base_class_offset(lv, (S3522C4*), ABISELECT(48,24), "S3522C2");
    test_class_info(&lv, &cd_S3522C2);
    dp->~S3522C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3522C2(Test_S3522C2, "S3522C2", ABISELECT(240,104));

#else // __cplusplus

extern void _ZN7S3522C2C1Ev();
extern void _ZN7S3522C2D1Ev();
Name_Map name_map_S3522C2[] = {
  NSPAIR(_ZN7S3522C2C1Ev),
  NSPAIR(_ZN7S3522C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3522C4;
extern VTBL_ENTRY _ZTI7S3522C4[];
extern  VTBL_ENTRY _ZTV7S3522C4[];
extern Class_Descriptor cd_S3522C5;
extern VTBL_ENTRY _ZTI7S3522C5[];
extern  VTBL_ENTRY _ZTV7S3522C5[];
extern Class_Descriptor cd_S3522C3;
extern VTBL_ENTRY _ZTI7S3522C3[];
extern  VTBL_ENTRY _ZTV7S3522C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C3[];
extern Class_Descriptor cd_S3522C6;
extern VTBL_ENTRY _ZTI7S3522C6[];
extern  VTBL_ENTRY _ZTV7S3522C6[];
extern Class_Descriptor cd_S3522C5;
extern VTBL_ENTRY _ZTI7S3522C5[];
extern  VTBL_ENTRY _ZTV7S3522C5[];
extern Class_Descriptor cd_S3522C5;
extern VTBL_ENTRY _ZTI7S3522C5[];
extern  VTBL_ENTRY _ZTV7S3522C5[];
extern Class_Descriptor cd_S3522C3;
extern VTBL_ENTRY _ZTI7S3522C3[];
extern  VTBL_ENTRY _ZTV7S3522C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C3[];
extern Class_Descriptor cd_S3522C8;
extern VTBL_ENTRY _ZTI7S3522C8[];
extern  VTBL_ENTRY _ZTV7S3522C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C8[];
extern Class_Descriptor cd_S3522C5;
extern VTBL_ENTRY _ZTI7S3522C5[];
extern  VTBL_ENTRY _ZTV7S3522C5[];
extern Class_Descriptor cd_S3522C3;
extern VTBL_ENTRY _ZTI7S3522C3[];
extern  VTBL_ENTRY _ZTV7S3522C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C3[];
extern Class_Descriptor cd_S3522C7;
extern VTBL_ENTRY _ZTI7S3522C7[];
extern  VTBL_ENTRY _ZTV7S3522C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C7[];
extern Class_Descriptor cd_S3522C4;
extern VTBL_ENTRY _ZTI7S3522C4[];
extern  VTBL_ENTRY _ZTV7S3522C4[];
static Base_Class bases_S3522C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3522C4,    ABISELECT(112,48), //bcp->offset
    -1, //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
    2, //immediately_derived
  0, 1},
  {&cd_S3522C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S3522C3,    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_S3522C6,    ABISELECT(40,20), //bcp->offset
    20, //bcp->virtual_function_table_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_S3522C5,    ABISELECT(64,28), //bcp->offset
    29, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3522C5,    ABISELECT(192,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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3522C3,    ABISELECT(192,84), //bcp->offset
    104, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3522C8,    ABISELECT(112,48), //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
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3522C5,    ABISELECT(144,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
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3522C3,    ABISELECT(144,64), //bcp->offset
    89, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3522C7,    ABISELECT(112,48), //bcp->offset
    45, //bcp->virtual_function_table_offset
    29, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3522C4,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3522C2[];
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void _ZN7S3522C2D1Ev();
extern void _ZN7S3522C2D0Ev();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
extern void _ZN7S3522C23v27Ev();
extern void _ZN7S3522C23v28Ev();
extern void _ZN7S3522C63v17Ev();
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
extern void _ZN7S3522C83v18Ev();
extern void _ZN7S3522C83v19Ev();
extern void _ZN7S3522C83v20Ev();
extern void ABISELECT(_ZTv0_n104_N7S3522C2D1Ev,_ZTv0_n52_N7S3522C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S3522C2D1Ev,_ZThn48_N7S3522C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S3522C2D0Ev,_ZTv0_n52_N7S3522C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S3522C2D0Ev,_ZThn48_N7S3522C2D0Ev)() __attribute__((weak));
extern void _ZN7S3522C73v21Ev();
extern void _ZN7S3522C73v22Ev();
extern void _ZN7S3522C73v23Ev();
extern void _ZN7S3522C73v24Ev();
extern void _ZN7S3522C73v25Ev();
extern void _ZN7S3522C73v26Ev();
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void ABISELECT(_ZTvn32_n104_N7S3522C2D1Ev,_ZTvn16_n52_N7S3522C2D1Ev)();
extern void ABISELECT(_ZTvn32_n104_N7S3522C2D0Ev,_ZTvn16_n52_N7S3522C2D0Ev)();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void ABISELECT(_ZTv0_n88_N7S3522C2D1Ev,_ZTv0_n44_N7S3522C2D1Ev)();
extern void ABISELECT(_ZThn192_N7S3522C2D1Ev,_ZThn84_N7S3522C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S3522C2D0Ev,_ZTv0_n44_N7S3522C2D0Ev)();
extern void ABISELECT(_ZThn192_N7S3522C2D0Ev,_ZThn84_N7S3522C2D0Ev)() __attribute__((weak));
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY vtc_S3522C2[] = {
  ABISELECT(192,84),
  ABISELECT(112,48),
  ABISELECT(64,28),
  ABISELECT(112,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C2[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3522C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3522C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3522C23v28Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3522C2[0]),
  (VTBL_ENTRY)&_ZN7S3522C63v17Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3522C2[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI7S3522C2[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  0,
  0,
  0,
  ABISELECT(-48,-20),
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  (VTBL_ENTRY)&(_ZTI7S3522C2[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S3522C2D1Ev,_ZTv0_n52_N7S3522C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S3522C2D0Ev,_ZTv0_n52_N7S3522C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C73v21Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v22Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v23Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v24Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v25Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v26Ev,
  ABISELECT(-32,-16),
  ABISELECT(-144,-64),
  (VTBL_ENTRY)&(_ZTI7S3522C2[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N7S3522C2D1Ev,_ZTvn16_n52_N7S3522C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N7S3522C2D0Ev,_ZTvn16_n52_N7S3522C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
  0,
  0,
  0,
  ABISELECT(-192,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-192,-84),
  (VTBL_ENTRY)&(_ZTI7S3522C2[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C2D1Ev,_ZTv0_n44_N7S3522C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C2D0Ev,_ZTv0_n44_N7S3522C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern VTBL_ENTRY _ZTV7S3522C2[];
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void _ZN7S3522C3D1Ev();
extern void _ZN7S3522C3D0Ev();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C3__A__7S3522C2[] = {
  ABISELECT(112,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C4__7S3522C3__A__7S3522C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
};
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
extern void _ZN7S3522C83v18Ev();
extern void _ZN7S3522C83v19Ev();
extern void _ZN7S3522C83v20Ev();
extern void _ZN7S3522C7D1Ev();
extern void _ZN7S3522C7D0Ev();
extern void _ZN7S3522C73v21Ev();
extern void _ZN7S3522C73v22Ev();
extern void _ZN7S3522C73v23Ev();
extern void _ZN7S3522C73v24Ev();
extern void _ZN7S3522C73v25Ev();
extern void _ZN7S3522C73v26Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C7__7S3522C2[] = {
  ABISELECT(-48,-20),
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C7[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3522C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v21Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v22Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v23Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v24Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v25Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v26Ev,
};
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
extern void _ZN7S3522C83v18Ev();
extern void _ZN7S3522C83v19Ev();
extern void _ZN7S3522C83v20Ev();
extern void _ZN7S3522C8D1Ev();
extern void _ZN7S3522C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C87S3522C7__7S3522C2[] = {
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C8[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3522C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C8D0Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void ABISELECT(_ZTv0_n88_N7S3522C8D1Ev,_ZTv0_n44_N7S3522C8D1Ev)();
extern void ABISELECT(_ZThn80_N7S3522C8D1Ev,_ZThn36_N7S3522C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S3522C8D0Ev,_ZTv0_n44_N7S3522C8D0Ev)();
extern void ABISELECT(_ZThn80_N7S3522C8D0Ev,_ZThn36_N7S3522C8D0Ev)() __attribute__((weak));
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C3__7S3522C87S3522C7__7S3522C2[] = {
  0,
  0,
  0,
  ABISELECT(-80,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S3522C8[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C8D1Ev,_ZTv0_n44_N7S3522C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C8D0Ev,_ZTv0_n44_N7S3522C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void _ZN7S3522C3D1Ev();
extern void _ZN7S3522C3D0Ev();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C37S3522C7__A2__7S3522C2[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C4__7S3522C37S3522C7__A2__7S3522C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C5__7S3522C7__7S3522C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI7S3522C7[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void ABISELECT(_ZTv0_n88_N7S3522C7D1Ev,_ZTv0_n44_N7S3522C7D1Ev)();
extern void ABISELECT(_ZThn80_N7S3522C7D1Ev,_ZThn36_N7S3522C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S3522C7D0Ev,_ZTv0_n44_N7S3522C7D0Ev)();
extern void ABISELECT(_ZThn80_N7S3522C7D0Ev,_ZThn36_N7S3522C7D0Ev)() __attribute__((weak));
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C3__7S3522C7__7S3522C2[] = {
  0,
  0,
  0,
  ABISELECT(-80,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S3522C7[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C7D1Ev,_ZTv0_n44_N7S3522C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C7D0Ev,_ZTv0_n44_N7S3522C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void ABISELECT(_ZThn32_N7S3522C7D1Ev,_ZThn16_N7S3522C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S3522C7D0Ev,_ZThn16_N7S3522C7D0Ev)();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C3__A__7S3522C7__7S3522C2[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3522C7[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3522C7D1Ev,_ZThn16_N7S3522C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3522C7D0Ev,_ZThn16_N7S3522C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void _ZN7S3522C3D1Ev();
extern void _ZN7S3522C3D0Ev();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C3__A1__7S3522C2[] = {
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C4__7S3522C3__A1__7S3522C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
};
static  VTT_ENTRY vtt_S3522C2[] = {
  {&(_ZTV7S3522C2[6]),  6,130},
  {&(_tg__ZTV7S3522C3__A__7S3522C2[3]),  3,15},
  {&(_tg__ZTV7S3522C4__7S3522C3__A__7S3522C2[6]),  6,10},
  {&(_ZTV7S3522C2[74]),  74,130},
  {&(_ZTV7S3522C2[38]),  38,130},
  {&(_ZTV7S3522C2[74]),  74,130},
  {&(_ZTV7S3522C2[118]),  118,130},
  {&(_ZTV7S3522C2[92]),  92,130},
  {&(_tg__ZTV7S3522C7__7S3522C2[9]),  9,24},
  {&(_tg__ZTV7S3522C87S3522C7__7S3522C2[8]),  8,17},
  {&(_tg__ZTV7S3522C3__7S3522C87S3522C7__7S3522C2[14]),  14,26},
  {&(_tg__ZTV7S3522C87S3522C7__7S3522C2[8]),  8,17},
  {&(_tg__ZTV7S3522C37S3522C7__A2__7S3522C2[3]),  3,15},
  {&(_tg__ZTV7S3522C4__7S3522C37S3522C7__A2__7S3522C2[6]),  6,10},
  {&(_tg__ZTV7S3522C7__7S3522C2[9]),  9,24},
  {&(_tg__ZTV7S3522C5__7S3522C7__7S3522C2[9]),  9,16},
  {&(_tg__ZTV7S3522C3__7S3522C7__7S3522C2[14]),  14,26},
  {&(_tg__ZTV7S3522C3__A__7S3522C7__7S3522C2[3]),  3,15},
  {&(_tg__ZTV7S3522C3__A1__7S3522C2[3]),  3,15},
  {&(_tg__ZTV7S3522C4__7S3522C3__A1__7S3522C2[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S3522C2[];
extern  VTBL_ENTRY _ZTV7S3522C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C2[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C7D0Ev,_ZTv0_n44_N7S3522C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S3522C7D0Ev,_ZThn36_N7S3522C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C7D1Ev,_ZTv0_n44_N7S3522C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S3522C7D1Ev,_ZThn36_N7S3522C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C8D0Ev,_ZTv0_n44_N7S3522C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S3522C8D0Ev,_ZThn36_N7S3522C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C8D1Ev,_ZTv0_n44_N7S3522C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S3522C8D1Ev,_ZThn36_N7S3522C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C2D0Ev,_ZTv0_n44_N7S3522C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S3522C2D0Ev,_ZThn84_N7S3522C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C2D1Ev,_ZTv0_n44_N7S3522C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S3522C2D1Ev,_ZThn84_N7S3522C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S3522C2D0Ev,_ZTv0_n52_N7S3522C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S3522C2D0Ev,_ZThn48_N7S3522C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S3522C2D1Ev,_ZTv0_n52_N7S3522C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S3522C2D1Ev,_ZThn48_N7S3522C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3522C2 = {  "S3522C2", // class name
  bases_S3522C2, 12,
  &(vtc_S3522C2[0]), // expected_vtbl_contents
  &(vtt_S3522C2[0]), // expected_vtt_contents
  ABISELECT(240,104), // object size
  NSPAIRA(_ZTI7S3522C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3522C2),130, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3522C2),20, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3522C1  : S3522C2 {
  virtual  ~S3522C1(); // _ZN7S3522C1D2Ev
  virtual void  v1(); // _ZN7S3522C12v1Ev
  virtual void  v2(); // _ZN7S3522C12v2Ev
  S3522C1(); // tgen
};
//SIG(1 S3522C1) C1{ BC2{ BC3{ VBC4{ v3 v4 v5 v6} BC5{ v7 v8 v9 v10 v11 v12 v13 FD Fp} vd v14 v15 v16} BC6{ v17} VBC5 VBC7{ VBC4 VBC5 BC8{ VBC3 v18 v19 v20 Fi FL} BC3 v21 v22 v23 v24 v25 v26} BC4 v27 v28} vd v1 v2}


 S3522C1 ::~S3522C1(){ note_dtor("S3522C1", this);}
void  S3522C1 ::v1(){vfunc_called(this, "_ZN7S3522C12v1Ev");}
void  S3522C1 ::v2(){vfunc_called(this, "_ZN7S3522C12v2Ev");}
S3522C1 ::S3522C1(){ note_ctor("S3522C1", this);} // tgen

static void Test_S3522C1()
{
  extern Class_Descriptor cd_S3522C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,27)];
    init_test(&cd_S3522C1, buf);
    S3522C1 *dp, &lv = *(dp=new (buf) S3522C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,104), "sizeof(S3522C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3522C1)");
    /*is_ambiguous_... S3522C2::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C4*)(S3522C3*)(S3522C2*), ABISELECT(112,48), "S3522C1");
    check_base_class_offset(lv, (S3522C4*)(S3522C7*), ABISELECT(112,48), "S3522C1");
    /*is_ambiguous_... S3522C1::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C4*)(S3522C3*), ABISELECT(112,48), "S3522C1");
    /*is_ambiguous_... S3522C7::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C4*)(S3522C3*)(S3522C7*), ABISELECT(112,48), "S3522C1");
    /*is_ambiguous_... S3522C2::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C5*)(S3522C3*)(S3522C2*), 0, "S3522C1");
    /*is_ambiguous_... S3522C2::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C3*)(S3522C2*), 0, "S3522C1");
    check_base_class_offset(lv, (S3522C6*)(S3522C2*), ABISELECT(40,20), "S3522C1");
    /*is_ambiguous_... S3522C2::S3522C5 */ AMB_check_base_class_offset(lv, (S3522C5*)(S3522C2*), ABISELECT(64,28), "S3522C1");
    /*is_ambiguous_... S3522C7::S3522C5 */ AMB_check_base_class_offset(lv, (S3522C5*)(S3522C7*), ABISELECT(64,28), "S3522C1");
    /*is_ambiguous_... S3522C1::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C5*)(S3522C3*), ABISELECT(192,84), "S3522C1");
    check_base_class_offset(lv, (S3522C3*)(S3522C8*)(S3522C7*), ABISELECT(192,84), "S3522C1");
    check_base_class_offset(lv, (S3522C8*)(S3522C7*), ABISELECT(112,48), "S3522C1");
    /*is_ambiguous_... S3522C7::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C5*)(S3522C3*)(S3522C7*), ABISELECT(144,64), "S3522C1");
    /*is_ambiguous_... S3522C7::S3522C3 */ AMB_check_base_class_offset(lv, (S3522C3*)(S3522C7*), ABISELECT(144,64), "S3522C1");
    check_base_class_offset(lv, (S3522C7*)(S3522C2*), ABISELECT(112,48), "S3522C1");
    /*is_ambiguous_... S3522C2::S3522C4 */ AMB_check_base_class_offset(lv, (S3522C4*)(S3522C2*), ABISELECT(48,24), "S3522C1");
    check_base_class_offset(lv, (S3522C2*), 0, "S3522C1");
    test_class_info(&lv, &cd_S3522C1);
    dp->~S3522C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3522C1(Test_S3522C1, "S3522C1", ABISELECT(240,104));

#else // __cplusplus

extern void _ZN7S3522C1C1Ev();
extern void _ZN7S3522C1D2Ev();
Name_Map name_map_S3522C1[] = {
  NSPAIR(_ZN7S3522C1C1Ev),
  NSPAIR(_ZN7S3522C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3522C4;
extern VTBL_ENTRY _ZTI7S3522C4[];
extern  VTBL_ENTRY _ZTV7S3522C4[];
extern Class_Descriptor cd_S3522C5;
extern VTBL_ENTRY _ZTI7S3522C5[];
extern  VTBL_ENTRY _ZTV7S3522C5[];
extern Class_Descriptor cd_S3522C3;
extern VTBL_ENTRY _ZTI7S3522C3[];
extern  VTBL_ENTRY _ZTV7S3522C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C3[];
extern Class_Descriptor cd_S3522C6;
extern VTBL_ENTRY _ZTI7S3522C6[];
extern  VTBL_ENTRY _ZTV7S3522C6[];
extern Class_Descriptor cd_S3522C5;
extern VTBL_ENTRY _ZTI7S3522C5[];
extern  VTBL_ENTRY _ZTV7S3522C5[];
extern Class_Descriptor cd_S3522C5;
extern VTBL_ENTRY _ZTI7S3522C5[];
extern  VTBL_ENTRY _ZTV7S3522C5[];
extern Class_Descriptor cd_S3522C3;
extern VTBL_ENTRY _ZTI7S3522C3[];
extern  VTBL_ENTRY _ZTV7S3522C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C3[];
extern Class_Descriptor cd_S3522C8;
extern VTBL_ENTRY _ZTI7S3522C8[];
extern  VTBL_ENTRY _ZTV7S3522C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C8[];
extern Class_Descriptor cd_S3522C5;
extern VTBL_ENTRY _ZTI7S3522C5[];
extern  VTBL_ENTRY _ZTV7S3522C5[];
extern Class_Descriptor cd_S3522C3;
extern VTBL_ENTRY _ZTI7S3522C3[];
extern  VTBL_ENTRY _ZTV7S3522C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C3[];
extern Class_Descriptor cd_S3522C7;
extern VTBL_ENTRY _ZTI7S3522C7[];
extern  VTBL_ENTRY _ZTV7S3522C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C7[];
extern Class_Descriptor cd_S3522C4;
extern VTBL_ENTRY _ZTI7S3522C4[];
extern  VTBL_ENTRY _ZTV7S3522C4[];
extern Class_Descriptor cd_S3522C2;
extern VTBL_ENTRY _ZTI7S3522C2[];
extern  VTBL_ENTRY _ZTV7S3522C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C2[];
static Base_Class bases_S3522C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3522C4,    ABISELECT(112,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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_S3522C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S3522C3,    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
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3522C6,    ABISELECT(40,20), //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
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3522C5,    ABISELECT(64,28), //bcp->offset
    31, //bcp->virtual_function_table_offset
    9, //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
    10, //immediately_derived
  0, 1},
  {&cd_S3522C5,    ABISELECT(192,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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3522C3,    ABISELECT(192,84), //bcp->offset
    106, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3522C8,    ABISELECT(112,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3522C5,    ABISELECT(144,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
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3522C3,    ABISELECT(144,64), //bcp->offset
    91, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3522C7,    ABISELECT(112,48), //bcp->offset
    47, //bcp->virtual_function_table_offset
    29, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3522C4,    ABISELECT(48,24), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3522C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3522C1[];
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void _ZN7S3522C1D1Ev();
extern void _ZN7S3522C1D0Ev();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
extern void _ZN7S3522C23v27Ev();
extern void _ZN7S3522C23v28Ev();
extern void _ZN7S3522C12v1Ev();
extern void _ZN7S3522C12v2Ev();
extern void _ZN7S3522C63v17Ev();
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
extern void _ZN7S3522C83v18Ev();
extern void _ZN7S3522C83v19Ev();
extern void _ZN7S3522C83v20Ev();
extern void ABISELECT(_ZTv0_n104_N7S3522C1D1Ev,_ZTv0_n52_N7S3522C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S3522C1D1Ev,_ZThn48_N7S3522C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S3522C1D0Ev,_ZTv0_n52_N7S3522C1D0Ev)();
extern void ABISELECT(_ZThn112_N7S3522C1D0Ev,_ZThn48_N7S3522C1D0Ev)() __attribute__((weak));
extern void _ZN7S3522C73v21Ev();
extern void _ZN7S3522C73v22Ev();
extern void _ZN7S3522C73v23Ev();
extern void _ZN7S3522C73v24Ev();
extern void _ZN7S3522C73v25Ev();
extern void _ZN7S3522C73v26Ev();
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void ABISELECT(_ZTvn32_n104_N7S3522C1D1Ev,_ZTvn16_n52_N7S3522C1D1Ev)();
extern void ABISELECT(_ZTvn32_n104_N7S3522C1D0Ev,_ZTvn16_n52_N7S3522C1D0Ev)();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void ABISELECT(_ZTv0_n88_N7S3522C1D1Ev,_ZTv0_n44_N7S3522C1D1Ev)();
extern void ABISELECT(_ZThn192_N7S3522C1D1Ev,_ZThn84_N7S3522C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S3522C1D0Ev,_ZTv0_n44_N7S3522C1D0Ev)();
extern void ABISELECT(_ZThn192_N7S3522C1D0Ev,_ZThn84_N7S3522C1D0Ev)() __attribute__((weak));
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY vtc_S3522C1[] = {
  ABISELECT(192,84),
  ABISELECT(112,48),
  ABISELECT(64,28),
  ABISELECT(112,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C1[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3522C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3522C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3522C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3522C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3522C12v2Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3522C1[0]),
  (VTBL_ENTRY)&_ZN7S3522C63v17Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3522C1[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI7S3522C1[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  0,
  0,
  0,
  ABISELECT(-48,-20),
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  (VTBL_ENTRY)&(_ZTI7S3522C1[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S3522C1D1Ev,_ZTv0_n52_N7S3522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S3522C1D0Ev,_ZTv0_n52_N7S3522C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C73v21Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v22Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v23Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v24Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v25Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v26Ev,
  ABISELECT(-32,-16),
  ABISELECT(-144,-64),
  (VTBL_ENTRY)&(_ZTI7S3522C1[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N7S3522C1D1Ev,_ZTvn16_n52_N7S3522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N7S3522C1D0Ev,_ZTvn16_n52_N7S3522C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
  0,
  0,
  0,
  ABISELECT(-192,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-192,-84),
  (VTBL_ENTRY)&(_ZTI7S3522C1[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C1D1Ev,_ZTv0_n44_N7S3522C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C1D0Ev,_ZTv0_n44_N7S3522C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern VTBL_ENTRY _ZTV7S3522C1[];
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void _ZN7S3522C2D1Ev();
extern void _ZN7S3522C2D0Ev();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
extern void _ZN7S3522C23v27Ev();
extern void _ZN7S3522C23v28Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C2__7S3522C1[] = {
  ABISELECT(192,84),
  ABISELECT(112,48),
  ABISELECT(64,28),
  ABISELECT(112,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C2[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3522C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3522C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3522C23v28Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void _ZN7S3522C3D1Ev();
extern void _ZN7S3522C3D0Ev();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C37S3522C2__7S3522C1[] = {
  ABISELECT(112,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C4__7S3522C37S3522C2__7S3522C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
};
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
extern void _ZN7S3522C83v18Ev();
extern void _ZN7S3522C83v19Ev();
extern void _ZN7S3522C83v20Ev();
extern void ABISELECT(_ZTv0_n104_N7S3522C2D1Ev,_ZTv0_n52_N7S3522C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S3522C2D1Ev,_ZThn48_N7S3522C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S3522C2D0Ev,_ZTv0_n52_N7S3522C2D0Ev)();
extern void ABISELECT(_ZThn112_N7S3522C2D0Ev,_ZThn48_N7S3522C2D0Ev)() __attribute__((weak));
extern void _ZN7S3522C73v21Ev();
extern void _ZN7S3522C73v22Ev();
extern void _ZN7S3522C73v23Ev();
extern void _ZN7S3522C73v24Ev();
extern void _ZN7S3522C73v25Ev();
extern void _ZN7S3522C73v26Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C7__7S3522C2__7S3522C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  0,
  0,
  0,
  ABISELECT(-48,-20),
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  ABISELECT(-112,-48),
  (VTBL_ENTRY)&(_ZTI7S3522C2[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S3522C2D1Ev,_ZTv0_n52_N7S3522C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S3522C2D0Ev,_ZTv0_n52_N7S3522C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C73v21Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v22Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v23Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v24Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v25Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v26Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C5__A1__7S3522C2__7S3522C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI7S3522C2[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void ABISELECT(_ZTv0_n88_N7S3522C2D1Ev,_ZTv0_n44_N7S3522C2D1Ev)();
extern void ABISELECT(_ZThn192_N7S3522C2D1Ev,_ZThn84_N7S3522C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S3522C2D0Ev,_ZTv0_n44_N7S3522C2D0Ev)();
extern void ABISELECT(_ZThn192_N7S3522C2D0Ev,_ZThn84_N7S3522C2D0Ev)() __attribute__((weak));
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C3__A1__7S3522C2__7S3522C1[] = {
  0,
  0,
  0,
  ABISELECT(-192,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-192,-84),
  (VTBL_ENTRY)&(_ZTI7S3522C2[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C2D1Ev,_ZTv0_n44_N7S3522C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C2D0Ev,_ZTv0_n44_N7S3522C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void ABISELECT(_ZTvn32_n104_N7S3522C2D1Ev,_ZTvn16_n52_N7S3522C2D1Ev)();
extern void ABISELECT(_ZTvn32_n104_N7S3522C2D0Ev,_ZTvn16_n52_N7S3522C2D0Ev)();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C37S3522C7__A2__7S3522C2__7S3522C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-144,-64),
  (VTBL_ENTRY)&(_ZTI7S3522C2[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N7S3522C2D1Ev,_ZTvn16_n52_N7S3522C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n104_N7S3522C2D0Ev,_ZTvn16_n52_N7S3522C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
extern void _ZN7S3522C83v18Ev();
extern void _ZN7S3522C83v19Ev();
extern void _ZN7S3522C83v20Ev();
extern void _ZN7S3522C7D1Ev();
extern void _ZN7S3522C7D0Ev();
extern void _ZN7S3522C73v21Ev();
extern void _ZN7S3522C73v22Ev();
extern void _ZN7S3522C73v23Ev();
extern void _ZN7S3522C73v24Ev();
extern void _ZN7S3522C73v25Ev();
extern void _ZN7S3522C73v26Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C7__7S3522C1[] = {
  ABISELECT(-48,-20),
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C7[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3522C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v21Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v22Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v23Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v24Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v25Ev,
  (VTBL_ENTRY)&_ZN7S3522C73v26Ev,
};
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
extern void _ZN7S3522C83v18Ev();
extern void _ZN7S3522C83v19Ev();
extern void _ZN7S3522C83v20Ev();
extern void _ZN7S3522C8D1Ev();
extern void _ZN7S3522C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C87S3522C7__7S3522C1[] = {
  0,
  ABISELECT(80,36),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C8[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3522C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3522C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C8D0Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void ABISELECT(_ZTv0_n88_N7S3522C8D1Ev,_ZTv0_n44_N7S3522C8D1Ev)();
extern void ABISELECT(_ZThn80_N7S3522C8D1Ev,_ZThn36_N7S3522C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S3522C8D0Ev,_ZTv0_n44_N7S3522C8D0Ev)();
extern void ABISELECT(_ZThn80_N7S3522C8D0Ev,_ZThn36_N7S3522C8D0Ev)() __attribute__((weak));
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C3__7S3522C87S3522C7__7S3522C1[] = {
  0,
  0,
  0,
  ABISELECT(-80,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S3522C8[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C8D1Ev,_ZTv0_n44_N7S3522C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C8D0Ev,_ZTv0_n44_N7S3522C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void _ZN7S3522C3D1Ev();
extern void _ZN7S3522C3D0Ev();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C37S3522C7__A2__7S3522C1[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C4__7S3522C37S3522C7__A2__7S3522C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C5__7S3522C7__7S3522C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI7S3522C7[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void ABISELECT(_ZTv0_n88_N7S3522C7D1Ev,_ZTv0_n44_N7S3522C7D1Ev)();
extern void ABISELECT(_ZThn80_N7S3522C7D1Ev,_ZThn36_N7S3522C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S3522C7D0Ev,_ZTv0_n44_N7S3522C7D0Ev)();
extern void ABISELECT(_ZThn80_N7S3522C7D0Ev,_ZThn36_N7S3522C7D0Ev)() __attribute__((weak));
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C3__7S3522C7__7S3522C1[] = {
  0,
  0,
  0,
  ABISELECT(-80,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S3522C7[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C7D1Ev,_ZTv0_n44_N7S3522C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3522C7D0Ev,_ZTv0_n44_N7S3522C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void ABISELECT(_ZThn32_N7S3522C7D1Ev,_ZThn16_N7S3522C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S3522C7D0Ev,_ZThn16_N7S3522C7D0Ev)();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C3__A__7S3522C7__7S3522C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3522C7[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3522C7D1Ev,_ZThn16_N7S3522C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3522C7D0Ev,_ZThn16_N7S3522C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern void _ZN7S3522C52v7Ev();
extern void _ZN7S3522C52v8Ev();
extern void _ZN7S3522C52v9Ev();
extern void _ZN7S3522C53v10Ev();
extern void _ZN7S3522C53v11Ev();
extern void _ZN7S3522C53v12Ev();
extern void _ZN7S3522C53v13Ev();
extern void _ZN7S3522C3D1Ev();
extern void _ZN7S3522C3D0Ev();
extern void _ZN7S3522C33v14Ev();
extern void _ZN7S3522C33v15Ev();
extern void _ZN7S3522C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C3__A1__7S3522C1[] = {
  ABISELECT(-80,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3522C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3522C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3522C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3522C33v16Ev,
};
extern void _ZN7S3522C42v3Ev();
extern void _ZN7S3522C42v4Ev();
extern void _ZN7S3522C42v5Ev();
extern void _ZN7S3522C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3522C4__7S3522C3__A1__7S3522C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(80,36),
  (VTBL_ENTRY)&(_ZTI7S3522C3[0]),
  (VTBL_ENTRY)&_ZN7S3522C42v3Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v4Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3522C42v6Ev,
};
static  VTT_ENTRY vtt_S3522C1[] = {
  {&(_ZTV7S3522C1[6]),  6,132},
  {&(_tg__ZTV7S3522C2__7S3522C1[6]),  6,20},
  {&(_tg__ZTV7S3522C37S3522C2__7S3522C1[3]),  3,15},
  {&(_tg__ZTV7S3522C4__7S3522C37S3522C2__7S3522C1[6]),  6,10},
  {&(_tg__ZTV7S3522C7__7S3522C2__7S3522C1[29]),  29,44},
  {&(_tg__ZTV7S3522C5__A1__7S3522C2__7S3522C1[9]),  9,16},
  {&(_tg__ZTV7S3522C7__7S3522C2__7S3522C1[29]),  29,44},
  {&(_tg__ZTV7S3522C3__A1__7S3522C2__7S3522C1[14]),  14,26},
  {&(_tg__ZTV7S3522C37S3522C7__A2__7S3522C2__7S3522C1[3]),  3,15},
  {&(_ZTV7S3522C1[76]),  76,132},
  {&(_ZTV7S3522C1[40]),  40,132},
  {&(_ZTV7S3522C1[76]),  76,132},
  {&(_ZTV7S3522C1[120]),  120,132},
  {&(_ZTV7S3522C1[94]),  94,132},
  {&(_tg__ZTV7S3522C7__7S3522C1[9]),  9,24},
  {&(_tg__ZTV7S3522C87S3522C7__7S3522C1[8]),  8,17},
  {&(_tg__ZTV7S3522C3__7S3522C87S3522C7__7S3522C1[14]),  14,26},
  {&(_tg__ZTV7S3522C87S3522C7__7S3522C1[8]),  8,17},
  {&(_tg__ZTV7S3522C37S3522C7__A2__7S3522C1[3]),  3,15},
  {&(_tg__ZTV7S3522C4__7S3522C37S3522C7__A2__7S3522C1[6]),  6,10},
  {&(_tg__ZTV7S3522C7__7S3522C1[9]),  9,24},
  {&(_tg__ZTV7S3522C5__7S3522C7__7S3522C1[9]),  9,16},
  {&(_tg__ZTV7S3522C3__7S3522C7__7S3522C1[14]),  14,26},
  {&(_tg__ZTV7S3522C3__A__7S3522C7__7S3522C1[3]),  3,15},
  {&(_tg__ZTV7S3522C3__A1__7S3522C1[3]),  3,15},
  {&(_tg__ZTV7S3522C4__7S3522C3__A1__7S3522C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S3522C1[];
extern  VTBL_ENTRY _ZTV7S3522C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3522C1[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C7D0Ev,_ZTv0_n44_N7S3522C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S3522C7D0Ev,_ZThn36_N7S3522C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C7D1Ev,_ZTv0_n44_N7S3522C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S3522C7D1Ev,_ZThn36_N7S3522C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C8D0Ev,_ZTv0_n44_N7S3522C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S3522C8D0Ev,_ZThn36_N7S3522C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C8D1Ev,_ZTv0_n44_N7S3522C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S3522C8D1Ev,_ZThn36_N7S3522C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C2D0Ev,_ZTv0_n44_N7S3522C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S3522C2D0Ev,_ZThn84_N7S3522C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C2D1Ev,_ZTv0_n44_N7S3522C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S3522C2D1Ev,_ZThn84_N7S3522C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S3522C2D0Ev,_ZTv0_n52_N7S3522C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S3522C2D0Ev,_ZThn48_N7S3522C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S3522C2D1Ev,_ZTv0_n52_N7S3522C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S3522C2D1Ev,_ZThn48_N7S3522C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C1D0Ev,_ZTv0_n44_N7S3522C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S3522C1D0Ev,_ZThn84_N7S3522C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3522C1D1Ev,_ZTv0_n44_N7S3522C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S3522C1D1Ev,_ZThn84_N7S3522C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S3522C1D0Ev,_ZTv0_n52_N7S3522C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S3522C1D0Ev,_ZThn48_N7S3522C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S3522C1D1Ev,_ZTv0_n52_N7S3522C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S3522C1D1Ev,_ZThn48_N7S3522C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3522C1 = {  "S3522C1", // class name
  bases_S3522C1, 13,
  &(vtc_S3522C1[0]), // expected_vtbl_contents
  &(vtt_S3522C1[0]), // expected_vtt_contents
  ABISELECT(240,104), // object size
  NSPAIRA(_ZTI7S3522C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3522C1),132, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3522C1),26, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1839C3  : S1C11_nt {
  virtual void  v8(); // _ZN7S1839C32v8Ev
  virtual void  v9(); // _ZN7S1839C32v9Ev
  virtual void  v10(); // _ZN7S1839C33v10Ev
  virtual void  v11(); // _ZN7S1839C33v11Ev
  virtual void  v12(); // _ZN7S1839C33v12Ev
  virtual void  v13(); // _ZN7S1839C33v13Ev
  virtual void  v14(); // _ZN7S1839C33v14Ev
  virtual void  v15(); // _ZN7S1839C33v15Ev
  virtual void  v16(); // _ZN7S1839C33v16Ev
  virtual void  v17(); // _ZN7S1839C33v17Ev
  virtual void  v18(); // _ZN7S1839C33v18Ev
  virtual void  v19(); // _ZN7S1839C33v19Ev
  virtual void  v20(); // _ZN7S1839C33v20Ev
  virtual void  v21(); // _ZN7S1839C33v21Ev
  virtual void  v22(); // _ZN7S1839C33v22Ev
  virtual void  v23(); // _ZN7S1839C33v23Ev
  virtual void  v24(); // _ZN7S1839C33v24Ev
  virtual void  v25(); // _ZN7S1839C33v25Ev
  virtual void  v26(); // _ZN7S1839C33v26Ev
  virtual void  v27(); // _ZN7S1839C33v27Ev
  virtual void  v28(); // _ZN7S1839C33v28Ev
  virtual void  v29(); // _ZN7S1839C33v29Ev
  virtual void  v30(); // _ZN7S1839C33v30Ev
  virtual void  v31(); // _ZN7S1839C33v31Ev
  virtual void  v32(); // _ZN7S1839C33v32Ev
  virtual void  v33(); // _ZN7S1839C33v33Ev
  virtual void  v34(); // _ZN7S1839C33v34Ev
  virtual void  v35(); // _ZN7S1839C33v35Ev
  virtual void  v36(); // _ZN7S1839C33v36Ev
  virtual void  v37(); // _ZN7S1839C33v37Ev
  virtual void  v38(); // _ZN7S1839C33v38Ev
  virtual void  v39(); // _ZN7S1839C33v39Ev
  ~S1839C3(); // tgen
  S1839C3(); // tgen
};
//SIG(-1 S1839C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1839C3 ::v8(){vfunc_called(this, "_ZN7S1839C32v8Ev");}
void  S1839C3 ::v9(){vfunc_called(this, "_ZN7S1839C32v9Ev");}
void  S1839C3 ::v10(){vfunc_called(this, "_ZN7S1839C33v10Ev");}
void  S1839C3 ::v11(){vfunc_called(this, "_ZN7S1839C33v11Ev");}
void  S1839C3 ::v12(){vfunc_called(this, "_ZN7S1839C33v12Ev");}
void  S1839C3 ::v13(){vfunc_called(this, "_ZN7S1839C33v13Ev");}
void  S1839C3 ::v14(){vfunc_called(this, "_ZN7S1839C33v14Ev");}
void  S1839C3 ::v15(){vfunc_called(this, "_ZN7S1839C33v15Ev");}
void  S1839C3 ::v16(){vfunc_called(this, "_ZN7S1839C33v16Ev");}
void  S1839C3 ::v17(){vfunc_called(this, "_ZN7S1839C33v17Ev");}
void  S1839C3 ::v18(){vfunc_called(this, "_ZN7S1839C33v18Ev");}
void  S1839C3 ::v19(){vfunc_called(this, "_ZN7S1839C33v19Ev");}
void  S1839C3 ::v20(){vfunc_called(this, "_ZN7S1839C33v20Ev");}
void  S1839C3 ::v21(){vfunc_called(this, "_ZN7S1839C33v21Ev");}
void  S1839C3 ::v22(){vfunc_called(this, "_ZN7S1839C33v22Ev");}
void  S1839C3 ::v23(){vfunc_called(this, "_ZN7S1839C33v23Ev");}
void  S1839C3 ::v24(){vfunc_called(this, "_ZN7S1839C33v24Ev");}
void  S1839C3 ::v25(){vfunc_called(this, "_ZN7S1839C33v25Ev");}
void  S1839C3 ::v26(){vfunc_called(this, "_ZN7S1839C33v26Ev");}
void  S1839C3 ::v27(){vfunc_called(this, "_ZN7S1839C33v27Ev");}
void  S1839C3 ::v28(){vfunc_called(this, "_ZN7S1839C33v28Ev");}
void  S1839C3 ::v29(){vfunc_called(this, "_ZN7S1839C33v29Ev");}
void  S1839C3 ::v30(){vfunc_called(this, "_ZN7S1839C33v30Ev");}
void  S1839C3 ::v31(){vfunc_called(this, "_ZN7S1839C33v31Ev");}
void  S1839C3 ::v32(){vfunc_called(this, "_ZN7S1839C33v32Ev");}
void  S1839C3 ::v33(){vfunc_called(this, "_ZN7S1839C33v33Ev");}
void  S1839C3 ::v34(){vfunc_called(this, "_ZN7S1839C33v34Ev");}
void  S1839C3 ::v35(){vfunc_called(this, "_ZN7S1839C33v35Ev");}
void  S1839C3 ::v36(){vfunc_called(this, "_ZN7S1839C33v36Ev");}
void  S1839C3 ::v37(){vfunc_called(this, "_ZN7S1839C33v37Ev");}
void  S1839C3 ::v38(){vfunc_called(this, "_ZN7S1839C33v38Ev");}
void  S1839C3 ::v39(){vfunc_called(this, "_ZN7S1839C33v39Ev");}
S1839C3 ::~S1839C3(){ note_dtor("S1839C3", this);} // tgen
S1839C3 ::S1839C3(){ note_ctor("S1839C3", this);} // tgen

static void Test_S1839C3()
{
  extern Class_Descriptor cd_S1839C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1839C3, buf);
    S1839C3 *dp, &lv = *(dp=new (buf) S1839C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1839C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1839C3)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S1839C3");
    test_class_info(&lv, &cd_S1839C3);
    dp->~S1839C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1839C3(Test_S1839C3, "S1839C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1839C3C1Ev();
extern void _ZN7S1839C3D1Ev();
Name_Map name_map_S1839C3[] = {
  NSPAIR(_ZN7S1839C3C1Ev),
  NSPAIR(_ZN7S1839C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S1839C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1839C3[];
extern void _ZN7S1839C3D1Ev();
extern void _ZN7S1839C3D0Ev();
extern void _ZN7S1839C32v8Ev();
extern void _ZN7S1839C32v9Ev();
extern void _ZN7S1839C33v10Ev();
extern void _ZN7S1839C33v11Ev();
extern void _ZN7S1839C33v12Ev();
extern void _ZN7S1839C33v13Ev();
extern void _ZN7S1839C33v14Ev();
extern void _ZN7S1839C33v15Ev();
extern void _ZN7S1839C33v16Ev();
extern void _ZN7S1839C33v17Ev();
extern void _ZN7S1839C33v18Ev();
extern void _ZN7S1839C33v19Ev();
extern void _ZN7S1839C33v20Ev();
extern void _ZN7S1839C33v21Ev();
extern void _ZN7S1839C33v22Ev();
extern void _ZN7S1839C33v23Ev();
extern void _ZN7S1839C33v24Ev();
extern void _ZN7S1839C33v25Ev();
extern void _ZN7S1839C33v26Ev();
extern void _ZN7S1839C33v27Ev();
extern void _ZN7S1839C33v28Ev();
extern void _ZN7S1839C33v29Ev();
extern void _ZN7S1839C33v30Ev();
extern void _ZN7S1839C33v31Ev();
extern void _ZN7S1839C33v32Ev();
extern void _ZN7S1839C33v33Ev();
extern void _ZN7S1839C33v34Ev();
extern void _ZN7S1839C33v35Ev();
extern void _ZN7S1839C33v36Ev();
extern void _ZN7S1839C33v37Ev();
extern void _ZN7S1839C33v38Ev();
extern void _ZN7S1839C33v39Ev();
static  VTBL_ENTRY vtc_S1839C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1839C3[0]),
  (VTBL_ENTRY)&_ZN7S1839C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1839C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1839C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1839C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v39Ev,
};
extern VTBL_ENTRY _ZTI7S1839C3[];
extern  VTBL_ENTRY _ZTV7S1839C3[];
Class_Descriptor cd_S1839C3 = {  "S1839C3", // class name
  bases_S1839C3, 1,
  &(vtc_S1839C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1839C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1839C3),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  S1839C2  : S1839C3 {
  virtual void  v40(); // _ZN7S1839C23v40Ev
  ~S1839C2(); // tgen
  S1839C2(); // tgen
};
//SIG(-1 S1839C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1}


void  S1839C2 ::v40(){vfunc_called(this, "_ZN7S1839C23v40Ev");}
S1839C2 ::~S1839C2(){ note_dtor("S1839C2", this);} // tgen
S1839C2 ::S1839C2(){ note_ctor("S1839C2", this);} // tgen

static void Test_S1839C2()
{
  extern Class_Descriptor cd_S1839C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1839C2, buf);
    S1839C2 *dp, &lv = *(dp=new (buf) S1839C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1839C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1839C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S1839C3*), 0, "S1839C2");
    check_base_class_offset(lv, (S1839C3*), 0, "S1839C2");
    test_class_info(&lv, &cd_S1839C2);
    dp->~S1839C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1839C2(Test_S1839C2, "S1839C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1839C2C1Ev();
extern void _ZN7S1839C2D1Ev();
Name_Map name_map_S1839C2[] = {
  NSPAIR(_ZN7S1839C2C1Ev),
  NSPAIR(_ZN7S1839C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1839C3;
extern VTBL_ENTRY _ZTI7S1839C3[];
extern  VTBL_ENTRY _ZTV7S1839C3[];
static Base_Class bases_S1839C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1839C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1839C2[];
extern void _ZN7S1839C2D1Ev();
extern void _ZN7S1839C2D0Ev();
extern void _ZN7S1839C32v8Ev();
extern void _ZN7S1839C32v9Ev();
extern void _ZN7S1839C33v10Ev();
extern void _ZN7S1839C33v11Ev();
extern void _ZN7S1839C33v12Ev();
extern void _ZN7S1839C33v13Ev();
extern void _ZN7S1839C33v14Ev();
extern void _ZN7S1839C33v15Ev();
extern void _ZN7S1839C33v16Ev();
extern void _ZN7S1839C33v17Ev();
extern void _ZN7S1839C33v18Ev();
extern void _ZN7S1839C33v19Ev();
extern void _ZN7S1839C33v20Ev();
extern void _ZN7S1839C33v21Ev();
extern void _ZN7S1839C33v22Ev();
extern void _ZN7S1839C33v23Ev();
extern void _ZN7S1839C33v24Ev();
extern void _ZN7S1839C33v25Ev();
extern void _ZN7S1839C33v26Ev();
extern void _ZN7S1839C33v27Ev();
extern void _ZN7S1839C33v28Ev();
extern void _ZN7S1839C33v29Ev();
extern void _ZN7S1839C33v30Ev();
extern void _ZN7S1839C33v31Ev();
extern void _ZN7S1839C33v32Ev();
extern void _ZN7S1839C33v33Ev();
extern void _ZN7S1839C33v34Ev();
extern void _ZN7S1839C33v35Ev();
extern void _ZN7S1839C33v36Ev();
extern void _ZN7S1839C33v37Ev();
extern void _ZN7S1839C33v38Ev();
extern void _ZN7S1839C33v39Ev();
extern void _ZN7S1839C23v40Ev();
static  VTBL_ENTRY vtc_S1839C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1839C2[0]),
  (VTBL_ENTRY)&_ZN7S1839C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1839C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1839C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1839C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1839C23v40Ev,
};
extern VTBL_ENTRY _ZTI7S1839C2[];
extern  VTBL_ENTRY _ZTV7S1839C2[];
Class_Descriptor cd_S1839C2 = {  "S1839C2", // class name
  bases_S1839C2, 2,
  &(vtc_S1839C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1839C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1839C2),37, //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  S1839C1  : S1839C2 {
  virtual void  v1(); // _ZN7S1839C12v1Ev
  virtual void  v2(); // _ZN7S1839C12v2Ev
  virtual void  v3(); // _ZN7S1839C12v3Ev
  virtual void  v4(); // _ZN7S1839C12v4Ev
  virtual void  v5(); // _ZN7S1839C12v5Ev
  virtual void  v6(); // _ZN7S1839C12v6Ev
  virtual void  v7(); // _ZN7S1839C12v7Ev
  ~S1839C1(); // tgen
  S1839C1(); // tgen
};
//SIG(1 S1839C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6 v7}


void  S1839C1 ::v1(){vfunc_called(this, "_ZN7S1839C12v1Ev");}
void  S1839C1 ::v2(){vfunc_called(this, "_ZN7S1839C12v2Ev");}
void  S1839C1 ::v3(){vfunc_called(this, "_ZN7S1839C12v3Ev");}
void  S1839C1 ::v4(){vfunc_called(this, "_ZN7S1839C12v4Ev");}
void  S1839C1 ::v5(){vfunc_called(this, "_ZN7S1839C12v5Ev");}
void  S1839C1 ::v6(){vfunc_called(this, "_ZN7S1839C12v6Ev");}
void  S1839C1 ::v7(){vfunc_called(this, "_ZN7S1839C12v7Ev");}
S1839C1 ::~S1839C1(){ note_dtor("S1839C1", this);} // tgen
S1839C1 ::S1839C1(){ note_ctor("S1839C1", this);} // tgen

static void Test_S1839C1()
{
  extern Class_Descriptor cd_S1839C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1839C1, buf);
    S1839C1 *dp, &lv = *(dp=new (buf) S1839C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1839C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1839C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S1839C3*)(S1839C2*), 0, "S1839C1");
    check_base_class_offset(lv, (S1839C3*)(S1839C2*), 0, "S1839C1");
    check_base_class_offset(lv, (S1839C2*), 0, "S1839C1");
    test_class_info(&lv, &cd_S1839C1);
    dp->~S1839C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1839C1(Test_S1839C1, "S1839C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1839C1C1Ev();
extern void _ZN7S1839C1D1Ev();
Name_Map name_map_S1839C1[] = {
  NSPAIR(_ZN7S1839C1C1Ev),
  NSPAIR(_ZN7S1839C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1839C3;
extern VTBL_ENTRY _ZTI7S1839C3[];
extern  VTBL_ENTRY _ZTV7S1839C3[];
extern Class_Descriptor cd_S1839C2;
extern VTBL_ENTRY _ZTI7S1839C2[];
extern  VTBL_ENTRY _ZTV7S1839C2[];
static Base_Class bases_S1839C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1839C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1839C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1839C1[];
extern void _ZN7S1839C1D1Ev();
extern void _ZN7S1839C1D0Ev();
extern void _ZN7S1839C32v8Ev();
extern void _ZN7S1839C32v9Ev();
extern void _ZN7S1839C33v10Ev();
extern void _ZN7S1839C33v11Ev();
extern void _ZN7S1839C33v12Ev();
extern void _ZN7S1839C33v13Ev();
extern void _ZN7S1839C33v14Ev();
extern void _ZN7S1839C33v15Ev();
extern void _ZN7S1839C33v16Ev();
extern void _ZN7S1839C33v17Ev();
extern void _ZN7S1839C33v18Ev();
extern void _ZN7S1839C33v19Ev();
extern void _ZN7S1839C33v20Ev();
extern void _ZN7S1839C33v21Ev();
extern void _ZN7S1839C33v22Ev();
extern void _ZN7S1839C33v23Ev();
extern void _ZN7S1839C33v24Ev();
extern void _ZN7S1839C33v25Ev();
extern void _ZN7S1839C33v26Ev();
extern void _ZN7S1839C33v27Ev();
extern void _ZN7S1839C33v28Ev();
extern void _ZN7S1839C33v29Ev();
extern void _ZN7S1839C33v30Ev();
extern void _ZN7S1839C33v31Ev();
extern void _ZN7S1839C33v32Ev();
extern void _ZN7S1839C33v33Ev();
extern void _ZN7S1839C33v34Ev();
extern void _ZN7S1839C33v35Ev();
extern void _ZN7S1839C33v36Ev();
extern void _ZN7S1839C33v37Ev();
extern void _ZN7S1839C33v38Ev();
extern void _ZN7S1839C33v39Ev();
extern void _ZN7S1839C23v40Ev();
extern void _ZN7S1839C12v1Ev();
extern void _ZN7S1839C12v2Ev();
extern void _ZN7S1839C12v3Ev();
extern void _ZN7S1839C12v4Ev();
extern void _ZN7S1839C12v5Ev();
extern void _ZN7S1839C12v6Ev();
extern void _ZN7S1839C12v7Ev();
static  VTBL_ENTRY vtc_S1839C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1839C1[0]),
  (VTBL_ENTRY)&_ZN7S1839C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1839C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1839C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1839C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1839C33v39Ev,
  (VTBL_ENTRY)&_ZN7S1839C23v40Ev,
  (VTBL_ENTRY)&_ZN7S1839C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1839C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1839C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1839C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1839C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1839C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1839C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S1839C1[];
extern  VTBL_ENTRY _ZTV7S1839C1[];
Class_Descriptor cd_S1839C1 = {  "S1839C1", // class name
  bases_S1839C1, 3,
  &(vtc_S1839C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1839C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1839C1),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1833C3  : S1C11_nt {
  virtual void  v7(); // _ZN7S1833C32v7Ev
  virtual void  v8(); // _ZN7S1833C32v8Ev
  virtual void  v9(); // _ZN7S1833C32v9Ev
  virtual void  v10(); // _ZN7S1833C33v10Ev
  virtual void  v11(); // _ZN7S1833C33v11Ev
  virtual void  v12(); // _ZN7S1833C33v12Ev
  virtual void  v13(); // _ZN7S1833C33v13Ev
  virtual void  v14(); // _ZN7S1833C33v14Ev
  virtual void  v15(); // _ZN7S1833C33v15Ev
  virtual void  v16(); // _ZN7S1833C33v16Ev
  virtual void  v17(); // _ZN7S1833C33v17Ev
  virtual void  v18(); // _ZN7S1833C33v18Ev
  virtual void  v19(); // _ZN7S1833C33v19Ev
  virtual void  v20(); // _ZN7S1833C33v20Ev
  virtual void  v21(); // _ZN7S1833C33v21Ev
  virtual void  v22(); // _ZN7S1833C33v22Ev
  virtual void  v23(); // _ZN7S1833C33v23Ev
  virtual void  v24(); // _ZN7S1833C33v24Ev
  virtual void  v25(); // _ZN7S1833C33v25Ev
  virtual void  v26(); // _ZN7S1833C33v26Ev
  virtual void  v27(); // _ZN7S1833C33v27Ev
  virtual void  v28(); // _ZN7S1833C33v28Ev
  virtual void  v29(); // _ZN7S1833C33v29Ev
  virtual void  v30(); // _ZN7S1833C33v30Ev
  virtual void  v31(); // _ZN7S1833C33v31Ev
  virtual void  v32(); // _ZN7S1833C33v32Ev
  virtual void  v33(); // _ZN7S1833C33v33Ev
  virtual void  v34(); // _ZN7S1833C33v34Ev
  virtual void  v35(); // _ZN7S1833C33v35Ev
  virtual void  v36(); // _ZN7S1833C33v36Ev
  virtual void  v37(); // _ZN7S1833C33v37Ev
  virtual void  v38(); // _ZN7S1833C33v38Ev
  ~S1833C3(); // tgen
  S1833C3(); // tgen
};
//SIG(-1 S1833C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1833C3 ::v7(){vfunc_called(this, "_ZN7S1833C32v7Ev");}
void  S1833C3 ::v8(){vfunc_called(this, "_ZN7S1833C32v8Ev");}
void  S1833C3 ::v9(){vfunc_called(this, "_ZN7S1833C32v9Ev");}
void  S1833C3 ::v10(){vfunc_called(this, "_ZN7S1833C33v10Ev");}
void  S1833C3 ::v11(){vfunc_called(this, "_ZN7S1833C33v11Ev");}
void  S1833C3 ::v12(){vfunc_called(this, "_ZN7S1833C33v12Ev");}
void  S1833C3 ::v13(){vfunc_called(this, "_ZN7S1833C33v13Ev");}
void  S1833C3 ::v14(){vfunc_called(this, "_ZN7S1833C33v14Ev");}
void  S1833C3 ::v15(){vfunc_called(this, "_ZN7S1833C33v15Ev");}
void  S1833C3 ::v16(){vfunc_called(this, "_ZN7S1833C33v16Ev");}
void  S1833C3 ::v17(){vfunc_called(this, "_ZN7S1833C33v17Ev");}
void  S1833C3 ::v18(){vfunc_called(this, "_ZN7S1833C33v18Ev");}
void  S1833C3 ::v19(){vfunc_called(this, "_ZN7S1833C33v19Ev");}
void  S1833C3 ::v20(){vfunc_called(this, "_ZN7S1833C33v20Ev");}
void  S1833C3 ::v21(){vfunc_called(this, "_ZN7S1833C33v21Ev");}
void  S1833C3 ::v22(){vfunc_called(this, "_ZN7S1833C33v22Ev");}
void  S1833C3 ::v23(){vfunc_called(this, "_ZN7S1833C33v23Ev");}
void  S1833C3 ::v24(){vfunc_called(this, "_ZN7S1833C33v24Ev");}
void  S1833C3 ::v25(){vfunc_called(this, "_ZN7S1833C33v25Ev");}
void  S1833C3 ::v26(){vfunc_called(this, "_ZN7S1833C33v26Ev");}
void  S1833C3 ::v27(){vfunc_called(this, "_ZN7S1833C33v27Ev");}
void  S1833C3 ::v28(){vfunc_called(this, "_ZN7S1833C33v28Ev");}
void  S1833C3 ::v29(){vfunc_called(this, "_ZN7S1833C33v29Ev");}
void  S1833C3 ::v30(){vfunc_called(this, "_ZN7S1833C33v30Ev");}
void  S1833C3 ::v31(){vfunc_called(this, "_ZN7S1833C33v31Ev");}
void  S1833C3 ::v32(){vfunc_called(this, "_ZN7S1833C33v32Ev");}
void  S1833C3 ::v33(){vfunc_called(this, "_ZN7S1833C33v33Ev");}
void  S1833C3 ::v34(){vfunc_called(this, "_ZN7S1833C33v34Ev");}
void  S1833C3 ::v35(){vfunc_called(this, "_ZN7S1833C33v35Ev");}
void  S1833C3 ::v36(){vfunc_called(this, "_ZN7S1833C33v36Ev");}
void  S1833C3 ::v37(){vfunc_called(this, "_ZN7S1833C33v37Ev");}
void  S1833C3 ::v38(){vfunc_called(this, "_ZN7S1833C33v38Ev");}
S1833C3 ::~S1833C3(){ note_dtor("S1833C3", this);} // tgen
S1833C3 ::S1833C3(){ note_ctor("S1833C3", this);} // tgen

static void Test_S1833C3()
{
  extern Class_Descriptor cd_S1833C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1833C3, buf);
    S1833C3 *dp, &lv = *(dp=new (buf) S1833C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1833C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1833C3)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S1833C3");
    test_class_info(&lv, &cd_S1833C3);
    dp->~S1833C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1833C3(Test_S1833C3, "S1833C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1833C3C1Ev();
extern void _ZN7S1833C3D1Ev();
Name_Map name_map_S1833C3[] = {
  NSPAIR(_ZN7S1833C3C1Ev),
  NSPAIR(_ZN7S1833C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S1833C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1833C3[];
extern void _ZN7S1833C3D1Ev();
extern void _ZN7S1833C3D0Ev();
extern void _ZN7S1833C32v7Ev();
extern void _ZN7S1833C32v8Ev();
extern void _ZN7S1833C32v9Ev();
extern void _ZN7S1833C33v10Ev();
extern void _ZN7S1833C33v11Ev();
extern void _ZN7S1833C33v12Ev();
extern void _ZN7S1833C33v13Ev();
extern void _ZN7S1833C33v14Ev();
extern void _ZN7S1833C33v15Ev();
extern void _ZN7S1833C33v16Ev();
extern void _ZN7S1833C33v17Ev();
extern void _ZN7S1833C33v18Ev();
extern void _ZN7S1833C33v19Ev();
extern void _ZN7S1833C33v20Ev();
extern void _ZN7S1833C33v21Ev();
extern void _ZN7S1833C33v22Ev();
extern void _ZN7S1833C33v23Ev();
extern void _ZN7S1833C33v24Ev();
extern void _ZN7S1833C33v25Ev();
extern void _ZN7S1833C33v26Ev();
extern void _ZN7S1833C33v27Ev();
extern void _ZN7S1833C33v28Ev();
extern void _ZN7S1833C33v29Ev();
extern void _ZN7S1833C33v30Ev();
extern void _ZN7S1833C33v31Ev();
extern void _ZN7S1833C33v32Ev();
extern void _ZN7S1833C33v33Ev();
extern void _ZN7S1833C33v34Ev();
extern void _ZN7S1833C33v35Ev();
extern void _ZN7S1833C33v36Ev();
extern void _ZN7S1833C33v37Ev();
extern void _ZN7S1833C33v38Ev();
static  VTBL_ENTRY vtc_S1833C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1833C3[0]),
  (VTBL_ENTRY)&_ZN7S1833C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1833C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1833C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1833C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1833C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v38Ev,
};
extern VTBL_ENTRY _ZTI7S1833C3[];
extern  VTBL_ENTRY _ZTV7S1833C3[];
Class_Descriptor cd_S1833C3 = {  "S1833C3", // class name
  bases_S1833C3, 1,
  &(vtc_S1833C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1833C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1833C3),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  S1833C2  : S1833C3 {
  virtual void  v39(); // _ZN7S1833C23v39Ev
  ~S1833C2(); // tgen
  S1833C2(); // tgen
};
//SIG(-1 S1833C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1}


void  S1833C2 ::v39(){vfunc_called(this, "_ZN7S1833C23v39Ev");}
S1833C2 ::~S1833C2(){ note_dtor("S1833C2", this);} // tgen
S1833C2 ::S1833C2(){ note_ctor("S1833C2", this);} // tgen

static void Test_S1833C2()
{
  extern Class_Descriptor cd_S1833C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1833C2, buf);
    S1833C2 *dp, &lv = *(dp=new (buf) S1833C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1833C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1833C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S1833C3*), 0, "S1833C2");
    check_base_class_offset(lv, (S1833C3*), 0, "S1833C2");
    test_class_info(&lv, &cd_S1833C2);
    dp->~S1833C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1833C2(Test_S1833C2, "S1833C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1833C2C1Ev();
extern void _ZN7S1833C2D1Ev();
Name_Map name_map_S1833C2[] = {
  NSPAIR(_ZN7S1833C2C1Ev),
  NSPAIR(_ZN7S1833C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1833C3;
extern VTBL_ENTRY _ZTI7S1833C3[];
extern  VTBL_ENTRY _ZTV7S1833C3[];
static Base_Class bases_S1833C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1833C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1833C2[];
extern void _ZN7S1833C2D1Ev();
extern void _ZN7S1833C2D0Ev();
extern void _ZN7S1833C32v7Ev();
extern void _ZN7S1833C32v8Ev();
extern void _ZN7S1833C32v9Ev();
extern void _ZN7S1833C33v10Ev();
extern void _ZN7S1833C33v11Ev();
extern void _ZN7S1833C33v12Ev();
extern void _ZN7S1833C33v13Ev();
extern void _ZN7S1833C33v14Ev();
extern void _ZN7S1833C33v15Ev();
extern void _ZN7S1833C33v16Ev();
extern void _ZN7S1833C33v17Ev();
extern void _ZN7S1833C33v18Ev();
extern void _ZN7S1833C33v19Ev();
extern void _ZN7S1833C33v20Ev();
extern void _ZN7S1833C33v21Ev();
extern void _ZN7S1833C33v22Ev();
extern void _ZN7S1833C33v23Ev();
extern void _ZN7S1833C33v24Ev();
extern void _ZN7S1833C33v25Ev();
extern void _ZN7S1833C33v26Ev();
extern void _ZN7S1833C33v27Ev();
extern void _ZN7S1833C33v28Ev();
extern void _ZN7S1833C33v29Ev();
extern void _ZN7S1833C33v30Ev();
extern void _ZN7S1833C33v31Ev();
extern void _ZN7S1833C33v32Ev();
extern void _ZN7S1833C33v33Ev();
extern void _ZN7S1833C33v34Ev();
extern void _ZN7S1833C33v35Ev();
extern void _ZN7S1833C33v36Ev();
extern void _ZN7S1833C33v37Ev();
extern void _ZN7S1833C33v38Ev();
extern void _ZN7S1833C23v39Ev();
static  VTBL_ENTRY vtc_S1833C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1833C2[0]),
  (VTBL_ENTRY)&_ZN7S1833C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1833C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1833C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1833C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1833C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1833C23v39Ev,
};
extern VTBL_ENTRY _ZTI7S1833C2[];
extern  VTBL_ENTRY _ZTV7S1833C2[];
Class_Descriptor cd_S1833C2 = {  "S1833C2", // class name
  bases_S1833C2, 2,
  &(vtc_S1833C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1833C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1833C2),37, //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  S1833C1  : S1833C2 {
  virtual void  v1(); // _ZN7S1833C12v1Ev
  virtual void  v2(); // _ZN7S1833C12v2Ev
  virtual void  v3(); // _ZN7S1833C12v3Ev
  virtual void  v4(); // _ZN7S1833C12v4Ev
  virtual void  v5(); // _ZN7S1833C12v5Ev
  virtual void  v6(); // _ZN7S1833C12v6Ev
  ~S1833C1(); // tgen
  S1833C1(); // tgen
};
//SIG(1 S1833C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1 v2 v3 v4 v5 v6}


void  S1833C1 ::v1(){vfunc_called(this, "_ZN7S1833C12v1Ev");}
void  S1833C1 ::v2(){vfunc_called(this, "_ZN7S1833C12v2Ev");}
void  S1833C1 ::v3(){vfunc_called(this, "_ZN7S1833C12v3Ev");}
void  S1833C1 ::v4(){vfunc_called(this, "_ZN7S1833C12v4Ev");}
void  S1833C1 ::v5(){vfunc_called(this, "_ZN7S1833C12v5Ev");}
void  S1833C1 ::v6(){vfunc_called(this, "_ZN7S1833C12v6Ev");}
S1833C1 ::~S1833C1(){ note_dtor("S1833C1", this);} // tgen
S1833C1 ::S1833C1(){ note_ctor("S1833C1", this);} // tgen

static void Test_S1833C1()
{
  extern Class_Descriptor cd_S1833C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1833C1, buf);
    S1833C1 *dp, &lv = *(dp=new (buf) S1833C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1833C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1833C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S1833C3*)(S1833C2*), 0, "S1833C1");
    check_base_class_offset(lv, (S1833C3*)(S1833C2*), 0, "S1833C1");
    check_base_class_offset(lv, (S1833C2*), 0, "S1833C1");
    test_class_info(&lv, &cd_S1833C1);
    dp->~S1833C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1833C1(Test_S1833C1, "S1833C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1833C1C1Ev();
extern void _ZN7S1833C1D1Ev();
Name_Map name_map_S1833C1[] = {
  NSPAIR(_ZN7S1833C1C1Ev),
  NSPAIR(_ZN7S1833C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1833C3;
extern VTBL_ENTRY _ZTI7S1833C3[];
extern  VTBL_ENTRY _ZTV7S1833C3[];
extern Class_Descriptor cd_S1833C2;
extern VTBL_ENTRY _ZTI7S1833C2[];
extern  VTBL_ENTRY _ZTV7S1833C2[];
static Base_Class bases_S1833C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1833C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1833C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1833C1[];
extern void _ZN7S1833C1D1Ev();
extern void _ZN7S1833C1D0Ev();
extern void _ZN7S1833C32v7Ev();
extern void _ZN7S1833C32v8Ev();
extern void _ZN7S1833C32v9Ev();
extern void _ZN7S1833C33v10Ev();
extern void _ZN7S1833C33v11Ev();
extern void _ZN7S1833C33v12Ev();
extern void _ZN7S1833C33v13Ev();
extern void _ZN7S1833C33v14Ev();
extern void _ZN7S1833C33v15Ev();
extern void _ZN7S1833C33v16Ev();
extern void _ZN7S1833C33v17Ev();
extern void _ZN7S1833C33v18Ev();
extern void _ZN7S1833C33v19Ev();
extern void _ZN7S1833C33v20Ev();
extern void _ZN7S1833C33v21Ev();
extern void _ZN7S1833C33v22Ev();
extern void _ZN7S1833C33v23Ev();
extern void _ZN7S1833C33v24Ev();
extern void _ZN7S1833C33v25Ev();
extern void _ZN7S1833C33v26Ev();
extern void _ZN7S1833C33v27Ev();
extern void _ZN7S1833C33v28Ev();
extern void _ZN7S1833C33v29Ev();
extern void _ZN7S1833C33v30Ev();
extern void _ZN7S1833C33v31Ev();
extern void _ZN7S1833C33v32Ev();
extern void _ZN7S1833C33v33Ev();
extern void _ZN7S1833C33v34Ev();
extern void _ZN7S1833C33v35Ev();
extern void _ZN7S1833C33v36Ev();
extern void _ZN7S1833C33v37Ev();
extern void _ZN7S1833C33v38Ev();
extern void _ZN7S1833C23v39Ev();
extern void _ZN7S1833C12v1Ev();
extern void _ZN7S1833C12v2Ev();
extern void _ZN7S1833C12v3Ev();
extern void _ZN7S1833C12v4Ev();
extern void _ZN7S1833C12v5Ev();
extern void _ZN7S1833C12v6Ev();
static  VTBL_ENTRY vtc_S1833C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1833C1[0]),
  (VTBL_ENTRY)&_ZN7S1833C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1833C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1833C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1833C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1833C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1833C33v38Ev,
  (VTBL_ENTRY)&_ZN7S1833C23v39Ev,
  (VTBL_ENTRY)&_ZN7S1833C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1833C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1833C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1833C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1833C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1833C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S1833C1[];
extern  VTBL_ENTRY _ZTV7S1833C1[];
Class_Descriptor cd_S1833C1 = {  "S1833C1", // class name
  bases_S1833C1, 3,
  &(vtc_S1833C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1833C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1833C1),43, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8053C4_nt  {
  __tsi64 s8053c4f0;
  char s8053c4f1;
  void  mf8053c4(); // _ZN10S8053C4_nt8mf8053c4Ev
  virtual  ~S8053C4_nt(); // _ZN10S8053C4_ntD1Ev
  S8053C4_nt(); // tgen
};
//SIG(-1 S8053C4_nt) C1{ vd m FL Fc}


void  S8053C4_nt ::mf8053c4(){}
 S8053C4_nt ::~S8053C4_nt(){ note_dtor("S8053C4_nt", this);}
S8053C4_nt ::S8053C4_nt(){ note_ctor("S8053C4_nt", this);} // tgen

//skip512 S8053C4_nt

#else // __cplusplus

extern void _ZN10S8053C4_ntC1Ev();
extern void _ZN10S8053C4_ntD1Ev();
Name_Map name_map_S8053C4_nt[] = {
  NSPAIR(_ZN10S8053C4_ntC1Ev),
  NSPAIR(_ZN10S8053C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8053C4_nt[];
extern void _ZN10S8053C4_ntD1Ev();
extern void _ZN10S8053C4_ntD0Ev();
static  VTBL_ENTRY vtc_S8053C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8053C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S8053C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8053C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8053C4_nt[];
VTBL_ENTRY *P__ZTI10S8053C4_nt = _ZTI10S8053C4_nt; 
extern  VTBL_ENTRY _ZTV10S8053C4_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8053C3_nt  {
  ::S8053C4_nt s8053c3f0;
  ::S8053C4_nt s8053c3f1;
  void  mf8053c3(); // _ZN10S8053C3_nt8mf8053c3Ev
};
//SIG(-1 S8053C3_nt) C1{ m FC2{ vd m FL Fc} FC2}


void  S8053C3_nt ::mf8053c3(){}

//skip512 S8053C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8053C2  {
  int s8053c2f0[3];
  char s8053c2f1;
  ::S8053C3_nt s8053c2f2;
  char s8053c2f3[2];
  int s8053c2f4[2];
  ::S8053C3_nt s8053c2f5;
  void *s8053c2f6[2];
  int s8053c2f7[2];
  void  mf8053c2(); // _ZN7S8053C28mf8053c2Ev
  virtual  ~S8053C2(); // _ZN7S8053C2D1Ev
  S8053C2(); // tgen
};
//SIG(-1 S8053C2) C1{ vd m Fi[3] Fc FC2{ m FC3{ vd m FL Fc} FC3} Fc[2] Fi[2] FC2 Fp[2] Fi[2]}


void  S8053C2 ::mf8053c2(){}
 S8053C2 ::~S8053C2(){ note_dtor("S8053C2", this);}
S8053C2 ::S8053C2(){ note_ctor("S8053C2", this);} // tgen

static void Test_S8053C2()
{
  extern Class_Descriptor cd_S8053C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S8053C2, buf);
    S8053C2 *dp, &lv = *(dp=new (buf) S8053C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S8053C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8053C2)");
    check_field_offset(lv, s8053c2f0, ABISELECT(8,4), "S8053C2.s8053c2f0");
    check_field_offset(lv, s8053c2f1, ABISELECT(20,16), "S8053C2.s8053c2f1");
    check_field_offset(lv, s8053c2f2, ABISELECT(24,20), "S8053C2.s8053c2f2");
    check_field_offset(lv, s8053c2f3, ABISELECT(72,52), "S8053C2.s8053c2f3");
    check_field_offset(lv, s8053c2f4, ABISELECT(76,56), "S8053C2.s8053c2f4");
    check_field_offset(lv, s8053c2f5, ABISELECT(88,64), "S8053C2.s8053c2f5");
    check_field_offset(lv, s8053c2f6, ABISELECT(136,96), "S8053C2.s8053c2f6");
    check_field_offset(lv, s8053c2f7, ABISELECT(152,104), "S8053C2.s8053c2f7");
    test_class_info(&lv, &cd_S8053C2);
    dp->~S8053C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8053C2(Test_S8053C2, "S8053C2", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN7S8053C2C1Ev();
extern void _ZN7S8053C2D1Ev();
Name_Map name_map_S8053C2[] = {
  NSPAIR(_ZN7S8053C2C1Ev),
  NSPAIR(_ZN7S8053C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8053C2[];
extern void _ZN7S8053C2D1Ev();
extern void _ZN7S8053C2D0Ev();
static  VTBL_ENTRY vtc_S8053C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8053C2[0]),
  (VTBL_ENTRY)&_ZN7S8053C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8053C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S8053C2[];
extern  VTBL_ENTRY _ZTV7S8053C2[];
Class_Descriptor cd_S8053C2 = {  "S8053C2", // class name
  0,0,//no base classes
  &(vtc_S8053C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI7S8053C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8053C2),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  S8053C6_nt  {
  int s8053c6f0;
  void *s8053c6f1[7];
  short s8053c6f2;
  char s8053c6f3[10];
};
//SIG(-1 S8053C6_nt) C1{ Fi Fp[7] Fs Fc[10]}



//skip512 S8053C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8053C10_nt  {
  void *s8053c10f0;
  int s8053c10f1;
  ::S5166C37 s8053c10f2;
  void  mf8053c10(); // _ZN11S8053C10_nt9mf8053c10Ev
};
//SIG(-1 S8053C10_nt) C1{ m Fp Fi FC2{ m}}


void  S8053C10_nt ::mf8053c10(){}

//skip512 S8053C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8053C7_nt  {
  ::S5166C19_nt s8053c7f0;
  ::S8053C10_nt s8053c7f1;
  void  mf8053c7(); // _ZN10S8053C7_nt8mf8053c7Ev
};
//SIG(-1 S8053C7_nt) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m Fp Fi FC5{ m}}}


void  S8053C7_nt ::mf8053c7(){}

//skip512 S8053C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8053C5_nt  {
  ::S8053C6_nt s8053c5f0;
  void *s8053c5f1;
  char s8053c5f2[2];
  ::S8053C7_nt s8053c5f3;
  void  mf8053c5(); // _ZN10S8053C5_nt8mf8053c5Ev
  virtual  ~S8053C5_nt(); // _ZN10S8053C5_ntD1Ev
  S8053C5_nt(); // tgen
};
//SIG(-1 S8053C5_nt) C1{ vd m FC2{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC3{ m FC4{ m Fp Fi FC5{ m}} FC6{ m Fp Fi FC7{ m}}}}


void  S8053C5_nt ::mf8053c5(){}
 S8053C5_nt ::~S8053C5_nt(){ note_dtor("S8053C5_nt", this);}
S8053C5_nt ::S8053C5_nt(){ note_ctor("S8053C5_nt", this);} // tgen

//skip512 S8053C5_nt

#else // __cplusplus

extern void _ZN10S8053C5_ntC1Ev();
extern void _ZN10S8053C5_ntD1Ev();
Name_Map name_map_S8053C5_nt[] = {
  NSPAIR(_ZN10S8053C5_ntC1Ev),
  NSPAIR(_ZN10S8053C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8053C5_nt[];
extern void _ZN10S8053C5_ntD1Ev();
extern void _ZN10S8053C5_ntD0Ev();
static  VTBL_ENTRY vtc_S8053C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8053C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S8053C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8053C5_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8053C5_nt[];
VTBL_ENTRY *P__ZTI10S8053C5_nt = _ZTI10S8053C5_nt; 
extern  VTBL_ENTRY _ZTV10S8053C5_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8053C1  : S8053C2 {
  ::S8053C5_nt s8053c1f0;
  void *s8053c1f1;
  virtual  ~S8053C1(); // _ZN7S8053C1D1Ev
  S8053C1(); // tgen
};
//SIG(1 S8053C1) C1{ BC2{ vd m Fi[3] Fc FC3{ m FC4{ vd m FL Fc} FC4} Fc[2] Fi[2] FC3 Fp[2] Fi[2]} vd FC5{ vd m FC6{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC7{ m FC8{ m Fp Fi FC9{ m}} FC10{ m Fp Fi FC11{ m}}}} Fp}


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

static void Test_S8053C1()
{
  extern Class_Descriptor cd_S8053C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,50)];
    init_test(&cd_S8053C1, buf);
    S8053C1 *dp, &lv = *(dp=new (buf) S8053C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,196), "sizeof(S8053C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8053C1)");
    check_base_class_offset(lv, (S8053C2*), 0, "S8053C1");
    check_field_offset(lv, s8053c1f0, ABISELECT(160,112), "S8053C1.s8053c1f0");
    check_field_offset(lv, s8053c1f1, ABISELECT(296,192), "S8053C1.s8053c1f1");
    test_class_info(&lv, &cd_S8053C1);
    dp->~S8053C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8053C1(Test_S8053C1, "S8053C1", ABISELECT(304,196));

#else // __cplusplus

extern void _ZN7S8053C1C1Ev();
extern void _ZN7S8053C1D1Ev();
Name_Map name_map_S8053C1[] = {
  NSPAIR(_ZN7S8053C1C1Ev),
  NSPAIR(_ZN7S8053C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8053C2;
extern VTBL_ENTRY _ZTI7S8053C2[];
extern  VTBL_ENTRY _ZTV7S8053C2[];
static Base_Class bases_S8053C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8053C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S8053C1[];
extern void _ZN7S8053C1D1Ev();
extern void _ZN7S8053C1D0Ev();
static  VTBL_ENTRY vtc_S8053C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8053C1[0]),
  (VTBL_ENTRY)&_ZN7S8053C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8053C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8053C1[];
extern  VTBL_ENTRY _ZTV7S8053C1[];
Class_Descriptor cd_S8053C1 = {  "S8053C1", // class name
  bases_S8053C1, 1,
  &(vtc_S8053C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,196), // object size
  NSPAIRA(_ZTI7S8053C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8053C1),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  S807C5_nt  {
  void  mf807c5(); // _ZN9S807C5_nt7mf807c5Ev
  virtual  ~S807C5_nt(); // _ZN9S807C5_ntD1Ev
  S807C5_nt(); // tgen
};
//SIG(-1 S807C5_nt) C1{ vd m}


void  S807C5_nt ::mf807c5(){}
 S807C5_nt ::~S807C5_nt(){ note_dtor("S807C5_nt", this);}
S807C5_nt ::S807C5_nt(){ note_ctor("S807C5_nt", this);} // tgen

//skip512 S807C5_nt

#else // __cplusplus

extern void _ZN9S807C5_ntC1Ev();
extern void _ZN9S807C5_ntD1Ev();
Name_Map name_map_S807C5_nt[] = {
  NSPAIR(_ZN9S807C5_ntC1Ev),
  NSPAIR(_ZN9S807C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern void _ZN9S807C5_ntD1Ev();
extern void _ZN9S807C5_ntD0Ev();
static  VTBL_ENTRY vtc_S807C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S807C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S807C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S807C5_ntD0Ev,
};
extern VTBL_ENTRY _ZTI9S807C5_nt[];
VTBL_ENTRY *P__ZTI9S807C5_nt = _ZTI9S807C5_nt; 
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
Class_Descriptor cd_S807C5_nt = {  "S807C5_nt", // class name
  0,0,//no base classes
  &(vtc_S807C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S807C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S807C5_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  S807C4_nt  : S807C5_nt {
  short s807c4f0[2];
  virtual  ~S807C4_nt(); // _ZN9S807C4_ntD1Ev
  virtual void  v2(); // _ZN9S807C4_nt2v2Ev
  S807C4_nt(); // tgen
};
//SIG(-1 S807C4_nt) C1{ BC2{ vd m} vd v1 Fs[2]}


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

//skip512 S807C4_nt

#else // __cplusplus

extern void _ZN9S807C4_ntC1Ev();
extern void _ZN9S807C4_ntD1Ev();
Name_Map name_map_S807C4_nt[] = {
  NSPAIR(_ZN9S807C4_ntC1Ev),
  NSPAIR(_ZN9S807C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
static Base_Class bases_S807C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S807C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI9S807C4_nt[];
extern void _ZN9S807C4_ntD1Ev();
extern void _ZN9S807C4_ntD0Ev();
extern void _ZN9S807C4_nt2v2Ev();
static  VTBL_ENTRY vtc_S807C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S807C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S807C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S807C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S807C4_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI9S807C4_nt[];
VTBL_ENTRY *P__ZTI9S807C4_nt = _ZTI9S807C4_nt; 
extern  VTBL_ENTRY _ZTV9S807C4_nt[];
Class_Descriptor cd_S807C4_nt = {  "S807C4_nt", // class name
  bases_S807C4_nt, 1,
  &(vtc_S807C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S807C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S807C4_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  S807C7_nt  {
  void *s807c7f0;
  int s807c7f1[2];
  void  mf807c7(); // _ZN9S807C7_nt7mf807c7Ev
};
//SIG(-1 S807C7_nt) C1{ m Fp Fi[2]}


void  S807C7_nt ::mf807c7(){}

//skip512 S807C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S807C3  : S807C4_nt {
  int s807c3f0[2];
  ::S1378C8_nt s807c3f1;
  void *s807c3f2;
  ::S807C7_nt s807c3f3;
  virtual  ~S807C3(); // _ZN6S807C3D1Ev
  virtual void  v3(); // _ZN6S807C32v3Ev
  virtual void  v4(); // _ZN6S807C32v4Ev
  S807C3(); // tgen
};
//SIG(-1 S807C3) C1{ BC2{ BC3{ vd m} vd v3 Fs[2]} vd v1 v2 Fi[2] FC4{ m Fp Fi[2]} Fp FC5{ m Fp Fi[2]}}


 S807C3 ::~S807C3(){ note_dtor("S807C3", this);}
void  S807C3 ::v3(){vfunc_called(this, "_ZN6S807C32v3Ev");}
void  S807C3 ::v4(){vfunc_called(this, "_ZN6S807C32v4Ev");}
S807C3 ::S807C3(){ note_ctor("S807C3", this);} // tgen

static void Test_S807C3()
{
  extern Class_Descriptor cd_S807C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S807C3, buf);
    S807C3 *dp, &lv = *(dp=new (buf) S807C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S807C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S807C3)");
    check_base_class_offset(lv, (S807C5_nt*)(S807C4_nt*), 0, "S807C3");
    check_base_class_offset(lv, (S807C4_nt*), 0, "S807C3");
    check_field_offset(lv, s807c3f0, ABISELECT(12,8), "S807C3.s807c3f0");
    check_field_offset(lv, s807c3f1, ABISELECT(24,16), "S807C3.s807c3f1");
    check_field_offset(lv, s807c3f2, ABISELECT(40,28), "S807C3.s807c3f2");
    check_field_offset(lv, s807c3f3, ABISELECT(48,32), "S807C3.s807c3f3");
    test_class_info(&lv, &cd_S807C3);
    dp->~S807C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS807C3(Test_S807C3, "S807C3", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN6S807C3C1Ev();
extern void _ZN6S807C3D1Ev();
Name_Map name_map_S807C3[] = {
  NSPAIR(_ZN6S807C3C1Ev),
  NSPAIR(_ZN6S807C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
extern Class_Descriptor cd_S807C4_nt;
extern VTBL_ENTRY _ZTI9S807C4_nt[];
extern  VTBL_ENTRY _ZTV9S807C4_nt[];
static Base_Class bases_S807C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S807C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S807C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S807C3[];
extern void _ZN6S807C3D1Ev();
extern void _ZN6S807C3D0Ev();
extern void _ZN9S807C4_nt2v2Ev();
extern void _ZN6S807C32v3Ev();
extern void _ZN6S807C32v4Ev();
static  VTBL_ENTRY vtc_S807C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S807C3[0]),
  (VTBL_ENTRY)&_ZN6S807C3D1Ev,
  (VTBL_ENTRY)&_ZN6S807C3D0Ev,
  (VTBL_ENTRY)&_ZN9S807C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN6S807C32v3Ev,
  (VTBL_ENTRY)&_ZN6S807C32v4Ev,
};
extern VTBL_ENTRY _ZTI6S807C3[];
extern  VTBL_ENTRY _ZTV6S807C3[];
Class_Descriptor cd_S807C3 = {  "S807C3", // class name
  bases_S807C3, 2,
  &(vtc_S807C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI6S807C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S807C3),7, //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  S807C8_nt  {
  char s807c8f0;
  char s807c8f1[15];
  void  mf807c8(); // _ZN9S807C8_nt7mf807c8Ev
};
//SIG(-1 S807C8_nt) C1{ m Fc[16]}


void  S807C8_nt ::mf807c8(){}

//skip512 S807C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S807C9_nt  {
  char s807c9f0;
  void  mf807c9(); // _ZN9S807C9_nt7mf807c9Ev
};
//SIG(-1 S807C9_nt) C1{ m Fc}


void  S807C9_nt ::mf807c9(){}

//skip512 S807C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S807C2  : S807C3 {
  int s807c2f0[4];
  ::S807C8_nt s807c2f1;
  ::S807C8_nt s807c2f2;
  int s807c2f3[2];
  ::S807C9_nt s807c2f4;
  int s807c2f5[2];
  ::S807C7_nt s807c2f6;
  virtual void  v5(); // _ZN6S807C22v5Ev
  virtual void  v6(); // _ZN6S807C22v6Ev
  ~S807C2(); // tgen
  S807C2(); // tgen
};
//SIG(-1 S807C2) C1{ BC2{ BC3{ BC4{ vd m} vd v3 Fs[2]} vd v4 v5 Fi[2] FC5{ m Fp Fi[2]} Fp FC6{ m Fp Fi[2]}} v1 v2 Fi[4] FC7{ m Fc[16]} FC7 Fi[2] FC8{ m Fc} Fi[2] FC6}


void  S807C2 ::v5(){vfunc_called(this, "_ZN6S807C22v5Ev");}
void  S807C2 ::v6(){vfunc_called(this, "_ZN6S807C22v6Ev");}
S807C2 ::~S807C2(){ note_dtor("S807C2", this);} // tgen
S807C2 ::S807C2(){ note_ctor("S807C2", this);} // tgen

static void Test_S807C2()
{
  extern Class_Descriptor cd_S807C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,32)];
    init_test(&cd_S807C2, buf);
    S807C2 *dp, &lv = *(dp=new (buf) S807C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,124), "sizeof(S807C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S807C2)");
    check_base_class_offset(lv, (S807C5_nt*)(S807C4_nt*)(S807C3*), 0, "S807C2");
    check_base_class_offset(lv, (S807C4_nt*)(S807C3*), 0, "S807C2");
    check_base_class_offset(lv, (S807C3*), 0, "S807C2");
    check_field_offset(lv, s807c2f0, ABISELECT(64,44), "S807C2.s807c2f0");
    check_field_offset(lv, s807c2f1, ABISELECT(80,60), "S807C2.s807c2f1");
    check_field_offset(lv, s807c2f2, ABISELECT(96,76), "S807C2.s807c2f2");
    check_field_offset(lv, s807c2f3, ABISELECT(112,92), "S807C2.s807c2f3");
    check_field_offset(lv, s807c2f4, ABISELECT(120,100), "S807C2.s807c2f4");
    check_field_offset(lv, s807c2f5, ABISELECT(124,104), "S807C2.s807c2f5");
    check_field_offset(lv, s807c2f6, ABISELECT(136,112), "S807C2.s807c2f6");
    test_class_info(&lv, &cd_S807C2);
    dp->~S807C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS807C2(Test_S807C2, "S807C2", ABISELECT(152,124));

#else // __cplusplus

extern void _ZN6S807C2C1Ev();
extern void _ZN6S807C2D1Ev();
Name_Map name_map_S807C2[] = {
  NSPAIR(_ZN6S807C2C1Ev),
  NSPAIR(_ZN6S807C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
extern Class_Descriptor cd_S807C4_nt;
extern VTBL_ENTRY _ZTI9S807C4_nt[];
extern  VTBL_ENTRY _ZTV9S807C4_nt[];
extern Class_Descriptor cd_S807C3;
extern VTBL_ENTRY _ZTI6S807C3[];
extern  VTBL_ENTRY _ZTV6S807C3[];
static Base_Class bases_S807C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S807C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S807C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S807C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S807C2[];
extern void _ZN6S807C2D1Ev();
extern void _ZN6S807C2D0Ev();
extern void _ZN9S807C4_nt2v2Ev();
extern void _ZN6S807C32v3Ev();
extern void _ZN6S807C32v4Ev();
extern void _ZN6S807C22v5Ev();
extern void _ZN6S807C22v6Ev();
static  VTBL_ENTRY vtc_S807C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S807C2[0]),
  (VTBL_ENTRY)&_ZN6S807C2D1Ev,
  (VTBL_ENTRY)&_ZN6S807C2D0Ev,
  (VTBL_ENTRY)&_ZN9S807C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN6S807C32v3Ev,
  (VTBL_ENTRY)&_ZN6S807C32v4Ev,
  (VTBL_ENTRY)&_ZN6S807C22v5Ev,
  (VTBL_ENTRY)&_ZN6S807C22v6Ev,
};
extern VTBL_ENTRY _ZTI6S807C2[];
extern  VTBL_ENTRY _ZTV6S807C2[];
Class_Descriptor cd_S807C2 = {  "S807C2", // class name
  bases_S807C2, 3,
  &(vtc_S807C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,124), // object size
  NSPAIRA(_ZTI6S807C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S807C2),9, //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  S807C1  : S807C2 {
  void *s807c1f0;
  virtual  ~S807C1(); // _ZN6S807C1D1Ev
  virtual void  v1(); // _ZN6S807C12v1Ev
  S807C1(); // tgen
};
//SIG(1 S807C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m} vd v2 Fs[2]} vd v3 v4 Fi[2] FC6{ m Fp Fi[2]} Fp FC7{ m Fp Fi[2]}} v5 v6 Fi[4] FC8{ m Fc[16]} FC8 Fi[2] FC9{ m Fc} Fi[2] FC7} vd v1 Fp}


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

static void Test_S807C1()
{
  extern Class_Descriptor cd_S807C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,33)];
    init_test(&cd_S807C1, buf);
    S807C1 *dp, &lv = *(dp=new (buf) S807C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,128), "sizeof(S807C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S807C1)");
    check_base_class_offset(lv, (S807C5_nt*)(S807C4_nt*)(S807C3*)(S807C2*), 0, "S807C1");
    check_base_class_offset(lv, (S807C4_nt*)(S807C3*)(S807C2*), 0, "S807C1");
    check_base_class_offset(lv, (S807C3*)(S807C2*), 0, "S807C1");
    check_base_class_offset(lv, (S807C2*), 0, "S807C1");
    check_field_offset(lv, s807c1f0, ABISELECT(152,124), "S807C1.s807c1f0");
    test_class_info(&lv, &cd_S807C1);
    dp->~S807C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS807C1(Test_S807C1, "S807C1", ABISELECT(160,128));

#else // __cplusplus

extern void _ZN6S807C1C1Ev();
extern void _ZN6S807C1D1Ev();
Name_Map name_map_S807C1[] = {
  NSPAIR(_ZN6S807C1C1Ev),
  NSPAIR(_ZN6S807C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
extern Class_Descriptor cd_S807C4_nt;
extern VTBL_ENTRY _ZTI9S807C4_nt[];
extern  VTBL_ENTRY _ZTV9S807C4_nt[];
extern Class_Descriptor cd_S807C3;
extern VTBL_ENTRY _ZTI6S807C3[];
extern  VTBL_ENTRY _ZTV6S807C3[];
extern Class_Descriptor cd_S807C2;
extern VTBL_ENTRY _ZTI6S807C2[];
extern  VTBL_ENTRY _ZTV6S807C2[];
static Base_Class bases_S807C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S807C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S807C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S807C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S807C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S807C1[];
extern void _ZN6S807C1D1Ev();
extern void _ZN6S807C1D0Ev();
extern void _ZN9S807C4_nt2v2Ev();
extern void _ZN6S807C32v3Ev();
extern void _ZN6S807C32v4Ev();
extern void _ZN6S807C22v5Ev();
extern void _ZN6S807C22v6Ev();
extern void _ZN6S807C12v1Ev();
static  VTBL_ENTRY vtc_S807C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S807C1[0]),
  (VTBL_ENTRY)&_ZN6S807C1D1Ev,
  (VTBL_ENTRY)&_ZN6S807C1D0Ev,
  (VTBL_ENTRY)&_ZN9S807C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN6S807C32v3Ev,
  (VTBL_ENTRY)&_ZN6S807C32v4Ev,
  (VTBL_ENTRY)&_ZN6S807C22v5Ev,
  (VTBL_ENTRY)&_ZN6S807C22v6Ev,
  (VTBL_ENTRY)&_ZN6S807C12v1Ev,
};
extern VTBL_ENTRY _ZTI6S807C1[];
extern  VTBL_ENTRY _ZTV6S807C1[];
Class_Descriptor cd_S807C1 = {  "S807C1", // class name
  bases_S807C1, 4,
  &(vtc_S807C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,128), // object size
  NSPAIRA(_ZTI6S807C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S807C1),10, //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  S1814C3  : S1C11_nt {
  virtual void  v5(); // _ZN7S1814C32v5Ev
  virtual void  v6(); // _ZN7S1814C32v6Ev
  virtual void  v7(); // _ZN7S1814C32v7Ev
  virtual void  v8(); // _ZN7S1814C32v8Ev
  virtual void  v9(); // _ZN7S1814C32v9Ev
  virtual void  v10(); // _ZN7S1814C33v10Ev
  virtual void  v11(); // _ZN7S1814C33v11Ev
  virtual void  v12(); // _ZN7S1814C33v12Ev
  virtual void  v13(); // _ZN7S1814C33v13Ev
  virtual void  v14(); // _ZN7S1814C33v14Ev
  virtual void  v15(); // _ZN7S1814C33v15Ev
  virtual void  v16(); // _ZN7S1814C33v16Ev
  virtual void  v17(); // _ZN7S1814C33v17Ev
  virtual void  v18(); // _ZN7S1814C33v18Ev
  virtual void  v19(); // _ZN7S1814C33v19Ev
  virtual void  v20(); // _ZN7S1814C33v20Ev
  virtual void  v21(); // _ZN7S1814C33v21Ev
  virtual void  v22(); // _ZN7S1814C33v22Ev
  virtual void  v23(); // _ZN7S1814C33v23Ev
  virtual void  v24(); // _ZN7S1814C33v24Ev
  virtual void  v25(); // _ZN7S1814C33v25Ev
  virtual void  v26(); // _ZN7S1814C33v26Ev
  virtual void  v27(); // _ZN7S1814C33v27Ev
  virtual void  v28(); // _ZN7S1814C33v28Ev
  virtual void  v29(); // _ZN7S1814C33v29Ev
  virtual void  v30(); // _ZN7S1814C33v30Ev
  virtual void  v31(); // _ZN7S1814C33v31Ev
  virtual void  v32(); // _ZN7S1814C33v32Ev
  virtual void  v33(); // _ZN7S1814C33v33Ev
  virtual void  v34(); // _ZN7S1814C33v34Ev
  virtual void  v35(); // _ZN7S1814C33v35Ev
  virtual void  v36(); // _ZN7S1814C33v36Ev
  ~S1814C3(); // tgen
  S1814C3(); // tgen
};
//SIG(-1 S1814C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1814C3 ::v5(){vfunc_called(this, "_ZN7S1814C32v5Ev");}
void  S1814C3 ::v6(){vfunc_called(this, "_ZN7S1814C32v6Ev");}
void  S1814C3 ::v7(){vfunc_called(this, "_ZN7S1814C32v7Ev");}
void  S1814C3 ::v8(){vfunc_called(this, "_ZN7S1814C32v8Ev");}
void  S1814C3 ::v9(){vfunc_called(this, "_ZN7S1814C32v9Ev");}
void  S1814C3 ::v10(){vfunc_called(this, "_ZN7S1814C33v10Ev");}
void  S1814C3 ::v11(){vfunc_called(this, "_ZN7S1814C33v11Ev");}
void  S1814C3 ::v12(){vfunc_called(this, "_ZN7S1814C33v12Ev");}
void  S1814C3 ::v13(){vfunc_called(this, "_ZN7S1814C33v13Ev");}
void  S1814C3 ::v14(){vfunc_called(this, "_ZN7S1814C33v14Ev");}
void  S1814C3 ::v15(){vfunc_called(this, "_ZN7S1814C33v15Ev");}
void  S1814C3 ::v16(){vfunc_called(this, "_ZN7S1814C33v16Ev");}
void  S1814C3 ::v17(){vfunc_called(this, "_ZN7S1814C33v17Ev");}
void  S1814C3 ::v18(){vfunc_called(this, "_ZN7S1814C33v18Ev");}
void  S1814C3 ::v19(){vfunc_called(this, "_ZN7S1814C33v19Ev");}
void  S1814C3 ::v20(){vfunc_called(this, "_ZN7S1814C33v20Ev");}
void  S1814C3 ::v21(){vfunc_called(this, "_ZN7S1814C33v21Ev");}
void  S1814C3 ::v22(){vfunc_called(this, "_ZN7S1814C33v22Ev");}
void  S1814C3 ::v23(){vfunc_called(this, "_ZN7S1814C33v23Ev");}
void  S1814C3 ::v24(){vfunc_called(this, "_ZN7S1814C33v24Ev");}
void  S1814C3 ::v25(){vfunc_called(this, "_ZN7S1814C33v25Ev");}
void  S1814C3 ::v26(){vfunc_called(this, "_ZN7S1814C33v26Ev");}
void  S1814C3 ::v27(){vfunc_called(this, "_ZN7S1814C33v27Ev");}
void  S1814C3 ::v28(){vfunc_called(this, "_ZN7S1814C33v28Ev");}
void  S1814C3 ::v29(){vfunc_called(this, "_ZN7S1814C33v29Ev");}
void  S1814C3 ::v30(){vfunc_called(this, "_ZN7S1814C33v30Ev");}
void  S1814C3 ::v31(){vfunc_called(this, "_ZN7S1814C33v31Ev");}
void  S1814C3 ::v32(){vfunc_called(this, "_ZN7S1814C33v32Ev");}
void  S1814C3 ::v33(){vfunc_called(this, "_ZN7S1814C33v33Ev");}
void  S1814C3 ::v34(){vfunc_called(this, "_ZN7S1814C33v34Ev");}
void  S1814C3 ::v35(){vfunc_called(this, "_ZN7S1814C33v35Ev");}
void  S1814C3 ::v36(){vfunc_called(this, "_ZN7S1814C33v36Ev");}
S1814C3 ::~S1814C3(){ note_dtor("S1814C3", this);} // tgen
S1814C3 ::S1814C3(){ note_ctor("S1814C3", this);} // tgen

static void Test_S1814C3()
{
  extern Class_Descriptor cd_S1814C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1814C3, buf);
    S1814C3 *dp, &lv = *(dp=new (buf) S1814C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1814C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1814C3)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S1814C3");
    test_class_info(&lv, &cd_S1814C3);
    dp->~S1814C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1814C3(Test_S1814C3, "S1814C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1814C3C1Ev();
extern void _ZN7S1814C3D1Ev();
Name_Map name_map_S1814C3[] = {
  NSPAIR(_ZN7S1814C3C1Ev),
  NSPAIR(_ZN7S1814C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S1814C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1814C3[];
extern void _ZN7S1814C3D1Ev();
extern void _ZN7S1814C3D0Ev();
extern void _ZN7S1814C32v5Ev();
extern void _ZN7S1814C32v6Ev();
extern void _ZN7S1814C32v7Ev();
extern void _ZN7S1814C32v8Ev();
extern void _ZN7S1814C32v9Ev();
extern void _ZN7S1814C33v10Ev();
extern void _ZN7S1814C33v11Ev();
extern void _ZN7S1814C33v12Ev();
extern void _ZN7S1814C33v13Ev();
extern void _ZN7S1814C33v14Ev();
extern void _ZN7S1814C33v15Ev();
extern void _ZN7S1814C33v16Ev();
extern void _ZN7S1814C33v17Ev();
extern void _ZN7S1814C33v18Ev();
extern void _ZN7S1814C33v19Ev();
extern void _ZN7S1814C33v20Ev();
extern void _ZN7S1814C33v21Ev();
extern void _ZN7S1814C33v22Ev();
extern void _ZN7S1814C33v23Ev();
extern void _ZN7S1814C33v24Ev();
extern void _ZN7S1814C33v25Ev();
extern void _ZN7S1814C33v26Ev();
extern void _ZN7S1814C33v27Ev();
extern void _ZN7S1814C33v28Ev();
extern void _ZN7S1814C33v29Ev();
extern void _ZN7S1814C33v30Ev();
extern void _ZN7S1814C33v31Ev();
extern void _ZN7S1814C33v32Ev();
extern void _ZN7S1814C33v33Ev();
extern void _ZN7S1814C33v34Ev();
extern void _ZN7S1814C33v35Ev();
extern void _ZN7S1814C33v36Ev();
static  VTBL_ENTRY vtc_S1814C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1814C3[0]),
  (VTBL_ENTRY)&_ZN7S1814C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1814C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1814C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1814C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1814C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1814C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1814C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v36Ev,
};
extern VTBL_ENTRY _ZTI7S1814C3[];
extern  VTBL_ENTRY _ZTV7S1814C3[];
Class_Descriptor cd_S1814C3 = {  "S1814C3", // class name
  bases_S1814C3, 1,
  &(vtc_S1814C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1814C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1814C3),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  S1814C2  : S1814C3 {
  virtual void  v37(); // _ZN7S1814C23v37Ev
  ~S1814C2(); // tgen
  S1814C2(); // tgen
};
//SIG(-1 S1814C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1}


void  S1814C2 ::v37(){vfunc_called(this, "_ZN7S1814C23v37Ev");}
S1814C2 ::~S1814C2(){ note_dtor("S1814C2", this);} // tgen
S1814C2 ::S1814C2(){ note_ctor("S1814C2", this);} // tgen

static void Test_S1814C2()
{
  extern Class_Descriptor cd_S1814C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1814C2, buf);
    S1814C2 *dp, &lv = *(dp=new (buf) S1814C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1814C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1814C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S1814C3*), 0, "S1814C2");
    check_base_class_offset(lv, (S1814C3*), 0, "S1814C2");
    test_class_info(&lv, &cd_S1814C2);
    dp->~S1814C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1814C2(Test_S1814C2, "S1814C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1814C2C1Ev();
extern void _ZN7S1814C2D1Ev();
Name_Map name_map_S1814C2[] = {
  NSPAIR(_ZN7S1814C2C1Ev),
  NSPAIR(_ZN7S1814C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1814C3;
extern VTBL_ENTRY _ZTI7S1814C3[];
extern  VTBL_ENTRY _ZTV7S1814C3[];
static Base_Class bases_S1814C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1814C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1814C2[];
extern void _ZN7S1814C2D1Ev();
extern void _ZN7S1814C2D0Ev();
extern void _ZN7S1814C32v5Ev();
extern void _ZN7S1814C32v6Ev();
extern void _ZN7S1814C32v7Ev();
extern void _ZN7S1814C32v8Ev();
extern void _ZN7S1814C32v9Ev();
extern void _ZN7S1814C33v10Ev();
extern void _ZN7S1814C33v11Ev();
extern void _ZN7S1814C33v12Ev();
extern void _ZN7S1814C33v13Ev();
extern void _ZN7S1814C33v14Ev();
extern void _ZN7S1814C33v15Ev();
extern void _ZN7S1814C33v16Ev();
extern void _ZN7S1814C33v17Ev();
extern void _ZN7S1814C33v18Ev();
extern void _ZN7S1814C33v19Ev();
extern void _ZN7S1814C33v20Ev();
extern void _ZN7S1814C33v21Ev();
extern void _ZN7S1814C33v22Ev();
extern void _ZN7S1814C33v23Ev();
extern void _ZN7S1814C33v24Ev();
extern void _ZN7S1814C33v25Ev();
extern void _ZN7S1814C33v26Ev();
extern void _ZN7S1814C33v27Ev();
extern void _ZN7S1814C33v28Ev();
extern void _ZN7S1814C33v29Ev();
extern void _ZN7S1814C33v30Ev();
extern void _ZN7S1814C33v31Ev();
extern void _ZN7S1814C33v32Ev();
extern void _ZN7S1814C33v33Ev();
extern void _ZN7S1814C33v34Ev();
extern void _ZN7S1814C33v35Ev();
extern void _ZN7S1814C33v36Ev();
extern void _ZN7S1814C23v37Ev();
static  VTBL_ENTRY vtc_S1814C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1814C2[0]),
  (VTBL_ENTRY)&_ZN7S1814C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1814C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1814C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1814C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1814C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1814C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1814C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1814C23v37Ev,
};
extern VTBL_ENTRY _ZTI7S1814C2[];
extern  VTBL_ENTRY _ZTV7S1814C2[];
Class_Descriptor cd_S1814C2 = {  "S1814C2", // class name
  bases_S1814C2, 2,
  &(vtc_S1814C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1814C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1814C2),37, //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  S1814C1  : S1814C2 {
  virtual void  v1(); // _ZN7S1814C12v1Ev
  virtual void  v2(); // _ZN7S1814C12v2Ev
  virtual void  v3(); // _ZN7S1814C12v3Ev
  virtual void  v4(); // _ZN7S1814C12v4Ev
  ~S1814C1(); // tgen
  S1814C1(); // tgen
};
//SIG(1 S1814C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1 v2 v3 v4}


void  S1814C1 ::v1(){vfunc_called(this, "_ZN7S1814C12v1Ev");}
void  S1814C1 ::v2(){vfunc_called(this, "_ZN7S1814C12v2Ev");}
void  S1814C1 ::v3(){vfunc_called(this, "_ZN7S1814C12v3Ev");}
void  S1814C1 ::v4(){vfunc_called(this, "_ZN7S1814C12v4Ev");}
S1814C1 ::~S1814C1(){ note_dtor("S1814C1", this);} // tgen
S1814C1 ::S1814C1(){ note_ctor("S1814C1", this);} // tgen

static void Test_S1814C1()
{
  extern Class_Descriptor cd_S1814C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1814C1, buf);
    S1814C1 *dp, &lv = *(dp=new (buf) S1814C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1814C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1814C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S1814C3*)(S1814C2*), 0, "S1814C1");
    check_base_class_offset(lv, (S1814C3*)(S1814C2*), 0, "S1814C1");
    check_base_class_offset(lv, (S1814C2*), 0, "S1814C1");
    test_class_info(&lv, &cd_S1814C1);
    dp->~S1814C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1814C1(Test_S1814C1, "S1814C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1814C1C1Ev();
extern void _ZN7S1814C1D1Ev();
Name_Map name_map_S1814C1[] = {
  NSPAIR(_ZN7S1814C1C1Ev),
  NSPAIR(_ZN7S1814C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1814C3;
extern VTBL_ENTRY _ZTI7S1814C3[];
extern  VTBL_ENTRY _ZTV7S1814C3[];
extern Class_Descriptor cd_S1814C2;
extern VTBL_ENTRY _ZTI7S1814C2[];
extern  VTBL_ENTRY _ZTV7S1814C2[];
static Base_Class bases_S1814C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1814C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1814C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1814C1[];
extern void _ZN7S1814C1D1Ev();
extern void _ZN7S1814C1D0Ev();
extern void _ZN7S1814C32v5Ev();
extern void _ZN7S1814C32v6Ev();
extern void _ZN7S1814C32v7Ev();
extern void _ZN7S1814C32v8Ev();
extern void _ZN7S1814C32v9Ev();
extern void _ZN7S1814C33v10Ev();
extern void _ZN7S1814C33v11Ev();
extern void _ZN7S1814C33v12Ev();
extern void _ZN7S1814C33v13Ev();
extern void _ZN7S1814C33v14Ev();
extern void _ZN7S1814C33v15Ev();
extern void _ZN7S1814C33v16Ev();
extern void _ZN7S1814C33v17Ev();
extern void _ZN7S1814C33v18Ev();
extern void _ZN7S1814C33v19Ev();
extern void _ZN7S1814C33v20Ev();
extern void _ZN7S1814C33v21Ev();
extern void _ZN7S1814C33v22Ev();
extern void _ZN7S1814C33v23Ev();
extern void _ZN7S1814C33v24Ev();
extern void _ZN7S1814C33v25Ev();
extern void _ZN7S1814C33v26Ev();
extern void _ZN7S1814C33v27Ev();
extern void _ZN7S1814C33v28Ev();
extern void _ZN7S1814C33v29Ev();
extern void _ZN7S1814C33v30Ev();
extern void _ZN7S1814C33v31Ev();
extern void _ZN7S1814C33v32Ev();
extern void _ZN7S1814C33v33Ev();
extern void _ZN7S1814C33v34Ev();
extern void _ZN7S1814C33v35Ev();
extern void _ZN7S1814C33v36Ev();
extern void _ZN7S1814C23v37Ev();
extern void _ZN7S1814C12v1Ev();
extern void _ZN7S1814C12v2Ev();
extern void _ZN7S1814C12v3Ev();
extern void _ZN7S1814C12v4Ev();
static  VTBL_ENTRY vtc_S1814C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1814C1[0]),
  (VTBL_ENTRY)&_ZN7S1814C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1814C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1814C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1814C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1814C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1814C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1814C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1814C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1814C23v37Ev,
  (VTBL_ENTRY)&_ZN7S1814C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1814C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1814C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1814C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1814C1[];
extern  VTBL_ENTRY _ZTV7S1814C1[];
Class_Descriptor cd_S1814C1 = {  "S1814C1", // class name
  bases_S1814C1, 3,
  &(vtc_S1814C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1814C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1814C1),41, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1803C3  : S1C11_nt {
  virtual void  v4(); // _ZN7S1803C32v4Ev
  virtual void  v5(); // _ZN7S1803C32v5Ev
  virtual void  v6(); // _ZN7S1803C32v6Ev
  virtual void  v7(); // _ZN7S1803C32v7Ev
  virtual void  v8(); // _ZN7S1803C32v8Ev
  virtual void  v9(); // _ZN7S1803C32v9Ev
  virtual void  v10(); // _ZN7S1803C33v10Ev
  virtual void  v11(); // _ZN7S1803C33v11Ev
  virtual void  v12(); // _ZN7S1803C33v12Ev
  virtual void  v13(); // _ZN7S1803C33v13Ev
  virtual void  v14(); // _ZN7S1803C33v14Ev
  virtual void  v15(); // _ZN7S1803C33v15Ev
  virtual void  v16(); // _ZN7S1803C33v16Ev
  virtual void  v17(); // _ZN7S1803C33v17Ev
  virtual void  v18(); // _ZN7S1803C33v18Ev
  virtual void  v19(); // _ZN7S1803C33v19Ev
  virtual void  v20(); // _ZN7S1803C33v20Ev
  virtual void  v21(); // _ZN7S1803C33v21Ev
  virtual void  v22(); // _ZN7S1803C33v22Ev
  virtual void  v23(); // _ZN7S1803C33v23Ev
  virtual void  v24(); // _ZN7S1803C33v24Ev
  virtual void  v25(); // _ZN7S1803C33v25Ev
  virtual void  v26(); // _ZN7S1803C33v26Ev
  virtual void  v27(); // _ZN7S1803C33v27Ev
  virtual void  v28(); // _ZN7S1803C33v28Ev
  virtual void  v29(); // _ZN7S1803C33v29Ev
  virtual void  v30(); // _ZN7S1803C33v30Ev
  virtual void  v31(); // _ZN7S1803C33v31Ev
  virtual void  v32(); // _ZN7S1803C33v32Ev
  virtual void  v33(); // _ZN7S1803C33v33Ev
  virtual void  v34(); // _ZN7S1803C33v34Ev
  virtual void  v35(); // _ZN7S1803C33v35Ev
  ~S1803C3(); // tgen
  S1803C3(); // tgen
};
//SIG(-1 S1803C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1803C3 ::v4(){vfunc_called(this, "_ZN7S1803C32v4Ev");}
void  S1803C3 ::v5(){vfunc_called(this, "_ZN7S1803C32v5Ev");}
void  S1803C3 ::v6(){vfunc_called(this, "_ZN7S1803C32v6Ev");}
void  S1803C3 ::v7(){vfunc_called(this, "_ZN7S1803C32v7Ev");}
void  S1803C3 ::v8(){vfunc_called(this, "_ZN7S1803C32v8Ev");}
void  S1803C3 ::v9(){vfunc_called(this, "_ZN7S1803C32v9Ev");}
void  S1803C3 ::v10(){vfunc_called(this, "_ZN7S1803C33v10Ev");}
void  S1803C3 ::v11(){vfunc_called(this, "_ZN7S1803C33v11Ev");}
void  S1803C3 ::v12(){vfunc_called(this, "_ZN7S1803C33v12Ev");}
void  S1803C3 ::v13(){vfunc_called(this, "_ZN7S1803C33v13Ev");}
void  S1803C3 ::v14(){vfunc_called(this, "_ZN7S1803C33v14Ev");}
void  S1803C3 ::v15(){vfunc_called(this, "_ZN7S1803C33v15Ev");}
void  S1803C3 ::v16(){vfunc_called(this, "_ZN7S1803C33v16Ev");}
void  S1803C3 ::v17(){vfunc_called(this, "_ZN7S1803C33v17Ev");}
void  S1803C3 ::v18(){vfunc_called(this, "_ZN7S1803C33v18Ev");}
void  S1803C3 ::v19(){vfunc_called(this, "_ZN7S1803C33v19Ev");}
void  S1803C3 ::v20(){vfunc_called(this, "_ZN7S1803C33v20Ev");}
void  S1803C3 ::v21(){vfunc_called(this, "_ZN7S1803C33v21Ev");}
void  S1803C3 ::v22(){vfunc_called(this, "_ZN7S1803C33v22Ev");}
void  S1803C3 ::v23(){vfunc_called(this, "_ZN7S1803C33v23Ev");}
void  S1803C3 ::v24(){vfunc_called(this, "_ZN7S1803C33v24Ev");}
void  S1803C3 ::v25(){vfunc_called(this, "_ZN7S1803C33v25Ev");}
void  S1803C3 ::v26(){vfunc_called(this, "_ZN7S1803C33v26Ev");}
void  S1803C3 ::v27(){vfunc_called(this, "_ZN7S1803C33v27Ev");}
void  S1803C3 ::v28(){vfunc_called(this, "_ZN7S1803C33v28Ev");}
void  S1803C3 ::v29(){vfunc_called(this, "_ZN7S1803C33v29Ev");}
void  S1803C3 ::v30(){vfunc_called(this, "_ZN7S1803C33v30Ev");}
void  S1803C3 ::v31(){vfunc_called(this, "_ZN7S1803C33v31Ev");}
void  S1803C3 ::v32(){vfunc_called(this, "_ZN7S1803C33v32Ev");}
void  S1803C3 ::v33(){vfunc_called(this, "_ZN7S1803C33v33Ev");}
void  S1803C3 ::v34(){vfunc_called(this, "_ZN7S1803C33v34Ev");}
void  S1803C3 ::v35(){vfunc_called(this, "_ZN7S1803C33v35Ev");}
S1803C3 ::~S1803C3(){ note_dtor("S1803C3", this);} // tgen
S1803C3 ::S1803C3(){ note_ctor("S1803C3", this);} // tgen

static void Test_S1803C3()
{
  extern Class_Descriptor cd_S1803C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1803C3, buf);
    S1803C3 *dp, &lv = *(dp=new (buf) S1803C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1803C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1803C3)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S1803C3");
    test_class_info(&lv, &cd_S1803C3);
    dp->~S1803C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1803C3(Test_S1803C3, "S1803C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1803C3C1Ev();
extern void _ZN7S1803C3D1Ev();
Name_Map name_map_S1803C3[] = {
  NSPAIR(_ZN7S1803C3C1Ev),
  NSPAIR(_ZN7S1803C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S1803C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1803C3[];
extern void _ZN7S1803C3D1Ev();
extern void _ZN7S1803C3D0Ev();
extern void _ZN7S1803C32v4Ev();
extern void _ZN7S1803C32v5Ev();
extern void _ZN7S1803C32v6Ev();
extern void _ZN7S1803C32v7Ev();
extern void _ZN7S1803C32v8Ev();
extern void _ZN7S1803C32v9Ev();
extern void _ZN7S1803C33v10Ev();
extern void _ZN7S1803C33v11Ev();
extern void _ZN7S1803C33v12Ev();
extern void _ZN7S1803C33v13Ev();
extern void _ZN7S1803C33v14Ev();
extern void _ZN7S1803C33v15Ev();
extern void _ZN7S1803C33v16Ev();
extern void _ZN7S1803C33v17Ev();
extern void _ZN7S1803C33v18Ev();
extern void _ZN7S1803C33v19Ev();
extern void _ZN7S1803C33v20Ev();
extern void _ZN7S1803C33v21Ev();
extern void _ZN7S1803C33v22Ev();
extern void _ZN7S1803C33v23Ev();
extern void _ZN7S1803C33v24Ev();
extern void _ZN7S1803C33v25Ev();
extern void _ZN7S1803C33v26Ev();
extern void _ZN7S1803C33v27Ev();
extern void _ZN7S1803C33v28Ev();
extern void _ZN7S1803C33v29Ev();
extern void _ZN7S1803C33v30Ev();
extern void _ZN7S1803C33v31Ev();
extern void _ZN7S1803C33v32Ev();
extern void _ZN7S1803C33v33Ev();
extern void _ZN7S1803C33v34Ev();
extern void _ZN7S1803C33v35Ev();
static  VTBL_ENTRY vtc_S1803C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1803C3[0]),
  (VTBL_ENTRY)&_ZN7S1803C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1803C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1803C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1803C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1803C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1803C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1803C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1803C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v35Ev,
};
extern VTBL_ENTRY _ZTI7S1803C3[];
extern  VTBL_ENTRY _ZTV7S1803C3[];
Class_Descriptor cd_S1803C3 = {  "S1803C3", // class name
  bases_S1803C3, 1,
  &(vtc_S1803C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1803C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1803C3),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  S1803C2  : S1803C3 {
  virtual void  v36(); // _ZN7S1803C23v36Ev
  ~S1803C2(); // tgen
  S1803C2(); // tgen
};
//SIG(-1 S1803C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1}


void  S1803C2 ::v36(){vfunc_called(this, "_ZN7S1803C23v36Ev");}
S1803C2 ::~S1803C2(){ note_dtor("S1803C2", this);} // tgen
S1803C2 ::S1803C2(){ note_ctor("S1803C2", this);} // tgen

static void Test_S1803C2()
{
  extern Class_Descriptor cd_S1803C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1803C2, buf);
    S1803C2 *dp, &lv = *(dp=new (buf) S1803C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1803C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1803C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S1803C3*), 0, "S1803C2");
    check_base_class_offset(lv, (S1803C3*), 0, "S1803C2");
    test_class_info(&lv, &cd_S1803C2);
    dp->~S1803C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1803C2(Test_S1803C2, "S1803C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1803C2C1Ev();
extern void _ZN7S1803C2D1Ev();
Name_Map name_map_S1803C2[] = {
  NSPAIR(_ZN7S1803C2C1Ev),
  NSPAIR(_ZN7S1803C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1803C3;
extern VTBL_ENTRY _ZTI7S1803C3[];
extern  VTBL_ENTRY _ZTV7S1803C3[];
static Base_Class bases_S1803C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1803C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1803C2[];
extern void _ZN7S1803C2D1Ev();
extern void _ZN7S1803C2D0Ev();
extern void _ZN7S1803C32v4Ev();
extern void _ZN7S1803C32v5Ev();
extern void _ZN7S1803C32v6Ev();
extern void _ZN7S1803C32v7Ev();
extern void _ZN7S1803C32v8Ev();
extern void _ZN7S1803C32v9Ev();
extern void _ZN7S1803C33v10Ev();
extern void _ZN7S1803C33v11Ev();
extern void _ZN7S1803C33v12Ev();
extern void _ZN7S1803C33v13Ev();
extern void _ZN7S1803C33v14Ev();
extern void _ZN7S1803C33v15Ev();
extern void _ZN7S1803C33v16Ev();
extern void _ZN7S1803C33v17Ev();
extern void _ZN7S1803C33v18Ev();
extern void _ZN7S1803C33v19Ev();
extern void _ZN7S1803C33v20Ev();
extern void _ZN7S1803C33v21Ev();
extern void _ZN7S1803C33v22Ev();
extern void _ZN7S1803C33v23Ev();
extern void _ZN7S1803C33v24Ev();
extern void _ZN7S1803C33v25Ev();
extern void _ZN7S1803C33v26Ev();
extern void _ZN7S1803C33v27Ev();
extern void _ZN7S1803C33v28Ev();
extern void _ZN7S1803C33v29Ev();
extern void _ZN7S1803C33v30Ev();
extern void _ZN7S1803C33v31Ev();
extern void _ZN7S1803C33v32Ev();
extern void _ZN7S1803C33v33Ev();
extern void _ZN7S1803C33v34Ev();
extern void _ZN7S1803C33v35Ev();
extern void _ZN7S1803C23v36Ev();
static  VTBL_ENTRY vtc_S1803C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1803C2[0]),
  (VTBL_ENTRY)&_ZN7S1803C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1803C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1803C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1803C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1803C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1803C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1803C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1803C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1803C23v36Ev,
};
extern VTBL_ENTRY _ZTI7S1803C2[];
extern  VTBL_ENTRY _ZTV7S1803C2[];
Class_Descriptor cd_S1803C2 = {  "S1803C2", // class name
  bases_S1803C2, 2,
  &(vtc_S1803C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1803C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1803C2),37, //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  S1803C1  : S1803C2 {
  virtual void  v1(); // _ZN7S1803C12v1Ev
  virtual void  v2(); // _ZN7S1803C12v2Ev
  virtual void  v3(); // _ZN7S1803C12v3Ev
  ~S1803C1(); // tgen
  S1803C1(); // tgen
};
//SIG(1 S1803C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1 v2 v3}


void  S1803C1 ::v1(){vfunc_called(this, "_ZN7S1803C12v1Ev");}
void  S1803C1 ::v2(){vfunc_called(this, "_ZN7S1803C12v2Ev");}
void  S1803C1 ::v3(){vfunc_called(this, "_ZN7S1803C12v3Ev");}
S1803C1 ::~S1803C1(){ note_dtor("S1803C1", this);} // tgen
S1803C1 ::S1803C1(){ note_ctor("S1803C1", this);} // tgen

static void Test_S1803C1()
{
  extern Class_Descriptor cd_S1803C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1803C1, buf);
    S1803C1 *dp, &lv = *(dp=new (buf) S1803C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1803C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1803C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S1803C3*)(S1803C2*), 0, "S1803C1");
    check_base_class_offset(lv, (S1803C3*)(S1803C2*), 0, "S1803C1");
    check_base_class_offset(lv, (S1803C2*), 0, "S1803C1");
    test_class_info(&lv, &cd_S1803C1);
    dp->~S1803C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1803C1(Test_S1803C1, "S1803C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1803C1C1Ev();
extern void _ZN7S1803C1D1Ev();
Name_Map name_map_S1803C1[] = {
  NSPAIR(_ZN7S1803C1C1Ev),
  NSPAIR(_ZN7S1803C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1803C3;
extern VTBL_ENTRY _ZTI7S1803C3[];
extern  VTBL_ENTRY _ZTV7S1803C3[];
extern Class_Descriptor cd_S1803C2;
extern VTBL_ENTRY _ZTI7S1803C2[];
extern  VTBL_ENTRY _ZTV7S1803C2[];
static Base_Class bases_S1803C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1803C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1803C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1803C1[];
extern void _ZN7S1803C1D1Ev();
extern void _ZN7S1803C1D0Ev();
extern void _ZN7S1803C32v4Ev();
extern void _ZN7S1803C32v5Ev();
extern void _ZN7S1803C32v6Ev();
extern void _ZN7S1803C32v7Ev();
extern void _ZN7S1803C32v8Ev();
extern void _ZN7S1803C32v9Ev();
extern void _ZN7S1803C33v10Ev();
extern void _ZN7S1803C33v11Ev();
extern void _ZN7S1803C33v12Ev();
extern void _ZN7S1803C33v13Ev();
extern void _ZN7S1803C33v14Ev();
extern void _ZN7S1803C33v15Ev();
extern void _ZN7S1803C33v16Ev();
extern void _ZN7S1803C33v17Ev();
extern void _ZN7S1803C33v18Ev();
extern void _ZN7S1803C33v19Ev();
extern void _ZN7S1803C33v20Ev();
extern void _ZN7S1803C33v21Ev();
extern void _ZN7S1803C33v22Ev();
extern void _ZN7S1803C33v23Ev();
extern void _ZN7S1803C33v24Ev();
extern void _ZN7S1803C33v25Ev();
extern void _ZN7S1803C33v26Ev();
extern void _ZN7S1803C33v27Ev();
extern void _ZN7S1803C33v28Ev();
extern void _ZN7S1803C33v29Ev();
extern void _ZN7S1803C33v30Ev();
extern void _ZN7S1803C33v31Ev();
extern void _ZN7S1803C33v32Ev();
extern void _ZN7S1803C33v33Ev();
extern void _ZN7S1803C33v34Ev();
extern void _ZN7S1803C33v35Ev();
extern void _ZN7S1803C23v36Ev();
extern void _ZN7S1803C12v1Ev();
extern void _ZN7S1803C12v2Ev();
extern void _ZN7S1803C12v3Ev();
static  VTBL_ENTRY vtc_S1803C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1803C1[0]),
  (VTBL_ENTRY)&_ZN7S1803C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1803C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1803C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1803C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1803C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1803C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1803C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1803C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1803C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1803C23v36Ev,
  (VTBL_ENTRY)&_ZN7S1803C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1803C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1803C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1803C1[];
extern  VTBL_ENTRY _ZTV7S1803C1[];
Class_Descriptor cd_S1803C1 = {  "S1803C1", // class name
  bases_S1803C1, 3,
  &(vtc_S1803C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1803C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1803C1),40, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1794C3  : S1C11_nt {
  virtual void  v3(); // _ZN7S1794C32v3Ev
  virtual void  v4(); // _ZN7S1794C32v4Ev
  virtual void  v5(); // _ZN7S1794C32v5Ev
  virtual void  v6(); // _ZN7S1794C32v6Ev
  virtual void  v7(); // _ZN7S1794C32v7Ev
  virtual void  v8(); // _ZN7S1794C32v8Ev
  virtual void  v9(); // _ZN7S1794C32v9Ev
  virtual void  v10(); // _ZN7S1794C33v10Ev
  virtual void  v11(); // _ZN7S1794C33v11Ev
  virtual void  v12(); // _ZN7S1794C33v12Ev
  virtual void  v13(); // _ZN7S1794C33v13Ev
  virtual void  v14(); // _ZN7S1794C33v14Ev
  virtual void  v15(); // _ZN7S1794C33v15Ev
  virtual void  v16(); // _ZN7S1794C33v16Ev
  virtual void  v17(); // _ZN7S1794C33v17Ev
  virtual void  v18(); // _ZN7S1794C33v18Ev
  virtual void  v19(); // _ZN7S1794C33v19Ev
  virtual void  v20(); // _ZN7S1794C33v20Ev
  virtual void  v21(); // _ZN7S1794C33v21Ev
  virtual void  v22(); // _ZN7S1794C33v22Ev
  virtual void  v23(); // _ZN7S1794C33v23Ev
  virtual void  v24(); // _ZN7S1794C33v24Ev
  virtual void  v25(); // _ZN7S1794C33v25Ev
  virtual void  v26(); // _ZN7S1794C33v26Ev
  virtual void  v27(); // _ZN7S1794C33v27Ev
  virtual void  v28(); // _ZN7S1794C33v28Ev
  virtual void  v29(); // _ZN7S1794C33v29Ev
  virtual void  v30(); // _ZN7S1794C33v30Ev
  virtual void  v31(); // _ZN7S1794C33v31Ev
  virtual void  v32(); // _ZN7S1794C33v32Ev
  virtual void  v33(); // _ZN7S1794C33v33Ev
  virtual void  v34(); // _ZN7S1794C33v34Ev
  ~S1794C3(); // tgen
  S1794C3(); // tgen
};
//SIG(-1 S1794C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1794C3 ::v3(){vfunc_called(this, "_ZN7S1794C32v3Ev");}
void  S1794C3 ::v4(){vfunc_called(this, "_ZN7S1794C32v4Ev");}
void  S1794C3 ::v5(){vfunc_called(this, "_ZN7S1794C32v5Ev");}
void  S1794C3 ::v6(){vfunc_called(this, "_ZN7S1794C32v6Ev");}
void  S1794C3 ::v7(){vfunc_called(this, "_ZN7S1794C32v7Ev");}
void  S1794C3 ::v8(){vfunc_called(this, "_ZN7S1794C32v8Ev");}
void  S1794C3 ::v9(){vfunc_called(this, "_ZN7S1794C32v9Ev");}
void  S1794C3 ::v10(){vfunc_called(this, "_ZN7S1794C33v10Ev");}
void  S1794C3 ::v11(){vfunc_called(this, "_ZN7S1794C33v11Ev");}
void  S1794C3 ::v12(){vfunc_called(this, "_ZN7S1794C33v12Ev");}
void  S1794C3 ::v13(){vfunc_called(this, "_ZN7S1794C33v13Ev");}
void  S1794C3 ::v14(){vfunc_called(this, "_ZN7S1794C33v14Ev");}
void  S1794C3 ::v15(){vfunc_called(this, "_ZN7S1794C33v15Ev");}
void  S1794C3 ::v16(){vfunc_called(this, "_ZN7S1794C33v16Ev");}
void  S1794C3 ::v17(){vfunc_called(this, "_ZN7S1794C33v17Ev");}
void  S1794C3 ::v18(){vfunc_called(this, "_ZN7S1794C33v18Ev");}
void  S1794C3 ::v19(){vfunc_called(this, "_ZN7S1794C33v19Ev");}
void  S1794C3 ::v20(){vfunc_called(this, "_ZN7S1794C33v20Ev");}
void  S1794C3 ::v21(){vfunc_called(this, "_ZN7S1794C33v21Ev");}
void  S1794C3 ::v22(){vfunc_called(this, "_ZN7S1794C33v22Ev");}
void  S1794C3 ::v23(){vfunc_called(this, "_ZN7S1794C33v23Ev");}
void  S1794C3 ::v24(){vfunc_called(this, "_ZN7S1794C33v24Ev");}
void  S1794C3 ::v25(){vfunc_called(this, "_ZN7S1794C33v25Ev");}
void  S1794C3 ::v26(){vfunc_called(this, "_ZN7S1794C33v26Ev");}
void  S1794C3 ::v27(){vfunc_called(this, "_ZN7S1794C33v27Ev");}
void  S1794C3 ::v28(){vfunc_called(this, "_ZN7S1794C33v28Ev");}
void  S1794C3 ::v29(){vfunc_called(this, "_ZN7S1794C33v29Ev");}
void  S1794C3 ::v30(){vfunc_called(this, "_ZN7S1794C33v30Ev");}
void  S1794C3 ::v31(){vfunc_called(this, "_ZN7S1794C33v31Ev");}
void  S1794C3 ::v32(){vfunc_called(this, "_ZN7S1794C33v32Ev");}
void  S1794C3 ::v33(){vfunc_called(this, "_ZN7S1794C33v33Ev");}
void  S1794C3 ::v34(){vfunc_called(this, "_ZN7S1794C33v34Ev");}
S1794C3 ::~S1794C3(){ note_dtor("S1794C3", this);} // tgen
S1794C3 ::S1794C3(){ note_ctor("S1794C3", this);} // tgen

static void Test_S1794C3()
{
  extern Class_Descriptor cd_S1794C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1794C3, buf);
    S1794C3 *dp, &lv = *(dp=new (buf) S1794C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1794C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1794C3)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S1794C3");
    test_class_info(&lv, &cd_S1794C3);
    dp->~S1794C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1794C3(Test_S1794C3, "S1794C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1794C3C1Ev();
extern void _ZN7S1794C3D1Ev();
Name_Map name_map_S1794C3[] = {
  NSPAIR(_ZN7S1794C3C1Ev),
  NSPAIR(_ZN7S1794C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S1794C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1794C3[];
extern void _ZN7S1794C3D1Ev();
extern void _ZN7S1794C3D0Ev();
extern void _ZN7S1794C32v3Ev();
extern void _ZN7S1794C32v4Ev();
extern void _ZN7S1794C32v5Ev();
extern void _ZN7S1794C32v6Ev();
extern void _ZN7S1794C32v7Ev();
extern void _ZN7S1794C32v8Ev();
extern void _ZN7S1794C32v9Ev();
extern void _ZN7S1794C33v10Ev();
extern void _ZN7S1794C33v11Ev();
extern void _ZN7S1794C33v12Ev();
extern void _ZN7S1794C33v13Ev();
extern void _ZN7S1794C33v14Ev();
extern void _ZN7S1794C33v15Ev();
extern void _ZN7S1794C33v16Ev();
extern void _ZN7S1794C33v17Ev();
extern void _ZN7S1794C33v18Ev();
extern void _ZN7S1794C33v19Ev();
extern void _ZN7S1794C33v20Ev();
extern void _ZN7S1794C33v21Ev();
extern void _ZN7S1794C33v22Ev();
extern void _ZN7S1794C33v23Ev();
extern void _ZN7S1794C33v24Ev();
extern void _ZN7S1794C33v25Ev();
extern void _ZN7S1794C33v26Ev();
extern void _ZN7S1794C33v27Ev();
extern void _ZN7S1794C33v28Ev();
extern void _ZN7S1794C33v29Ev();
extern void _ZN7S1794C33v30Ev();
extern void _ZN7S1794C33v31Ev();
extern void _ZN7S1794C33v32Ev();
extern void _ZN7S1794C33v33Ev();
extern void _ZN7S1794C33v34Ev();
static  VTBL_ENTRY vtc_S1794C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1794C3[0]),
  (VTBL_ENTRY)&_ZN7S1794C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1794C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v34Ev,
};
extern VTBL_ENTRY _ZTI7S1794C3[];
extern  VTBL_ENTRY _ZTV7S1794C3[];
Class_Descriptor cd_S1794C3 = {  "S1794C3", // class name
  bases_S1794C3, 1,
  &(vtc_S1794C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1794C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1794C3),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  S1794C2  : S1794C3 {
  virtual void  v35(); // _ZN7S1794C23v35Ev
  ~S1794C2(); // tgen
  S1794C2(); // tgen
};
//SIG(-1 S1794C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1}


void  S1794C2 ::v35(){vfunc_called(this, "_ZN7S1794C23v35Ev");}
S1794C2 ::~S1794C2(){ note_dtor("S1794C2", this);} // tgen
S1794C2 ::S1794C2(){ note_ctor("S1794C2", this);} // tgen

static void Test_S1794C2()
{
  extern Class_Descriptor cd_S1794C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1794C2, buf);
    S1794C2 *dp, &lv = *(dp=new (buf) S1794C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1794C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1794C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S1794C3*), 0, "S1794C2");
    check_base_class_offset(lv, (S1794C3*), 0, "S1794C2");
    test_class_info(&lv, &cd_S1794C2);
    dp->~S1794C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1794C2(Test_S1794C2, "S1794C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1794C2C1Ev();
extern void _ZN7S1794C2D1Ev();
Name_Map name_map_S1794C2[] = {
  NSPAIR(_ZN7S1794C2C1Ev),
  NSPAIR(_ZN7S1794C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1794C3;
extern VTBL_ENTRY _ZTI7S1794C3[];
extern  VTBL_ENTRY _ZTV7S1794C3[];
static Base_Class bases_S1794C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1794C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1794C2[];
extern void _ZN7S1794C2D1Ev();
extern void _ZN7S1794C2D0Ev();
extern void _ZN7S1794C32v3Ev();
extern void _ZN7S1794C32v4Ev();
extern void _ZN7S1794C32v5Ev();
extern void _ZN7S1794C32v6Ev();
extern void _ZN7S1794C32v7Ev();
extern void _ZN7S1794C32v8Ev();
extern void _ZN7S1794C32v9Ev();
extern void _ZN7S1794C33v10Ev();
extern void _ZN7S1794C33v11Ev();
extern void _ZN7S1794C33v12Ev();
extern void _ZN7S1794C33v13Ev();
extern void _ZN7S1794C33v14Ev();
extern void _ZN7S1794C33v15Ev();
extern void _ZN7S1794C33v16Ev();
extern void _ZN7S1794C33v17Ev();
extern void _ZN7S1794C33v18Ev();
extern void _ZN7S1794C33v19Ev();
extern void _ZN7S1794C33v20Ev();
extern void _ZN7S1794C33v21Ev();
extern void _ZN7S1794C33v22Ev();
extern void _ZN7S1794C33v23Ev();
extern void _ZN7S1794C33v24Ev();
extern void _ZN7S1794C33v25Ev();
extern void _ZN7S1794C33v26Ev();
extern void _ZN7S1794C33v27Ev();
extern void _ZN7S1794C33v28Ev();
extern void _ZN7S1794C33v29Ev();
extern void _ZN7S1794C33v30Ev();
extern void _ZN7S1794C33v31Ev();
extern void _ZN7S1794C33v32Ev();
extern void _ZN7S1794C33v33Ev();
extern void _ZN7S1794C33v34Ev();
extern void _ZN7S1794C23v35Ev();
static  VTBL_ENTRY vtc_S1794C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1794C2[0]),
  (VTBL_ENTRY)&_ZN7S1794C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1794C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1794C23v35Ev,
};
extern VTBL_ENTRY _ZTI7S1794C2[];
extern  VTBL_ENTRY _ZTV7S1794C2[];
Class_Descriptor cd_S1794C2 = {  "S1794C2", // class name
  bases_S1794C2, 2,
  &(vtc_S1794C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1794C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1794C2),37, //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  S1794C1  : S1794C2 {
  virtual void  v1(); // _ZN7S1794C12v1Ev
  virtual void  v2(); // _ZN7S1794C12v2Ev
  ~S1794C1(); // tgen
  S1794C1(); // tgen
};
//SIG(1 S1794C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1 v2}


void  S1794C1 ::v1(){vfunc_called(this, "_ZN7S1794C12v1Ev");}
void  S1794C1 ::v2(){vfunc_called(this, "_ZN7S1794C12v2Ev");}
S1794C1 ::~S1794C1(){ note_dtor("S1794C1", this);} // tgen
S1794C1 ::S1794C1(){ note_ctor("S1794C1", this);} // tgen

static void Test_S1794C1()
{
  extern Class_Descriptor cd_S1794C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1794C1, buf);
    S1794C1 *dp, &lv = *(dp=new (buf) S1794C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1794C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1794C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S1794C3*)(S1794C2*), 0, "S1794C1");
    check_base_class_offset(lv, (S1794C3*)(S1794C2*), 0, "S1794C1");
    check_base_class_offset(lv, (S1794C2*), 0, "S1794C1");
    test_class_info(&lv, &cd_S1794C1);
    dp->~S1794C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1794C1(Test_S1794C1, "S1794C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1794C1C1Ev();
extern void _ZN7S1794C1D1Ev();
Name_Map name_map_S1794C1[] = {
  NSPAIR(_ZN7S1794C1C1Ev),
  NSPAIR(_ZN7S1794C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1794C3;
extern VTBL_ENTRY _ZTI7S1794C3[];
extern  VTBL_ENTRY _ZTV7S1794C3[];
extern Class_Descriptor cd_S1794C2;
extern VTBL_ENTRY _ZTI7S1794C2[];
extern  VTBL_ENTRY _ZTV7S1794C2[];
static Base_Class bases_S1794C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1794C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1794C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1794C1[];
extern void _ZN7S1794C1D1Ev();
extern void _ZN7S1794C1D0Ev();
extern void _ZN7S1794C32v3Ev();
extern void _ZN7S1794C32v4Ev();
extern void _ZN7S1794C32v5Ev();
extern void _ZN7S1794C32v6Ev();
extern void _ZN7S1794C32v7Ev();
extern void _ZN7S1794C32v8Ev();
extern void _ZN7S1794C32v9Ev();
extern void _ZN7S1794C33v10Ev();
extern void _ZN7S1794C33v11Ev();
extern void _ZN7S1794C33v12Ev();
extern void _ZN7S1794C33v13Ev();
extern void _ZN7S1794C33v14Ev();
extern void _ZN7S1794C33v15Ev();
extern void _ZN7S1794C33v16Ev();
extern void _ZN7S1794C33v17Ev();
extern void _ZN7S1794C33v18Ev();
extern void _ZN7S1794C33v19Ev();
extern void _ZN7S1794C33v20Ev();
extern void _ZN7S1794C33v21Ev();
extern void _ZN7S1794C33v22Ev();
extern void _ZN7S1794C33v23Ev();
extern void _ZN7S1794C33v24Ev();
extern void _ZN7S1794C33v25Ev();
extern void _ZN7S1794C33v26Ev();
extern void _ZN7S1794C33v27Ev();
extern void _ZN7S1794C33v28Ev();
extern void _ZN7S1794C33v29Ev();
extern void _ZN7S1794C33v30Ev();
extern void _ZN7S1794C33v31Ev();
extern void _ZN7S1794C33v32Ev();
extern void _ZN7S1794C33v33Ev();
extern void _ZN7S1794C33v34Ev();
extern void _ZN7S1794C23v35Ev();
extern void _ZN7S1794C12v1Ev();
extern void _ZN7S1794C12v2Ev();
static  VTBL_ENTRY vtc_S1794C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1794C1[0]),
  (VTBL_ENTRY)&_ZN7S1794C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1794C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1794C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1794C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1794C23v35Ev,
  (VTBL_ENTRY)&_ZN7S1794C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1794C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1794C1[];
extern  VTBL_ENTRY _ZTV7S1794C1[];
Class_Descriptor cd_S1794C1 = {  "S1794C1", // class name
  bases_S1794C1, 3,
  &(vtc_S1794C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1794C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1794C1),39, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1782C3  : S1C11_nt {
  virtual void  v2(); // _ZN7S1782C32v2Ev
  virtual void  v3(); // _ZN7S1782C32v3Ev
  virtual void  v4(); // _ZN7S1782C32v4Ev
  virtual void  v5(); // _ZN7S1782C32v5Ev
  virtual void  v6(); // _ZN7S1782C32v6Ev
  virtual void  v7(); // _ZN7S1782C32v7Ev
  virtual void  v8(); // _ZN7S1782C32v8Ev
  virtual void  v9(); // _ZN7S1782C32v9Ev
  virtual void  v10(); // _ZN7S1782C33v10Ev
  virtual void  v11(); // _ZN7S1782C33v11Ev
  virtual void  v12(); // _ZN7S1782C33v12Ev
  virtual void  v13(); // _ZN7S1782C33v13Ev
  virtual void  v14(); // _ZN7S1782C33v14Ev
  virtual void  v15(); // _ZN7S1782C33v15Ev
  virtual void  v16(); // _ZN7S1782C33v16Ev
  virtual void  v17(); // _ZN7S1782C33v17Ev
  virtual void  v18(); // _ZN7S1782C33v18Ev
  virtual void  v19(); // _ZN7S1782C33v19Ev
  virtual void  v20(); // _ZN7S1782C33v20Ev
  virtual void  v21(); // _ZN7S1782C33v21Ev
  virtual void  v22(); // _ZN7S1782C33v22Ev
  virtual void  v23(); // _ZN7S1782C33v23Ev
  virtual void  v24(); // _ZN7S1782C33v24Ev
  virtual void  v25(); // _ZN7S1782C33v25Ev
  virtual void  v26(); // _ZN7S1782C33v26Ev
  virtual void  v27(); // _ZN7S1782C33v27Ev
  virtual void  v28(); // _ZN7S1782C33v28Ev
  virtual void  v29(); // _ZN7S1782C33v29Ev
  virtual void  v30(); // _ZN7S1782C33v30Ev
  virtual void  v31(); // _ZN7S1782C33v31Ev
  virtual void  v32(); // _ZN7S1782C33v32Ev
  virtual void  v33(); // _ZN7S1782C33v33Ev
  ~S1782C3(); // tgen
  S1782C3(); // tgen
};
//SIG(-1 S1782C3) C1{ BC2{ vd m Fp Fi} 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}


void  S1782C3 ::v2(){vfunc_called(this, "_ZN7S1782C32v2Ev");}
void  S1782C3 ::v3(){vfunc_called(this, "_ZN7S1782C32v3Ev");}
void  S1782C3 ::v4(){vfunc_called(this, "_ZN7S1782C32v4Ev");}
void  S1782C3 ::v5(){vfunc_called(this, "_ZN7S1782C32v5Ev");}
void  S1782C3 ::v6(){vfunc_called(this, "_ZN7S1782C32v6Ev");}
void  S1782C3 ::v7(){vfunc_called(this, "_ZN7S1782C32v7Ev");}
void  S1782C3 ::v8(){vfunc_called(this, "_ZN7S1782C32v8Ev");}
void  S1782C3 ::v9(){vfunc_called(this, "_ZN7S1782C32v9Ev");}
void  S1782C3 ::v10(){vfunc_called(this, "_ZN7S1782C33v10Ev");}
void  S1782C3 ::v11(){vfunc_called(this, "_ZN7S1782C33v11Ev");}
void  S1782C3 ::v12(){vfunc_called(this, "_ZN7S1782C33v12Ev");}
void  S1782C3 ::v13(){vfunc_called(this, "_ZN7S1782C33v13Ev");}
void  S1782C3 ::v14(){vfunc_called(this, "_ZN7S1782C33v14Ev");}
void  S1782C3 ::v15(){vfunc_called(this, "_ZN7S1782C33v15Ev");}
void  S1782C3 ::v16(){vfunc_called(this, "_ZN7S1782C33v16Ev");}
void  S1782C3 ::v17(){vfunc_called(this, "_ZN7S1782C33v17Ev");}
void  S1782C3 ::v18(){vfunc_called(this, "_ZN7S1782C33v18Ev");}
void  S1782C3 ::v19(){vfunc_called(this, "_ZN7S1782C33v19Ev");}
void  S1782C3 ::v20(){vfunc_called(this, "_ZN7S1782C33v20Ev");}
void  S1782C3 ::v21(){vfunc_called(this, "_ZN7S1782C33v21Ev");}
void  S1782C3 ::v22(){vfunc_called(this, "_ZN7S1782C33v22Ev");}
void  S1782C3 ::v23(){vfunc_called(this, "_ZN7S1782C33v23Ev");}
void  S1782C3 ::v24(){vfunc_called(this, "_ZN7S1782C33v24Ev");}
void  S1782C3 ::v25(){vfunc_called(this, "_ZN7S1782C33v25Ev");}
void  S1782C3 ::v26(){vfunc_called(this, "_ZN7S1782C33v26Ev");}
void  S1782C3 ::v27(){vfunc_called(this, "_ZN7S1782C33v27Ev");}
void  S1782C3 ::v28(){vfunc_called(this, "_ZN7S1782C33v28Ev");}
void  S1782C3 ::v29(){vfunc_called(this, "_ZN7S1782C33v29Ev");}
void  S1782C3 ::v30(){vfunc_called(this, "_ZN7S1782C33v30Ev");}
void  S1782C3 ::v31(){vfunc_called(this, "_ZN7S1782C33v31Ev");}
void  S1782C3 ::v32(){vfunc_called(this, "_ZN7S1782C33v32Ev");}
void  S1782C3 ::v33(){vfunc_called(this, "_ZN7S1782C33v33Ev");}
S1782C3 ::~S1782C3(){ note_dtor("S1782C3", this);} // tgen
S1782C3 ::S1782C3(){ note_ctor("S1782C3", this);} // tgen

static void Test_S1782C3()
{
  extern Class_Descriptor cd_S1782C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1782C3, buf);
    S1782C3 *dp, &lv = *(dp=new (buf) S1782C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1782C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1782C3)");
    check_base_class_offset(lv, (S1C11_nt*), 0, "S1782C3");
    test_class_info(&lv, &cd_S1782C3);
    dp->~S1782C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1782C3(Test_S1782C3, "S1782C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1782C3C1Ev();
extern void _ZN7S1782C3D1Ev();
Name_Map name_map_S1782C3[] = {
  NSPAIR(_ZN7S1782C3C1Ev),
  NSPAIR(_ZN7S1782C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
static Base_Class bases_S1782C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1782C3[];
extern void _ZN7S1782C3D1Ev();
extern void _ZN7S1782C3D0Ev();
extern void _ZN7S1782C32v2Ev();
extern void _ZN7S1782C32v3Ev();
extern void _ZN7S1782C32v4Ev();
extern void _ZN7S1782C32v5Ev();
extern void _ZN7S1782C32v6Ev();
extern void _ZN7S1782C32v7Ev();
extern void _ZN7S1782C32v8Ev();
extern void _ZN7S1782C32v9Ev();
extern void _ZN7S1782C33v10Ev();
extern void _ZN7S1782C33v11Ev();
extern void _ZN7S1782C33v12Ev();
extern void _ZN7S1782C33v13Ev();
extern void _ZN7S1782C33v14Ev();
extern void _ZN7S1782C33v15Ev();
extern void _ZN7S1782C33v16Ev();
extern void _ZN7S1782C33v17Ev();
extern void _ZN7S1782C33v18Ev();
extern void _ZN7S1782C33v19Ev();
extern void _ZN7S1782C33v20Ev();
extern void _ZN7S1782C33v21Ev();
extern void _ZN7S1782C33v22Ev();
extern void _ZN7S1782C33v23Ev();
extern void _ZN7S1782C33v24Ev();
extern void _ZN7S1782C33v25Ev();
extern void _ZN7S1782C33v26Ev();
extern void _ZN7S1782C33v27Ev();
extern void _ZN7S1782C33v28Ev();
extern void _ZN7S1782C33v29Ev();
extern void _ZN7S1782C33v30Ev();
extern void _ZN7S1782C33v31Ev();
extern void _ZN7S1782C33v32Ev();
extern void _ZN7S1782C33v33Ev();
static  VTBL_ENTRY vtc_S1782C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1782C3[0]),
  (VTBL_ENTRY)&_ZN7S1782C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1782C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v33Ev,
};
extern VTBL_ENTRY _ZTI7S1782C3[];
extern  VTBL_ENTRY _ZTV7S1782C3[];
Class_Descriptor cd_S1782C3 = {  "S1782C3", // class name
  bases_S1782C3, 1,
  &(vtc_S1782C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1782C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1782C3),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  S1782C2  : S1782C3 {
  virtual void  v34(); // _ZN7S1782C23v34Ev
  ~S1782C2(); // tgen
  S1782C2(); // tgen
};
//SIG(-1 S1782C2) C1{ BC2{ BC3{ vd m Fp Fi} 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} v1}


void  S1782C2 ::v34(){vfunc_called(this, "_ZN7S1782C23v34Ev");}
S1782C2 ::~S1782C2(){ note_dtor("S1782C2", this);} // tgen
S1782C2 ::S1782C2(){ note_ctor("S1782C2", this);} // tgen

static void Test_S1782C2()
{
  extern Class_Descriptor cd_S1782C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1782C2, buf);
    S1782C2 *dp, &lv = *(dp=new (buf) S1782C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1782C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1782C2)");
    check_base_class_offset(lv, (S1C11_nt*)(S1782C3*), 0, "S1782C2");
    check_base_class_offset(lv, (S1782C3*), 0, "S1782C2");
    test_class_info(&lv, &cd_S1782C2);
    dp->~S1782C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1782C2(Test_S1782C2, "S1782C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1782C2C1Ev();
extern void _ZN7S1782C2D1Ev();
Name_Map name_map_S1782C2[] = {
  NSPAIR(_ZN7S1782C2C1Ev),
  NSPAIR(_ZN7S1782C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1782C3;
extern VTBL_ENTRY _ZTI7S1782C3[];
extern  VTBL_ENTRY _ZTV7S1782C3[];
static Base_Class bases_S1782C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1782C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1782C2[];
extern void _ZN7S1782C2D1Ev();
extern void _ZN7S1782C2D0Ev();
extern void _ZN7S1782C32v2Ev();
extern void _ZN7S1782C32v3Ev();
extern void _ZN7S1782C32v4Ev();
extern void _ZN7S1782C32v5Ev();
extern void _ZN7S1782C32v6Ev();
extern void _ZN7S1782C32v7Ev();
extern void _ZN7S1782C32v8Ev();
extern void _ZN7S1782C32v9Ev();
extern void _ZN7S1782C33v10Ev();
extern void _ZN7S1782C33v11Ev();
extern void _ZN7S1782C33v12Ev();
extern void _ZN7S1782C33v13Ev();
extern void _ZN7S1782C33v14Ev();
extern void _ZN7S1782C33v15Ev();
extern void _ZN7S1782C33v16Ev();
extern void _ZN7S1782C33v17Ev();
extern void _ZN7S1782C33v18Ev();
extern void _ZN7S1782C33v19Ev();
extern void _ZN7S1782C33v20Ev();
extern void _ZN7S1782C33v21Ev();
extern void _ZN7S1782C33v22Ev();
extern void _ZN7S1782C33v23Ev();
extern void _ZN7S1782C33v24Ev();
extern void _ZN7S1782C33v25Ev();
extern void _ZN7S1782C33v26Ev();
extern void _ZN7S1782C33v27Ev();
extern void _ZN7S1782C33v28Ev();
extern void _ZN7S1782C33v29Ev();
extern void _ZN7S1782C33v30Ev();
extern void _ZN7S1782C33v31Ev();
extern void _ZN7S1782C33v32Ev();
extern void _ZN7S1782C33v33Ev();
extern void _ZN7S1782C23v34Ev();
static  VTBL_ENTRY vtc_S1782C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1782C2[0]),
  (VTBL_ENTRY)&_ZN7S1782C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1782C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1782C23v34Ev,
};
extern VTBL_ENTRY _ZTI7S1782C2[];
extern  VTBL_ENTRY _ZTV7S1782C2[];
Class_Descriptor cd_S1782C2 = {  "S1782C2", // class name
  bases_S1782C2, 2,
  &(vtc_S1782C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1782C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1782C2),37, //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  S1782C1  : S1782C2 {
  virtual void  v1(); // _ZN7S1782C12v1Ev
  ~S1782C1(); // tgen
  S1782C1(); // tgen
};
//SIG(1 S1782C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} 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} v1}


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

static void Test_S1782C1()
{
  extern Class_Descriptor cd_S1782C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1782C1, buf);
    S1782C1 *dp, &lv = *(dp=new (buf) S1782C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1782C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1782C1)");
    check_base_class_offset(lv, (S1C11_nt*)(S1782C3*)(S1782C2*), 0, "S1782C1");
    check_base_class_offset(lv, (S1782C3*)(S1782C2*), 0, "S1782C1");
    check_base_class_offset(lv, (S1782C2*), 0, "S1782C1");
    test_class_info(&lv, &cd_S1782C1);
    dp->~S1782C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1782C1(Test_S1782C1, "S1782C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1782C1C1Ev();
extern void _ZN7S1782C1D1Ev();
Name_Map name_map_S1782C1[] = {
  NSPAIR(_ZN7S1782C1C1Ev),
  NSPAIR(_ZN7S1782C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1C11_nt;
extern VTBL_ENTRY _ZTI8S1C11_nt[];
extern  VTBL_ENTRY _ZTV8S1C11_nt[];
extern Class_Descriptor cd_S1782C3;
extern VTBL_ENTRY _ZTI7S1782C3[];
extern  VTBL_ENTRY _ZTV7S1782C3[];
extern Class_Descriptor cd_S1782C2;
extern VTBL_ENTRY _ZTI7S1782C2[];
extern  VTBL_ENTRY _ZTV7S1782C2[];
static Base_Class bases_S1782C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1782C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1782C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1782C1[];
extern void _ZN7S1782C1D1Ev();
extern void _ZN7S1782C1D0Ev();
extern void _ZN7S1782C32v2Ev();
extern void _ZN7S1782C32v3Ev();
extern void _ZN7S1782C32v4Ev();
extern void _ZN7S1782C32v5Ev();
extern void _ZN7S1782C32v6Ev();
extern void _ZN7S1782C32v7Ev();
extern void _ZN7S1782C32v8Ev();
extern void _ZN7S1782C32v9Ev();
extern void _ZN7S1782C33v10Ev();
extern void _ZN7S1782C33v11Ev();
extern void _ZN7S1782C33v12Ev();
extern void _ZN7S1782C33v13Ev();
extern void _ZN7S1782C33v14Ev();
extern void _ZN7S1782C33v15Ev();
extern void _ZN7S1782C33v16Ev();
extern void _ZN7S1782C33v17Ev();
extern void _ZN7S1782C33v18Ev();
extern void _ZN7S1782C33v19Ev();
extern void _ZN7S1782C33v20Ev();
extern void _ZN7S1782C33v21Ev();
extern void _ZN7S1782C33v22Ev();
extern void _ZN7S1782C33v23Ev();
extern void _ZN7S1782C33v24Ev();
extern void _ZN7S1782C33v25Ev();
extern void _ZN7S1782C33v26Ev();
extern void _ZN7S1782C33v27Ev();
extern void _ZN7S1782C33v28Ev();
extern void _ZN7S1782C33v29Ev();
extern void _ZN7S1782C33v30Ev();
extern void _ZN7S1782C33v31Ev();
extern void _ZN7S1782C33v32Ev();
extern void _ZN7S1782C33v33Ev();
extern void _ZN7S1782C23v34Ev();
extern void _ZN7S1782C12v1Ev();
static  VTBL_ENTRY vtc_S1782C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1782C1[0]),
  (VTBL_ENTRY)&_ZN7S1782C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1782C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1782C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1782C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1782C23v34Ev,
  (VTBL_ENTRY)&_ZN7S1782C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1782C1[];
extern  VTBL_ENTRY _ZTV7S1782C1[];
Class_Descriptor cd_S1782C1 = {  "S1782C1", // class name
  bases_S1782C1, 3,
  &(vtc_S1782C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1782C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1782C1),38, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17448C3_nt  {
  void *s17448c3f0[2];
  void  mf17448c3(); // _ZN11S17448C3_nt9mf17448c3Ev
};
//SIG(-1 S17448C3_nt) C1{ m Fp[2]}


void  S17448C3_nt ::mf17448c3(){}

//skip512 S17448C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17448C5_nt  {
  __tsi64 s17448c5f0;
};
//SIG(-1 S17448C5_nt) C1{ FL}



//skip512 S17448C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17448C6  {
  void *s17448c6f0[2];
  void  mf17448c6(); // _ZN8S17448C69mf17448c6Ev
};
//SIG(-1 S17448C6) C1{ m Fp[2]}


void  S17448C6 ::mf17448c6(){}

static void Test_S17448C6()
{
  {
    init_simple_test("S17448C6");
    S17448C6 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S17448C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17448C6)");
    check_field_offset(lv, s17448c6f0, 0, "S17448C6.s17448c6f0");
  }
}
static Arrange_To_Call_Me vS17448C6(Test_S17448C6, "S17448C6", ABISELECT(16,8));

#else // __cplusplus

Class_Descriptor cd_S17448C6 = {  "S17448C6", // 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  S17448C1  {
  void *s17448c1f0;
  char s17448c1f1;
  int s17448c1f2[2];
  ::S1474C10_nt s17448c1f3;
  int s17448c1f4;
  ::S17448C3_nt s17448c1f5;
  ::S17448C3_nt s17448c1f6;
  ::S17448C3_nt s17448c1f7;
  ::S17448C3_nt s17448c1f8;
  ::S17448C5_nt s17448c1f9;
  ::S17448C5_nt s17448c1f10;
  ::S17448C5_nt s17448c1f11;
  ::S17448C5_nt s17448c1f12;
  ::S17448C5_nt s17448c1f13;
  ::S17448C6 s17448c1f14;
  ::S2355C13_nt s17448c1f15;
  ::S2355C13_nt s17448c1f16;
  int s17448c1f17;
  char s17448c1f18[4];
  int s17448c1f19[6];
  ::S17448C3_nt s17448c1f20;
  ::S2355C13_nt s17448c1f21;
  char s17448c1f22;
  __tsi64 s17448c1f23;
  int s17448c1f24;
  char s17448c1f25;
  void  mf17448c1(); // _ZN8S17448C19mf17448c1Ev
};
//SIG(1 S17448C1) C1{ m Fp Fc Fi[2] FC2{ m Fi[4]} Fi FC3{ m Fp[2]} FC3 FC3 FC3 FC4{ FL} FC4 FC4 FC4 FC4 FC5{ m Fp[2]} FC6{ m FL[4]} FC6 Fi Fc[4] Fi[6] FC3 FC6 Fc FL Fi Fc}


void  S17448C1 ::mf17448c1(){}

static void Test_S17448C1()
{
  {
    init_simple_test("S17448C1");
    S17448C1 lv;
    check2(sizeof(lv), ABISELECT(328,272), "sizeof(S17448C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17448C1)");
    check_field_offset(lv, s17448c1f0, 0, "S17448C1.s17448c1f0");
    check_field_offset(lv, s17448c1f1, ABISELECT(8,4), "S17448C1.s17448c1f1");
    check_field_offset(lv, s17448c1f2, ABISELECT(12,8), "S17448C1.s17448c1f2");
    check_field_offset(lv, s17448c1f3, ABISELECT(20,16), "S17448C1.s17448c1f3");
    check_field_offset(lv, s17448c1f4, ABISELECT(36,32), "S17448C1.s17448c1f4");
    check_field_offset(lv, s17448c1f5, ABISELECT(40,36), "S17448C1.s17448c1f5");
    check_field_offset(lv, s17448c1f6, ABISELECT(56,44), "S17448C1.s17448c1f6");
    check_field_offset(lv, s17448c1f7, ABISELECT(72,52), "S17448C1.s17448c1f7");
    check_field_offset(lv, s17448c1f8, ABISELECT(88,60), "S17448C1.s17448c1f8");
    check_field_offset(lv, s17448c1f9, ABISELECT(104,68), "S17448C1.s17448c1f9");
    check_field_offset(lv, s17448c1f10, ABISELECT(112,76), "S17448C1.s17448c1f10");
    check_field_offset(lv, s17448c1f11, ABISELECT(120,84), "S17448C1.s17448c1f11");
    check_field_offset(lv, s17448c1f12, ABISELECT(128,92), "S17448C1.s17448c1f12");
    check_field_offset(lv, s17448c1f13, ABISELECT(136,100), "S17448C1.s17448c1f13");
    check_field_offset(lv, s17448c1f14, ABISELECT(144,108), "S17448C1.s17448c1f14");
    check_field_offset(lv, s17448c1f15, ABISELECT(160,116), "S17448C1.s17448c1f15");
    check_field_offset(lv, s17448c1f16, ABISELECT(192,148), "S17448C1.s17448c1f16");
    check_field_offset(lv, s17448c1f17, ABISELECT(224,180), "S17448C1.s17448c1f17");
    check_field_offset(lv, s17448c1f18, ABISELECT(228,184), "S17448C1.s17448c1f18");
    check_field_offset(lv, s17448c1f19, ABISELECT(232,188), "S17448C1.s17448c1f19");
    check_field_offset(lv, s17448c1f20, ABISELECT(256,212), "S17448C1.s17448c1f20");
    check_field_offset(lv, s17448c1f21, ABISELECT(272,220), "S17448C1.s17448c1f21");
    check_field_offset(lv, s17448c1f22, ABISELECT(304,252), "S17448C1.s17448c1f22");
    check_field_offset(lv, s17448c1f23, ABISELECT(312,256), "S17448C1.s17448c1f23");
    check_field_offset(lv, s17448c1f24, ABISELECT(320,264), "S17448C1.s17448c1f24");
    check_field_offset(lv, s17448c1f25, ABISELECT(324,268), "S17448C1.s17448c1f25");
  }
}
static Arrange_To_Call_Me vS17448C1(Test_S17448C1, "S17448C1", ABISELECT(328,272));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3979C4_nt  : S807C5_nt {
  virtual  ~S3979C4_nt(); // _ZN10S3979C4_ntD1Ev
  virtual void  v4(); // _ZN10S3979C4_nt2v4Ev
  S3979C4_nt(); // tgen
};
//SIG(-1 S3979C4_nt) C1{ BC2{ vd m} vd v1}


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

//skip512 S3979C4_nt

#else // __cplusplus

extern void _ZN10S3979C4_ntC1Ev();
extern void _ZN10S3979C4_ntD1Ev();
Name_Map name_map_S3979C4_nt[] = {
  NSPAIR(_ZN10S3979C4_ntC1Ev),
  NSPAIR(_ZN10S3979C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
static Base_Class bases_S3979C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S807C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI10S3979C4_nt[];
extern void _ZN10S3979C4_ntD1Ev();
extern void _ZN10S3979C4_ntD0Ev();
extern void _ZN10S3979C4_nt2v4Ev();
static  VTBL_ENTRY vtc_S3979C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3979C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S3979C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3979C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3979C4_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI10S3979C4_nt[];
VTBL_ENTRY *P__ZTI10S3979C4_nt = _ZTI10S3979C4_nt; 
extern  VTBL_ENTRY _ZTV10S3979C4_nt[];
Class_Descriptor cd_S3979C4_nt = {  "S3979C4_nt", // class name
  bases_S3979C4_nt, 1,
  &(vtc_S3979C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S3979C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3979C4_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  S3979C2_nt  : S807C5_nt , S3979C4_nt {
  virtual void  v5(); // _ZN10S3979C2_nt2v5Ev
  virtual void  v6(); // _ZN10S3979C2_nt2v6Ev
  ~S3979C2_nt(); // tgen
  S3979C2_nt(); // tgen
};
//SIG(-1 S3979C2_nt) C1{ BC2{ vd m} BC3{ BC2 vd v3} v1 v2}


void  S3979C2_nt ::v5(){vfunc_called(this, "_ZN10S3979C2_nt2v5Ev");}
void  S3979C2_nt ::v6(){vfunc_called(this, "_ZN10S3979C2_nt2v6Ev");}
S3979C2_nt ::~S3979C2_nt(){ note_dtor("S3979C2_nt", this);} // tgen
S3979C2_nt ::S3979C2_nt(){ note_ctor("S3979C2_nt", this);} // tgen

//skip512 S3979C2_nt

#else // __cplusplus

extern void _ZN10S3979C2_ntC1Ev();
extern void _ZN10S3979C2_ntD1Ev();
Name_Map name_map_S3979C2_nt[] = {
  NSPAIR(_ZN10S3979C2_ntC1Ev),
  NSPAIR(_ZN10S3979C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
extern Class_Descriptor cd_S3979C4_nt;
extern VTBL_ENTRY _ZTI10S3979C4_nt[];
extern  VTBL_ENTRY _ZTV10S3979C4_nt[];
static Base_Class bases_S3979C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S807C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S807C5_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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3979C4_nt,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S3979C2_nt[];
extern void _ZN10S3979C2_ntD1Ev();
extern void _ZN10S3979C2_ntD0Ev();
extern void _ZN10S3979C2_nt2v5Ev();
extern void _ZN10S3979C2_nt2v6Ev();
extern void ABISELECT(_ZThn8_N10S3979C2_ntD1Ev,_ZThn4_N10S3979C2_ntD1Ev)();
extern void ABISELECT(_ZThn8_N10S3979C2_ntD0Ev,_ZThn4_N10S3979C2_ntD0Ev)();
extern void _ZN10S3979C4_nt2v4Ev();
static  VTBL_ENTRY vtc_S3979C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3979C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3979C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3979C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3979C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3979C2_nt2v6Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI10S3979C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N10S3979C2_ntD1Ev,_ZThn4_N10S3979C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N10S3979C2_ntD0Ev,_ZThn4_N10S3979C2_ntD0Ev),
  (VTBL_ENTRY)&_ZN10S3979C4_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI10S3979C2_nt[];
VTBL_ENTRY *P__ZTI10S3979C2_nt = _ZTI10S3979C2_nt; 
extern  VTBL_ENTRY _ZTV10S3979C2_nt[];
Class_Descriptor cd_S3979C2_nt = {  "S3979C2_nt", // class name
  bases_S3979C2_nt, 3,
  &(vtc_S3979C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S3979C2_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S3979C2_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3979C7  : S807C5_nt {
  virtual  ~S3979C7(); // _ZN7S3979C7D1Ev
  virtual void  v15(); // _ZN7S3979C73v15Ev
  S3979C7(); // tgen
};
//SIG(-1 S3979C7) C1{ BC2{ vd m} vd v1}


 S3979C7 ::~S3979C7(){ note_dtor("S3979C7", this);}
void  S3979C7 ::v15(){vfunc_called(this, "_ZN7S3979C73v15Ev");}
S3979C7 ::S3979C7(){ note_ctor("S3979C7", this);} // tgen

static void Test_S3979C7()
{
  extern Class_Descriptor cd_S3979C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3979C7, buf);
    S3979C7 *dp, &lv = *(dp=new (buf) S3979C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3979C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3979C7)");
    check_base_class_offset(lv, (S807C5_nt*), 0, "S3979C7");
    test_class_info(&lv, &cd_S3979C7);
    dp->~S3979C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3979C7(Test_S3979C7, "S3979C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3979C7C1Ev();
extern void _ZN7S3979C7D1Ev();
Name_Map name_map_S3979C7[] = {
  NSPAIR(_ZN7S3979C7C1Ev),
  NSPAIR(_ZN7S3979C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
static Base_Class bases_S3979C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S807C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S3979C7[];
extern void _ZN7S3979C7D1Ev();
extern void _ZN7S3979C7D0Ev();
extern void _ZN7S3979C73v15Ev();
static  VTBL_ENTRY vtc_S3979C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3979C7[0]),
  (VTBL_ENTRY)&_ZN7S3979C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3979C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3979C73v15Ev,
};
extern VTBL_ENTRY _ZTI7S3979C7[];
extern  VTBL_ENTRY _ZTV7S3979C7[];
Class_Descriptor cd_S3979C7 = {  "S3979C7", // class name
  bases_S3979C7, 1,
  &(vtc_S3979C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3979C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3979C7),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  S3979C6_nt  : S807C5_nt , S3979C4_nt , S3979C7 {
  virtual  ~S3979C6_nt(); // _ZN10S3979C6_ntD1Ev
  virtual void  v16(); // _ZN10S3979C6_nt3v16Ev
  virtual void  v17(); // _ZN10S3979C6_nt3v17Ev
  virtual void  v18(); // _ZN10S3979C6_nt3v18Ev
  virtual void  v19(); // _ZN10S3979C6_nt3v19Ev
  virtual void  v20(); // _ZN10S3979C6_nt3v20Ev
  virtual void  v21(); // _ZN10S3979C6_nt3v21Ev
  S3979C6_nt(); // tgen
};
//SIG(-1 S3979C6_nt) C1{ BC2{ vd m} BC3{ BC2 vd v7} BC4{ BC2 vd v8} vd v1 v2 v3 v4 v5 v6}


 S3979C6_nt ::~S3979C6_nt(){ note_dtor("S3979C6_nt", this);}
void  S3979C6_nt ::v16(){vfunc_called(this, "_ZN10S3979C6_nt3v16Ev");}
void  S3979C6_nt ::v17(){vfunc_called(this, "_ZN10S3979C6_nt3v17Ev");}
void  S3979C6_nt ::v18(){vfunc_called(this, "_ZN10S3979C6_nt3v18Ev");}
void  S3979C6_nt ::v19(){vfunc_called(this, "_ZN10S3979C6_nt3v19Ev");}
void  S3979C6_nt ::v20(){vfunc_called(this, "_ZN10S3979C6_nt3v20Ev");}
void  S3979C6_nt ::v21(){vfunc_called(this, "_ZN10S3979C6_nt3v21Ev");}
S3979C6_nt ::S3979C6_nt(){ note_ctor("S3979C6_nt", this);} // tgen

//skip512 S3979C6_nt

#else // __cplusplus

extern void _ZN10S3979C6_ntC1Ev();
extern void _ZN10S3979C6_ntD1Ev();
Name_Map name_map_S3979C6_nt[] = {
  NSPAIR(_ZN10S3979C6_ntC1Ev),
  NSPAIR(_ZN10S3979C6_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
extern Class_Descriptor cd_S3979C4_nt;
extern VTBL_ENTRY _ZTI10S3979C4_nt[];
extern  VTBL_ENTRY _ZTV10S3979C4_nt[];
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
extern Class_Descriptor cd_S3979C7;
extern VTBL_ENTRY _ZTI7S3979C7[];
extern  VTBL_ENTRY _ZTV7S3979C7[];
static Base_Class bases_S3979C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S807C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S807C5_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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3979C4_nt,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S807C5_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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3979C7,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_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 _ZTI10S3979C6_nt[];
extern void _ZN10S3979C6_ntD1Ev();
extern void _ZN10S3979C6_ntD0Ev();
extern void _ZN10S3979C6_nt3v16Ev();
extern void _ZN10S3979C6_nt3v17Ev();
extern void _ZN10S3979C6_nt3v18Ev();
extern void _ZN10S3979C6_nt3v19Ev();
extern void _ZN10S3979C6_nt3v20Ev();
extern void _ZN10S3979C6_nt3v21Ev();
extern void ABISELECT(_ZThn8_N10S3979C6_ntD1Ev,_ZThn4_N10S3979C6_ntD1Ev)();
extern void ABISELECT(_ZThn8_N10S3979C6_ntD0Ev,_ZThn4_N10S3979C6_ntD0Ev)();
extern void _ZN10S3979C4_nt2v4Ev();
extern void ABISELECT(_ZThn16_N10S3979C6_ntD1Ev,_ZThn8_N10S3979C6_ntD1Ev)();
extern void ABISELECT(_ZThn16_N10S3979C6_ntD0Ev,_ZThn8_N10S3979C6_ntD0Ev)();
extern void _ZN7S3979C73v15Ev();
static  VTBL_ENTRY vtc_S3979C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3979C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S3979C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3979C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3979C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3979C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3979C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3979C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3979C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3979C6_nt3v21Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI10S3979C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N10S3979C6_ntD1Ev,_ZThn4_N10S3979C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N10S3979C6_ntD0Ev,_ZThn4_N10S3979C6_ntD0Ev),
  (VTBL_ENTRY)&_ZN10S3979C4_nt2v4Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI10S3979C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N10S3979C6_ntD1Ev,_ZThn8_N10S3979C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N10S3979C6_ntD0Ev,_ZThn8_N10S3979C6_ntD0Ev),
  (VTBL_ENTRY)&_ZN7S3979C73v15Ev,
};
extern VTBL_ENTRY _ZTI10S3979C6_nt[];
VTBL_ENTRY *P__ZTI10S3979C6_nt = _ZTI10S3979C6_nt; 
extern  VTBL_ENTRY _ZTV10S3979C6_nt[];
Class_Descriptor cd_S3979C6_nt = {  "S3979C6_nt", // class name
  bases_S3979C6_nt, 5,
  &(vtc_S3979C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S3979C6_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV10S3979C6_nt),20, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3979C5  : S3979C6_nt {
  void *s3979c5f0;
  long s3979c5f1[3];
  virtual  ~S3979C5(); // _ZN7S3979C5D1Ev
  virtual void  v7(); // _ZN7S3979C52v7Ev
  virtual void  v8(); // _ZN7S3979C52v8Ev
  virtual void  v9(); // _ZN7S3979C52v9Ev
  virtual void  v10(); // _ZN7S3979C53v10Ev
  virtual void  v11(); // _ZN7S3979C53v11Ev
  virtual void  v12(); // _ZN7S3979C53v12Ev
  virtual void  v13(); // _ZN7S3979C53v13Ev
  virtual void  v14(); // _ZN7S3979C53v14Ev
  S3979C5(); // tgen
};
//SIG(-1 S3979C5) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v9} BC5{ BC3 vd v10} vd v11 v12 v13 v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp Fl[3]}


 S3979C5 ::~S3979C5(){ note_dtor("S3979C5", this);}
void  S3979C5 ::v7(){vfunc_called(this, "_ZN7S3979C52v7Ev");}
void  S3979C5 ::v8(){vfunc_called(this, "_ZN7S3979C52v8Ev");}
void  S3979C5 ::v9(){vfunc_called(this, "_ZN7S3979C52v9Ev");}
void  S3979C5 ::v10(){vfunc_called(this, "_ZN7S3979C53v10Ev");}
void  S3979C5 ::v11(){vfunc_called(this, "_ZN7S3979C53v11Ev");}
void  S3979C5 ::v12(){vfunc_called(this, "_ZN7S3979C53v12Ev");}
void  S3979C5 ::v13(){vfunc_called(this, "_ZN7S3979C53v13Ev");}
void  S3979C5 ::v14(){vfunc_called(this, "_ZN7S3979C53v14Ev");}
S3979C5 ::S3979C5(){ note_ctor("S3979C5", this);} // tgen

static void Test_S3979C5()
{
  extern Class_Descriptor cd_S3979C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S3979C5, buf);
    S3979C5 *dp, &lv = *(dp=new (buf) S3979C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S3979C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3979C5)");
    /*is_ambiguous_... S3979C6_nt::S807C5_nt */ AMB_check_base_class_offset(lv, (S807C5_nt*)(S3979C6_nt*), 0, "S3979C5");
    check_base_class_offset(lv, (S807C5_nt*)(S3979C4_nt*)(S3979C6_nt*), ABISELECT(8,4), "S3979C5");
    check_base_class_offset(lv, (S3979C4_nt*)(S3979C6_nt*), ABISELECT(8,4), "S3979C5");
    check_base_class_offset(lv, (S807C5_nt*)(S3979C7*)(S3979C6_nt*), ABISELECT(16,8), "S3979C5");
    check_base_class_offset(lv, (S3979C7*)(S3979C6_nt*), ABISELECT(16,8), "S3979C5");
    check_base_class_offset(lv, (S3979C6_nt*), 0, "S3979C5");
    check_field_offset(lv, s3979c5f0, ABISELECT(24,12), "S3979C5.s3979c5f0");
    check_field_offset(lv, s3979c5f1, ABISELECT(32,16), "S3979C5.s3979c5f1");
    test_class_info(&lv, &cd_S3979C5);
    dp->~S3979C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3979C5(Test_S3979C5, "S3979C5", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S3979C5C1Ev();
extern void _ZN7S3979C5D1Ev();
Name_Map name_map_S3979C5[] = {
  NSPAIR(_ZN7S3979C5C1Ev),
  NSPAIR(_ZN7S3979C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
extern Class_Descriptor cd_S3979C4_nt;
extern VTBL_ENTRY _ZTI10S3979C4_nt[];
extern  VTBL_ENTRY _ZTV10S3979C4_nt[];
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
extern Class_Descriptor cd_S3979C7;
extern VTBL_ENTRY _ZTI7S3979C7[];
extern  VTBL_ENTRY _ZTV7S3979C7[];
extern Class_Descriptor cd_S3979C6_nt;
extern VTBL_ENTRY _ZTI10S3979C6_nt[];
extern  VTBL_ENTRY _ZTV10S3979C6_nt[];
static Base_Class bases_S3979C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S807C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S807C5_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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3979C4_nt,    ABISELECT(8,4), //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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S807C5_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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3979C7,    ABISELECT(16,8), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3979C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3979C5[];
extern void _ZN7S3979C5D1Ev();
extern void _ZN7S3979C5D0Ev();
extern void _ZN10S3979C6_nt3v16Ev();
extern void _ZN10S3979C6_nt3v17Ev();
extern void _ZN10S3979C6_nt3v18Ev();
extern void _ZN10S3979C6_nt3v19Ev();
extern void _ZN10S3979C6_nt3v20Ev();
extern void _ZN10S3979C6_nt3v21Ev();
extern void _ZN7S3979C52v7Ev();
extern void _ZN7S3979C52v8Ev();
extern void _ZN7S3979C52v9Ev();
extern void _ZN7S3979C53v10Ev();
extern void _ZN7S3979C53v11Ev();
extern void _ZN7S3979C53v12Ev();
extern void _ZN7S3979C53v13Ev();
extern void _ZN7S3979C53v14Ev();
extern void ABISELECT(_ZThn8_N7S3979C5D1Ev,_ZThn4_N7S3979C5D1Ev)();
extern void ABISELECT(_ZThn8_N7S3979C5D0Ev,_ZThn4_N7S3979C5D0Ev)();
extern void _ZN10S3979C4_nt2v4Ev();
extern void ABISELECT(_ZThn16_N7S3979C5D1Ev,_ZThn8_N7S3979C5D1Ev)();
extern void ABISELECT(_ZThn16_N7S3979C5D0Ev,_ZThn8_N7S3979C5D0Ev)();
extern void _ZN7S3979C73v15Ev();
static  VTBL_ENTRY vtc_S3979C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3979C5[0]),
  (VTBL_ENTRY)&_ZN7S3979C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3979C5D0Ev,
  (VTBL_ENTRY)&_ZN10S3979C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3979C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3979C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3979C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3979C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3979C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN7S3979C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3979C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3979C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3979C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3979C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3979C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3979C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3979C53v14Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3979C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3979C5D1Ev,_ZThn4_N7S3979C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3979C5D0Ev,_ZThn4_N7S3979C5D0Ev),
  (VTBL_ENTRY)&_ZN10S3979C4_nt2v4Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3979C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3979C5D1Ev,_ZThn8_N7S3979C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3979C5D0Ev,_ZThn8_N7S3979C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3979C73v15Ev,
};
extern VTBL_ENTRY _ZTI7S3979C5[];
extern  VTBL_ENTRY _ZTV7S3979C5[];
Class_Descriptor cd_S3979C5 = {  "S3979C5", // class name
  bases_S3979C5, 6,
  &(vtc_S3979C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S3979C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3979C5),28, //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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3979C1  : S3979C2_nt {
  ::S3979C5 s3979c1f0;
  virtual  ~S3979C1(); // _ZN7S3979C1D1Ev
  virtual void  v1(); // _ZN7S3979C12v1Ev
  virtual void  v2(); // _ZN7S3979C12v2Ev
  virtual void  v3(); // _ZN7S3979C12v3Ev
  S3979C1(); // tgen
};
//SIG(1 S3979C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v4} v5 v6} vd v1 v2 v3 FC5{ BC6{ BC3 BC4 BC7{ BC3 vd v15} vd v16 v17 v18 v19 v20 v21} vd v7 v8 v9 v10 v11 v12 v13 v14 Fp Fl[3]}}


 S3979C1 ::~S3979C1(){ note_dtor("S3979C1", this);}
void  S3979C1 ::v1(){vfunc_called(this, "_ZN7S3979C12v1Ev");}
void  S3979C1 ::v2(){vfunc_called(this, "_ZN7S3979C12v2Ev");}
void  S3979C1 ::v3(){vfunc_called(this, "_ZN7S3979C12v3Ev");}
S3979C1 ::S3979C1(){ note_ctor("S3979C1", this);} // tgen

static void Test_S3979C1()
{
  extern Class_Descriptor cd_S3979C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S3979C1, buf);
    S3979C1 *dp, &lv = *(dp=new (buf) S3979C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S3979C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3979C1)");
    /*is_ambiguous_... S3979C2_nt::S807C5_nt */ AMB_check_base_class_offset(lv, (S807C5_nt*)(S3979C2_nt*), 0, "S3979C1");
    check_base_class_offset(lv, (S807C5_nt*)(S3979C4_nt*)(S3979C2_nt*), ABISELECT(8,4), "S3979C1");
    check_base_class_offset(lv, (S3979C4_nt*)(S3979C2_nt*), ABISELECT(8,4), "S3979C1");
    check_base_class_offset(lv, (S3979C2_nt*), 0, "S3979C1");
    check_field_offset(lv, s3979c1f0, ABISELECT(16,8), "S3979C1.s3979c1f0");
    test_class_info(&lv, &cd_S3979C1);
    dp->~S3979C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3979C1(Test_S3979C1, "S3979C1", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S3979C1C1Ev();
extern void _ZN7S3979C1D1Ev();
Name_Map name_map_S3979C1[] = {
  NSPAIR(_ZN7S3979C1C1Ev),
  NSPAIR(_ZN7S3979C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
extern Class_Descriptor cd_S3979C4_nt;
extern VTBL_ENTRY _ZTI10S3979C4_nt[];
extern  VTBL_ENTRY _ZTV10S3979C4_nt[];
extern Class_Descriptor cd_S3979C2_nt;
extern VTBL_ENTRY _ZTI10S3979C2_nt[];
extern  VTBL_ENTRY _ZTV10S3979C2_nt[];
static Base_Class bases_S3979C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S807C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S807C5_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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3979C4_nt,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3979C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3979C1[];
extern void _ZN7S3979C1D1Ev();
extern void _ZN7S3979C1D0Ev();
extern void _ZN10S3979C2_nt2v5Ev();
extern void _ZN10S3979C2_nt2v6Ev();
extern void _ZN7S3979C12v1Ev();
extern void _ZN7S3979C12v2Ev();
extern void _ZN7S3979C12v3Ev();
extern void ABISELECT(_ZThn8_N7S3979C1D1Ev,_ZThn4_N7S3979C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3979C1D0Ev,_ZThn4_N7S3979C1D0Ev)();
extern void _ZN10S3979C4_nt2v4Ev();
static  VTBL_ENTRY vtc_S3979C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3979C1[0]),
  (VTBL_ENTRY)&_ZN7S3979C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3979C1D0Ev,
  (VTBL_ENTRY)&_ZN10S3979C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3979C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S3979C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3979C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3979C12v3Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3979C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3979C1D1Ev,_ZThn4_N7S3979C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3979C1D0Ev,_ZThn4_N7S3979C1D0Ev),
  (VTBL_ENTRY)&_ZN10S3979C4_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI7S3979C1[];
extern  VTBL_ENTRY _ZTV7S3979C1[];
Class_Descriptor cd_S3979C1 = {  "S3979C1", // class name
  bases_S3979C1, 4,
  &(vtc_S3979C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S3979C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3979C1),14, //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  S4183C3  {
  virtual  ~S4183C3(); // _ZN7S4183C3D1Ev
  virtual void  v1(); // _ZN7S4183C32v1Ev
  virtual void  v2(); // _ZN7S4183C32v2Ev
  virtual void  v3(); // _ZN7S4183C32v3Ev
  S4183C3(); // tgen
};
//SIG(-1 S4183C3) C1{ vd v1 v2 v3}


 S4183C3 ::~S4183C3(){ note_dtor("S4183C3", this);}
void  S4183C3 ::v1(){vfunc_called(this, "_ZN7S4183C32v1Ev");}
void  S4183C3 ::v2(){vfunc_called(this, "_ZN7S4183C32v2Ev");}
void  S4183C3 ::v3(){vfunc_called(this, "_ZN7S4183C32v3Ev");}
S4183C3 ::S4183C3(){ note_ctor("S4183C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4183C3C1Ev();
extern void _ZN7S4183C3D1Ev();
Name_Map name_map_S4183C3[] = {
  NSPAIR(_ZN7S4183C3C1Ev),
  NSPAIR(_ZN7S4183C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4183C3[];
extern void _ZN7S4183C3D1Ev();
extern void _ZN7S4183C3D0Ev();
extern void _ZN7S4183C32v1Ev();
extern void _ZN7S4183C32v2Ev();
extern void _ZN7S4183C32v3Ev();
static  VTBL_ENTRY vtc_S4183C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4183C3[0]),
  (VTBL_ENTRY)&_ZN7S4183C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4183C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4183C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4183C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4183C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4183C3[];
extern  VTBL_ENTRY _ZTV7S4183C3[];
Class_Descriptor cd_S4183C3 = {  "S4183C3", // class name
  0,0,//no base classes
  &(vtc_S4183C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4183C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4183C3),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  S4183C2  : S4183C3 {
  ::S5166C36 s4183c2f0;
  ::S2355C13_nt s4183c2f1;
  char s4183c2f2;
  virtual  ~S4183C2(); // _ZN7S4183C2D1Ev
  virtual void  v4(); // _ZN7S4183C22v4Ev
  virtual void  v5(); // _ZN7S4183C22v5Ev
  virtual void  v6(); // _ZN7S4183C22v6Ev
  S4183C2(); // tgen
};
//SIG(-1 S4183C2) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S4183C2 ::~S4183C2(){ note_dtor("S4183C2", this);}
void  S4183C2 ::v4(){vfunc_called(this, "_ZN7S4183C22v4Ev");}
void  S4183C2 ::v5(){vfunc_called(this, "_ZN7S4183C22v5Ev");}
void  S4183C2 ::v6(){vfunc_called(this, "_ZN7S4183C22v6Ev");}
S4183C2 ::S4183C2(){ note_ctor("S4183C2", this);} // tgen

static void Test_S4183C2()
{
  extern Class_Descriptor cd_S4183C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S4183C2, buf);
    S4183C2 *dp, &lv = *(dp=new (buf) S4183C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S4183C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4183C2)");
    check_base_class_offset(lv, (S4183C3*), 0, "S4183C2");
    check_field_offset(lv, s4183c2f0, ABISELECT(8,4), "S4183C2.s4183c2f0");
    check_field_offset(lv, s4183c2f1, ABISELECT(32,20), "S4183C2.s4183c2f1");
    check_field_offset(lv, s4183c2f2, ABISELECT(64,52), "S4183C2.s4183c2f2");
    test_class_info(&lv, &cd_S4183C2);
    dp->~S4183C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4183C2(Test_S4183C2, "S4183C2", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S4183C2C1Ev();
extern void _ZN7S4183C2D1Ev();
Name_Map name_map_S4183C2[] = {
  NSPAIR(_ZN7S4183C2C1Ev),
  NSPAIR(_ZN7S4183C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4183C3;
extern VTBL_ENTRY _ZTI7S4183C3[];
extern  VTBL_ENTRY _ZTV7S4183C3[];
static Base_Class bases_S4183C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4183C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4183C2[];
extern void _ZN7S4183C2D1Ev();
extern void _ZN7S4183C2D0Ev();
extern void _ZN7S4183C32v1Ev();
extern void _ZN7S4183C32v2Ev();
extern void _ZN7S4183C32v3Ev();
extern void _ZN7S4183C22v4Ev();
extern void _ZN7S4183C22v5Ev();
extern void _ZN7S4183C22v6Ev();
static  VTBL_ENTRY vtc_S4183C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4183C2[0]),
  (VTBL_ENTRY)&_ZN7S4183C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4183C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4183C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4183C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4183C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4183C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4183C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4183C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4183C2[];
extern  VTBL_ENTRY _ZTV7S4183C2[];
Class_Descriptor cd_S4183C2 = {  "S4183C2", // class name
  bases_S4183C2, 1,
  &(vtc_S4183C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S4183C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4183C2),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  S4183C1  : S4183C2 {
  int s4183c1f0[4];
  void *s4183c1f1[2];
  int s4183c1f2[2];
  ::S2355C28_nt s4183c1f3;
  ::S2355C28_nt s4183c1f4;
  virtual  ~S4183C1(); // _ZN7S4183C1D1Ev
  S4183C1(); // tgen
};
//SIG(1 S4183C1) C1{ BC2{ BC3{ vd v1 v2 v3} vd v4 v5 v6 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd Fi[4] Fp[2] Fi[2] FC7{ BC8{ m Fp Fi[2] FC9{ m}} BC10{ vd v9 v10} vd v7 v8} FC7}


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

static void Test_S4183C1()
{
  extern Class_Descriptor cd_S4183C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,33)];
    init_test(&cd_S4183C1, buf);
    S4183C1 *dp, &lv = *(dp=new (buf) S4183C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,128), "sizeof(S4183C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4183C1)");
    check_base_class_offset(lv, (S4183C3*)(S4183C2*), 0, "S4183C1");
    check_base_class_offset(lv, (S4183C2*), 0, "S4183C1");
    check_field_offset(lv, s4183c1f0, ABISELECT(68,56), "S4183C1.s4183c1f0");
    check_field_offset(lv, s4183c1f1, ABISELECT(88,72), "S4183C1.s4183c1f1");
    check_field_offset(lv, s4183c1f2, ABISELECT(104,80), "S4183C1.s4183c1f2");
    check_field_offset(lv, s4183c1f3, ABISELECT(112,88), "S4183C1.s4183c1f3");
    check_field_offset(lv, s4183c1f4, ABISELECT(144,108), "S4183C1.s4183c1f4");
    test_class_info(&lv, &cd_S4183C1);
    dp->~S4183C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4183C1(Test_S4183C1, "S4183C1", ABISELECT(176,128));

#else // __cplusplus

extern void _ZN7S4183C1C1Ev();
extern void _ZN7S4183C1D1Ev();
Name_Map name_map_S4183C1[] = {
  NSPAIR(_ZN7S4183C1C1Ev),
  NSPAIR(_ZN7S4183C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4183C3;
extern VTBL_ENTRY _ZTI7S4183C3[];
extern  VTBL_ENTRY _ZTV7S4183C3[];
extern Class_Descriptor cd_S4183C2;
extern VTBL_ENTRY _ZTI7S4183C2[];
extern  VTBL_ENTRY _ZTV7S4183C2[];
static Base_Class bases_S4183C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4183C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4183C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4183C1[];
extern void _ZN7S4183C1D1Ev();
extern void _ZN7S4183C1D0Ev();
extern void _ZN7S4183C32v1Ev();
extern void _ZN7S4183C32v2Ev();
extern void _ZN7S4183C32v3Ev();
extern void _ZN7S4183C22v4Ev();
extern void _ZN7S4183C22v5Ev();
extern void _ZN7S4183C22v6Ev();
static  VTBL_ENTRY vtc_S4183C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4183C1[0]),
  (VTBL_ENTRY)&_ZN7S4183C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4183C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4183C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4183C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4183C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4183C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4183C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4183C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4183C1[];
extern  VTBL_ENTRY _ZTV7S4183C1[];
Class_Descriptor cd_S4183C1 = {  "S4183C1", // class name
  bases_S4183C1, 2,
  &(vtc_S4183C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,128), // object size
  NSPAIRA(_ZTI7S4183C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4183C1),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  S3506C3  : virtual S5166C37 , virtual S5166C27 {
  void *s3506c3f0;
  virtual  ~S3506C3(); // _ZN7S3506C3D2Ev
  S3506C3(); // tgen
};
//SIG(-1 S3506C3) C1{ VBC2{ m} VBC3{ m} vd Fp}


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

static void Test_S3506C3()
{
  extern Class_Descriptor cd_S3506C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3506C3, buf);
    S3506C3 *dp, &lv = *(dp=new (buf) S3506C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3506C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3506C3)");
    check_base_class_offset(lv, (S5166C37*), 0, "S3506C3");
    check_base_class_offset(lv, (S5166C27*), 0, "S3506C3");
    check_field_offset(lv, s3506c3f0, ABISELECT(8,4), "S3506C3.s3506c3f0");
    test_class_info(&lv, &cd_S3506C3);
    dp->~S3506C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3506C3(Test_S3506C3, "S3506C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3506C3C1Ev();
extern void _ZN7S3506C3D2Ev();
Name_Map name_map_S3506C3[] = {
  NSPAIR(_ZN7S3506C3C1Ev),
  NSPAIR(_ZN7S3506C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
static Base_Class bases_S3506C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S3506C3[];
extern void _ZN7S3506C3D1Ev();
extern void _ZN7S3506C3D0Ev();
static  VTBL_ENTRY vtc_S3506C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C3[0]),
  (VTBL_ENTRY)&_ZN7S3506C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C3D0Ev,
};
extern VTBL_ENTRY _ZTV7S3506C3[];
static  VTT_ENTRY vtt_S3506C3[] = {
  {&(_ZTV7S3506C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3506C3[];
extern  VTBL_ENTRY _ZTV7S3506C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C3[];
Class_Descriptor cd_S3506C3 = {  "S3506C3", // class name
  bases_S3506C3, 2,
  &(vtc_S3506C3[0]), // expected_vtbl_contents
  &(vtt_S3506C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3506C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3506C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3506C3),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  S3506C6  : virtual S5166C27 , virtual S3506C3 {
  int s3506c6f0;
  virtual  ~S3506C6(); // _ZN7S3506C6D2Ev
  S3506C6(); // tgen
};
//SIG(-1 S3506C6) C1{ VBC2{ m} VBC3{ VBC4{ m} VBC2 vd Fp} vd Fi}


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

static void Test_S3506C6()
{
  extern Class_Descriptor cd_S3506C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3506C6, buf);
    S3506C6 *dp, &lv = *(dp=new (buf) S3506C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3506C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3506C6)");
    check_base_class_offset(lv, (S5166C27*), 0, "S3506C6");
    check_base_class_offset(lv, (S5166C27*)(S3506C3*), 0, "S3506C6");
    check_base_class_offset(lv, (S5166C37*)(S3506C3*), 0, "S3506C6");
    check_base_class_offset(lv, (S3506C3*), ABISELECT(16,8), "S3506C6");
    check_field_offset(lv, s3506c6f0, ABISELECT(8,4), "S3506C6.s3506c6f0");
    test_class_info(&lv, &cd_S3506C6);
    dp->~S3506C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3506C6(Test_S3506C6, "S3506C6", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3506C6C1Ev();
extern void _ZN7S3506C6D2Ev();
Name_Map name_map_S3506C6[] = {
  NSPAIR(_ZN7S3506C6C1Ev),
  NSPAIR(_ZN7S3506C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S3506C3;
extern VTBL_ENTRY _ZTI7S3506C3[];
extern  VTBL_ENTRY _ZTV7S3506C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C3[];
static Base_Class bases_S3506C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3506C3,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3506C6[];
extern void _ZN7S3506C6D1Ev();
extern void _ZN7S3506C6D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S3506C6D1Ev,_ZTv0_n20_N7S3506C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S3506C6D1Ev,_ZThn8_N7S3506C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3506C6D0Ev,_ZTv0_n20_N7S3506C6D0Ev)();
extern void ABISELECT(_ZThn16_N7S3506C6D0Ev,_ZThn8_N7S3506C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3506C6[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C6[0]),
  (VTBL_ENTRY)&_ZN7S3506C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C6D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3506C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C6D1Ev,_ZTv0_n20_N7S3506C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C6D0Ev,_ZTv0_n20_N7S3506C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S3506C6[];
extern void _ZN7S3506C3D1Ev();
extern void _ZN7S3506C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C3__7S3506C6[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C3[0]),
  (VTBL_ENTRY)&_ZN7S3506C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C3D0Ev,
};
static  VTT_ENTRY vtt_S3506C6[] = {
  {&(_ZTV7S3506C6[5]),  5,14},
  {&(_ZTV7S3506C6[12]),  12,14},
  {&(_tg__ZTV7S3506C3__7S3506C6[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3506C6[];
extern  VTBL_ENTRY _ZTV7S3506C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C6[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3506C6D0Ev,_ZTv0_n20_N7S3506C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3506C6D0Ev,_ZThn8_N7S3506C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3506C6D1Ev,_ZTv0_n20_N7S3506C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3506C6D1Ev,_ZThn8_N7S3506C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3506C6 = {  "S3506C6", // class name
  bases_S3506C6, 3,
  &(vtc_S3506C6[0]), // expected_vtbl_contents
  &(vtt_S3506C6[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3506C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3506C6),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3506C6),3, //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  S3506C2  : S3506C3 {
  ::S3506C6 s3506c2f0;
  virtual  ~S3506C2(); // _ZN7S3506C2D2Ev
  S3506C2(); // tgen
};
//SIG(-1 S3506C2) C1{ BC2{ VBC3{ m} VBC4{ m} vd Fp} vd FC5{ VBC4 VBC2 vd Fi}}


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

static void Test_S3506C2()
{
  extern Class_Descriptor cd_S3506C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S3506C2, buf);
    S3506C2 *dp, &lv = *(dp=new (buf) S3506C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3506C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3506C2)");
    check_base_class_offset(lv, (S5166C37*)(S3506C3*), 0, "S3506C2");
    check_base_class_offset(lv, (S5166C27*)(S3506C3*), 0, "S3506C2");
    check_base_class_offset(lv, (S3506C3*), 0, "S3506C2");
    check_field_offset(lv, s3506c2f0, ABISELECT(16,8), "S3506C2.s3506c2f0");
    test_class_info(&lv, &cd_S3506C2);
    dp->~S3506C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3506C2(Test_S3506C2, "S3506C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3506C2C1Ev();
extern void _ZN7S3506C2D2Ev();
Name_Map name_map_S3506C2[] = {
  NSPAIR(_ZN7S3506C2C1Ev),
  NSPAIR(_ZN7S3506C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S3506C3;
extern VTBL_ENTRY _ZTI7S3506C3[];
extern  VTBL_ENTRY _ZTV7S3506C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C3[];
static Base_Class bases_S3506C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3506C3,    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
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3506C2[];
extern void _ZN7S3506C2D1Ev();
extern void _ZN7S3506C2D0Ev();
static  VTBL_ENTRY vtc_S3506C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C2[0]),
  (VTBL_ENTRY)&_ZN7S3506C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C2D0Ev,
};
extern VTBL_ENTRY _ZTV7S3506C2[];
extern void _ZN7S3506C3D1Ev();
extern void _ZN7S3506C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C3__7S3506C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C3[0]),
  (VTBL_ENTRY)&_ZN7S3506C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C3D0Ev,
};
static  VTT_ENTRY vtt_S3506C2[] = {
  {&(_ZTV7S3506C2[4]),  4,6},
  {&(_tg__ZTV7S3506C3__7S3506C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3506C2[];
extern  VTBL_ENTRY _ZTV7S3506C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C2[];
Class_Descriptor cd_S3506C2 = {  "S3506C2", // class name
  bases_S3506C2, 3,
  &(vtc_S3506C2[0]), // expected_vtbl_contents
  &(vtt_S3506C2[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3506C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3506C2),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3506C2),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  S3506C8  : virtual S3506C3 {
  virtual  ~S3506C8(); // _ZN7S3506C8D2Ev
  S3506C8(); // tgen
};
//SIG(-1 S3506C8) C1{ VBC2{ VBC3{ m} VBC4{ m} vd Fp} vd}


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

static void Test_S3506C8()
{
  extern Class_Descriptor cd_S3506C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3506C8, buf);
    S3506C8 *dp, &lv = *(dp=new (buf) S3506C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3506C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3506C8)");
    check_base_class_offset(lv, (S5166C37*)(S3506C3*), 0, "S3506C8");
    check_base_class_offset(lv, (S5166C27*)(S3506C3*), 0, "S3506C8");
    check_base_class_offset(lv, (S3506C3*), ABISELECT(8,4), "S3506C8");
    test_class_info(&lv, &cd_S3506C8);
    dp->~S3506C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3506C8(Test_S3506C8, "S3506C8", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3506C8C1Ev();
extern void _ZN7S3506C8D2Ev();
Name_Map name_map_S3506C8[] = {
  NSPAIR(_ZN7S3506C8C1Ev),
  NSPAIR(_ZN7S3506C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S3506C3;
extern VTBL_ENTRY _ZTI7S3506C3[];
extern  VTBL_ENTRY _ZTV7S3506C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C3[];
static Base_Class bases_S3506C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3506C3,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3506C8[];
extern void _ZN7S3506C8D1Ev();
extern void _ZN7S3506C8D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S3506C8D1Ev,_ZTv0_n20_N7S3506C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S3506C8D1Ev,_ZThn4_N7S3506C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3506C8D0Ev,_ZTv0_n20_N7S3506C8D0Ev)();
extern void ABISELECT(_ZThn8_N7S3506C8D0Ev,_ZThn4_N7S3506C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3506C8[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C8[0]),
  (VTBL_ENTRY)&_ZN7S3506C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C8D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3506C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C8D1Ev,_ZTv0_n20_N7S3506C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C8D0Ev,_ZTv0_n20_N7S3506C8D0Ev),
};
extern VTBL_ENTRY _ZTV7S3506C8[];
extern void _ZN7S3506C3D1Ev();
extern void _ZN7S3506C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C3__7S3506C8[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C3[0]),
  (VTBL_ENTRY)&_ZN7S3506C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C3D0Ev,
};
static  VTT_ENTRY vtt_S3506C8[] = {
  {&(_ZTV7S3506C8[5]),  5,14},
  {&(_ZTV7S3506C8[12]),  12,14},
  {&(_tg__ZTV7S3506C3__7S3506C8[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3506C8[];
extern  VTBL_ENTRY _ZTV7S3506C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C8[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3506C8D0Ev,_ZTv0_n20_N7S3506C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3506C8D0Ev,_ZThn4_N7S3506C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3506C8D1Ev,_ZTv0_n20_N7S3506C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3506C8D1Ev,_ZThn4_N7S3506C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3506C8 = {  "S3506C8", // class name
  bases_S3506C8, 3,
  &(vtc_S3506C8[0]), // expected_vtbl_contents
  &(vtt_S3506C8[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3506C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3506C8),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3506C8),3, //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  S3506C9  : S5166C27 , S3506C3 {
  ~S3506C9(); // tgen
  S3506C9(); // tgen
};
//SIG(-1 S3506C9) C1{ BC2{ m} BC3{ VBC4{ m} VBC2 vd Fp}}


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

static void Test_S3506C9()
{
  extern Class_Descriptor cd_S3506C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3506C9, buf);
    S3506C9 *dp, &lv = *(dp=new (buf) S3506C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3506C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3506C9)");
    /*is_ambiguous_... S3506C9::S5166C27 */ AMB_check_base_class_offset(lv, (S5166C27*), 0, "S3506C9");
    check_base_class_offset(lv, (S5166C37*)(S3506C3*), 0, "S3506C9");
    check_base_class_offset(lv, (S5166C27*)(S3506C3*), ABISELECT(16,8), "S3506C9");
    check_base_class_offset(lv, (S3506C3*), 0, "S3506C9");
    test_class_info(&lv, &cd_S3506C9);
    dp->~S3506C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3506C9(Test_S3506C9, "S3506C9", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3506C9C1Ev();
extern void _ZN7S3506C9D1Ev();
Name_Map name_map_S3506C9[] = {
  NSPAIR(_ZN7S3506C9C1Ev),
  NSPAIR(_ZN7S3506C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S3506C3;
extern VTBL_ENTRY _ZTI7S3506C3[];
extern  VTBL_ENTRY _ZTV7S3506C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C3[];
static Base_Class bases_S3506C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5166C27,    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
    3, //immediately_derived
  0, 1},
  {&cd_S3506C3,    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
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3506C9[];
extern void _ZN7S3506C9D1Ev();
extern void _ZN7S3506C9D0Ev();
static  VTBL_ENTRY vtc_S3506C9[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C9[0]),
  (VTBL_ENTRY)&_ZN7S3506C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C9D0Ev,
};
extern VTBL_ENTRY _ZTV7S3506C9[];
extern void _ZN7S3506C3D1Ev();
extern void _ZN7S3506C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C3__7S3506C9[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C3[0]),
  (VTBL_ENTRY)&_ZN7S3506C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C3D0Ev,
};
static  VTT_ENTRY vtt_S3506C9[] = {
  {&(_ZTV7S3506C9[4]),  4,6},
  {&(_tg__ZTV7S3506C3__7S3506C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3506C9[];
extern  VTBL_ENTRY _ZTV7S3506C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C9[];
Class_Descriptor cd_S3506C9 = {  "S3506C9", // class name
  bases_S3506C9, 4,
  &(vtc_S3506C9[0]), // expected_vtbl_contents
  &(vtt_S3506C9[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3506C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3506C9),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3506C9),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  S3506C7  : S3506C8 , S5166C37 , S5166C27 , S3506C9 {
  int s3506c7f0;
  ~S3506C7(); // tgen
  S3506C7(); // tgen
};
//SIG(-1 S3506C7) C1{ BC2{ VBC3{ VBC4{ m} VBC5{ m} vd Fp} vd} BC4 BC5 BC6{ BC5 BC3} Fi}


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

static void Test_S3506C7()
{
  extern Class_Descriptor cd_S3506C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S3506C7, buf);
    S3506C7 *dp, &lv = *(dp=new (buf) S3506C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S3506C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3506C7)");
    /*is_ambiguous_... S3506C7::S3506C3 */ AMB_check_base_class_offset(lv, (S5166C37*)(S3506C3*), ABISELECT(48,24), "S3506C7");
    check_base_class_offset(lv, (S5166C37*)(S3506C3*)(S3506C9*), ABISELECT(48,24), "S3506C7");
    /*is_ambiguous_... S3506C7::S3506C3 */ AMB_check_base_class_offset(lv, (S5166C27*)(S3506C3*), ABISELECT(48,24), "S3506C7");
    check_base_class_offset(lv, (S5166C27*)(S3506C3*)(S3506C9*), ABISELECT(48,24), "S3506C7");
    check_base_class_offset(lv, (S3506C3*)(S3506C8*), ABISELECT(32,16), "S3506C7");
    check_base_class_offset(lv, (S3506C8*), 0, "S3506C7");
    /*is_ambiguous_... S3506C7::S5166C37 */ AMB_check_base_class_offset(lv, (S5166C37*), 0, "S3506C7");
    /*is_ambiguous_... S3506C7::S5166C27 */ AMB_check_base_class_offset(lv, (S5166C27*), 0, "S3506C7");
    /*is_ambiguous_... S3506C9::S5166C27 */ AMB_check_base_class_offset(lv, (S5166C27*)(S3506C9*), ABISELECT(8,4), "S3506C7");
    check_base_class_offset(lv, (S3506C3*)(S3506C9*), ABISELECT(8,4), "S3506C7");
    check_base_class_offset(lv, (S3506C9*), ABISELECT(8,4), "S3506C7");
    check_field_offset(lv, s3506c7f0, ABISELECT(24,12), "S3506C7.s3506c7f0");
    test_class_info(&lv, &cd_S3506C7);
    dp->~S3506C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3506C7(Test_S3506C7, "S3506C7", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S3506C7C1Ev();
extern void _ZN7S3506C7D1Ev();
Name_Map name_map_S3506C7[] = {
  NSPAIR(_ZN7S3506C7C1Ev),
  NSPAIR(_ZN7S3506C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S3506C3;
extern VTBL_ENTRY _ZTI7S3506C3[];
extern  VTBL_ENTRY _ZTV7S3506C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C3[];
extern Class_Descriptor cd_S3506C8;
extern VTBL_ENTRY _ZTI7S3506C8[];
extern  VTBL_ENTRY _ZTV7S3506C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C8[];
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S3506C3;
extern VTBL_ENTRY _ZTI7S3506C3[];
extern  VTBL_ENTRY _ZTV7S3506C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C3[];
extern Class_Descriptor cd_S3506C9;
extern VTBL_ENTRY _ZTI7S3506C9[];
extern  VTBL_ENTRY _ZTV7S3506C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C9[];
static Base_Class bases_S3506C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    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
    2, //immediately_derived
  0, 1},
  {&cd_S5166C27,    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
    2, //immediately_derived
  0, 1},
  {&cd_S3506C3,    ABISELECT(32,16), //bcp->offset
    13, //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
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3506C8,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5166C27,    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
    8, //immediately_derived
  0, 0},
  {&cd_S3506C3,    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
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3506C9,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3506C7[];
extern void _ZN7S3506C7D1Ev();
extern void _ZN7S3506C7D0Ev();
extern void ABISELECT(_ZThn8_N7S3506C7D1Ev,_ZThn4_N7S3506C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S3506C7D0Ev,_ZThn4_N7S3506C7D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3506C7D1Ev,_ZTv0_n20_N7S3506C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S3506C7D1Ev,_ZThn16_N7S3506C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3506C7D0Ev,_ZTv0_n20_N7S3506C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S3506C7D0Ev,_ZThn16_N7S3506C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3506C7[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C7[0]),
  (VTBL_ENTRY)&_ZN7S3506C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C7D0Ev,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3506C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3506C7D1Ev,_ZThn4_N7S3506C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3506C7D0Ev,_ZThn4_N7S3506C7D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3506C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C7D1Ev,_ZTv0_n20_N7S3506C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C7D0Ev,_ZTv0_n20_N7S3506C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S3506C7[];
extern void _ZN7S3506C8D1Ev();
extern void _ZN7S3506C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C8__7S3506C7[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C8[0]),
  (VTBL_ENTRY)&_ZN7S3506C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S3506C8D1Ev,_ZTv0_n20_N7S3506C8D1Ev)();
extern void ABISELECT(_ZThn32_N7S3506C8D1Ev,_ZThn16_N7S3506C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3506C8D0Ev,_ZTv0_n20_N7S3506C8D0Ev)();
extern void ABISELECT(_ZThn32_N7S3506C8D0Ev,_ZThn16_N7S3506C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3506C3__7S3506C8__7S3506C7[] = {
  ABISELECT(-32,-16),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3506C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C8D1Ev,_ZTv0_n20_N7S3506C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C8D0Ev,_ZTv0_n20_N7S3506C8D0Ev),
};
extern void _ZN7S3506C9D1Ev();
extern void _ZN7S3506C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C9__7S3506C7[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C9[0]),
  (VTBL_ENTRY)&_ZN7S3506C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C9D0Ev,
};
extern void _ZN7S3506C3D1Ev();
extern void _ZN7S3506C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C37S3506C9__A1__7S3506C7[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C3[0]),
  (VTBL_ENTRY)&_ZN7S3506C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C3D0Ev,
};
extern void _ZN7S3506C3D1Ev();
extern void _ZN7S3506C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C3__7S3506C7[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C3[0]),
  (VTBL_ENTRY)&_ZN7S3506C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C3D0Ev,
};
static  VTT_ENTRY vtt_S3506C7[] = {
  {&(_ZTV7S3506C7[5]),  5,20},
  {&(_tg__ZTV7S3506C8__7S3506C7[5]),  5,7},
  {&(_tg__ZTV7S3506C3__7S3506C8__7S3506C7[5]),  5,7},
  {&(_tg__ZTV7S3506C9__7S3506C7[4]),  4,6},
  {&(_tg__ZTV7S3506C37S3506C9__A1__7S3506C7[4]),  4,6},
  {&(_ZTV7S3506C7[18]),  18,20},
  {&(_ZTV7S3506C7[11]),  11,20},
  {&(_tg__ZTV7S3506C3__7S3506C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3506C7[];
extern  VTBL_ENTRY _ZTV7S3506C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C7[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3506C8D0Ev,_ZTv0_n20_N7S3506C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3506C8D0Ev,_ZThn16_N7S3506C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3506C8D1Ev,_ZTv0_n20_N7S3506C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3506C8D1Ev,_ZThn16_N7S3506C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3506C7D0Ev,_ZTv0_n20_N7S3506C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3506C7D0Ev,_ZThn16_N7S3506C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3506C7D1Ev,_ZTv0_n20_N7S3506C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3506C7D1Ev,_ZThn16_N7S3506C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3506C7 = {  "S3506C7", // class name
  bases_S3506C7, 9,
  &(vtc_S3506C7[0]), // expected_vtbl_contents
  &(vtt_S3506C7[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S3506C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3506C7),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3506C7),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3506C10  : S3506C3 , virtual S3506C9 , S5166C27 , S5166C37 , virtual S3506C6 {
  virtual  ~S3506C10(); // _ZN8S3506C10D2Ev
  S3506C10(); // tgen
};
//SIG(-1 S3506C10) C1{ BC2{ VBC3{ m} VBC4{ m} vd Fp} VBC5{ BC4 BC2} BC4 BC3 VBC6{ VBC4 VBC2 vd Fi} vd}


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

static void Test_S3506C10()
{
  extern Class_Descriptor cd_S3506C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S3506C10, buf);
    S3506C10 *dp, &lv = *(dp=new (buf) S3506C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S3506C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3506C10)");
    /*is_ambiguous_... S3506C10::S3506C3 */ AMB_check_base_class_offset(lv, (S5166C37*)(S3506C3*), ABISELECT(16,8), "S3506C10");
    check_base_class_offset(lv, (S5166C37*)(S3506C3*)(S3506C9*), ABISELECT(16,8), "S3506C10");
    /*is_ambiguous_... S3506C10::S3506C3 */ AMB_check_base_class_offset(lv, (S5166C37*)(S3506C3*), ABISELECT(16,8), "S3506C10");
    /*is_ambiguous_... S3506C10::S3506C3 */ AMB_check_base_class_offset(lv, (S5166C27*)(S3506C3*), ABISELECT(16,8), "S3506C10");
    check_base_class_offset(lv, (S5166C27*)(S3506C3*)(S3506C9*), ABISELECT(16,8), "S3506C10");
    check_base_class_offset(lv, (S5166C27*)(S3506C6*), ABISELECT(16,8), "S3506C10");
    /*is_ambiguous_... S3506C10::S3506C3 */ AMB_check_base_class_offset(lv, (S5166C27*)(S3506C3*), ABISELECT(16,8), "S3506C10");
    /*is_ambiguous_... S3506C10::S3506C3 */ AMB_check_base_class_offset(lv, (S3506C3*), 0, "S3506C10");
    /*is_ambiguous_... S3506C9::S5166C27 */ AMB_check_base_class_offset(lv, (S5166C27*)(S3506C9*), ABISELECT(24,12), "S3506C10");
    check_base_class_offset(lv, (S3506C3*)(S3506C9*), ABISELECT(24,12), "S3506C10");
    check_base_class_offset(lv, (S3506C9*), ABISELECT(24,12), "S3506C10");
    /*is_ambiguous_... S3506C10::S5166C27 */ AMB_check_base_class_offset(lv, (S5166C27*), 0, "S3506C10");
    /*is_ambiguous_... S3506C10::S5166C37 */ AMB_check_base_class_offset(lv, (S5166C37*), 0, "S3506C10");
    check_base_class_offset(lv, (S3506C3*)(S3506C6*), ABISELECT(56,28), "S3506C10");
    check_base_class_offset(lv, (S3506C6*), ABISELECT(40,20), "S3506C10");
    test_class_info(&lv, &cd_S3506C10);
    dp->~S3506C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3506C10(Test_S3506C10, "S3506C10", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S3506C10C1Ev();
extern void _ZN8S3506C10D2Ev();
Name_Map name_map_S3506C10[] = {
  NSPAIR(_ZN8S3506C10C1Ev),
  NSPAIR(_ZN8S3506C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S3506C3;
extern VTBL_ENTRY _ZTI7S3506C3[];
extern  VTBL_ENTRY _ZTV7S3506C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C3[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S3506C3;
extern VTBL_ENTRY _ZTI7S3506C3[];
extern  VTBL_ENTRY _ZTV7S3506C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C3[];
extern Class_Descriptor cd_S3506C9;
extern VTBL_ENTRY _ZTI7S3506C9[];
extern  VTBL_ENTRY _ZTV7S3506C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C9[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S3506C3;
extern VTBL_ENTRY _ZTI7S3506C3[];
extern  VTBL_ENTRY _ZTV7S3506C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C3[];
extern Class_Descriptor cd_S3506C6;
extern VTBL_ENTRY _ZTI7S3506C6[];
extern  VTBL_ENTRY _ZTV7S3506C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C6[];
static Base_Class bases_S3506C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    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
    2, //immediately_derived
  0, 1},
  {&cd_S5166C27,    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
    2, //immediately_derived
  0, 1},
  {&cd_S3506C3,    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_S5166C27,    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
    5, //immediately_derived
  0, 0},
  {&cd_S3506C3,    ABISELECT(24,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
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3506C9,    ABISELECT(24,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3506C3,    ABISELECT(56,28), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3506C6,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3506C10[];
extern void _ZN8S3506C10D1Ev();
extern void _ZN8S3506C10D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S3506C10D1Ev,_ZTv0_n20_N8S3506C10D1Ev)();
extern void ABISELECT(_ZThn24_N8S3506C10D1Ev,_ZThn12_N8S3506C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3506C10D0Ev,_ZTv0_n20_N8S3506C10D0Ev)();
extern void ABISELECT(_ZThn24_N8S3506C10D0Ev,_ZThn12_N8S3506C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3506C10D1Ev,_ZTv0_n24_N8S3506C10D1Ev)();
extern void ABISELECT(_ZThn40_N8S3506C10D1Ev,_ZThn20_N8S3506C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3506C10D0Ev,_ZTv0_n24_N8S3506C10D0Ev)();
extern void ABISELECT(_ZThn40_N8S3506C10D0Ev,_ZThn20_N8S3506C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3506C10D1Ev,_ZTv0_n20_N8S3506C10D1Ev)();
extern void ABISELECT(_ZThn56_N8S3506C10D1Ev,_ZThn28_N8S3506C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3506C10D0Ev,_ZTv0_n20_N8S3506C10D0Ev)();
extern void ABISELECT(_ZThn56_N8S3506C10D0Ev,_ZThn28_N8S3506C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3506C10[] = {
  ABISELECT(56,28),
  ABISELECT(40,20),
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3506C10[0]),
  (VTBL_ENTRY)&_ZN8S3506C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3506C10D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S3506C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3506C10D1Ev,_ZTv0_n20_N8S3506C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3506C10D0Ev,_ZTv0_n20_N8S3506C10D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S3506C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3506C10D1Ev,_ZTv0_n24_N8S3506C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3506C10D0Ev,_ZTv0_n24_N8S3506C10D0Ev),
  ABISELECT(-56,-28),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S3506C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3506C10D1Ev,_ZTv0_n20_N8S3506C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3506C10D0Ev,_ZTv0_n20_N8S3506C10D0Ev),
};
extern VTBL_ENTRY _ZTV8S3506C10[];
extern void _ZN7S3506C3D1Ev();
extern void _ZN7S3506C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C3__A__8S3506C10[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C3[0]),
  (VTBL_ENTRY)&_ZN7S3506C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C3D0Ev,
};
extern void _ZN7S3506C9D1Ev();
extern void _ZN7S3506C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C9__8S3506C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C9[0]),
  (VTBL_ENTRY)&_ZN7S3506C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C9D0Ev,
};
extern void _ZN7S3506C3D1Ev();
extern void _ZN7S3506C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C37S3506C9__A1__8S3506C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C3[0]),
  (VTBL_ENTRY)&_ZN7S3506C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C3D0Ev,
};
extern void _ZN7S3506C6D1Ev();
extern void _ZN7S3506C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C6__8S3506C10[] = {
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C6[0]),
  (VTBL_ENTRY)&_ZN7S3506C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C6D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S3506C6D1Ev,_ZTv0_n20_N7S3506C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S3506C6D1Ev,_ZThn8_N7S3506C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3506C6D0Ev,_ZTv0_n20_N7S3506C6D0Ev)();
extern void ABISELECT(_ZThn16_N7S3506C6D0Ev,_ZThn8_N7S3506C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3506C3__7S3506C6__8S3506C10[] = {
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3506C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C6D1Ev,_ZTv0_n20_N7S3506C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C6D0Ev,_ZTv0_n20_N7S3506C6D0Ev),
};
extern void _ZN7S3506C3D1Ev();
extern void _ZN7S3506C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C3__A2__8S3506C10[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C3[0]),
  (VTBL_ENTRY)&_ZN7S3506C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C3D0Ev,
};
static  VTT_ENTRY vtt_S3506C10[] = {
  {&(_ZTV8S3506C10[7]),  7,31},
  {&(_tg__ZTV7S3506C3__A__8S3506C10[4]),  4,6},
  {&(_ZTV8S3506C10[14]),  14,31},
  {&(_ZTV8S3506C10[22]),  22,31},
  {&(_ZTV8S3506C10[29]),  29,31},
  {&(_tg__ZTV7S3506C9__8S3506C10[4]),  4,6},
  {&(_tg__ZTV7S3506C37S3506C9__A1__8S3506C10[4]),  4,6},
  {&(_tg__ZTV7S3506C6__8S3506C10[5]),  5,7},
  {&(_tg__ZTV7S3506C3__7S3506C6__8S3506C10[5]),  5,7},
  {&(_tg__ZTV7S3506C3__A2__8S3506C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S3506C10[];
extern  VTBL_ENTRY _ZTV8S3506C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3506C10[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3506C6D0Ev,_ZTv0_n20_N7S3506C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3506C6D0Ev,_ZThn8_N7S3506C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3506C6D1Ev,_ZTv0_n20_N7S3506C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3506C6D1Ev,_ZThn8_N7S3506C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3506C10D0Ev,_ZTv0_n24_N8S3506C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S3506C10D0Ev,_ZThn20_N8S3506C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3506C10D1Ev,_ZTv0_n24_N8S3506C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S3506C10D1Ev,_ZThn20_N8S3506C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3506C10D0Ev,_ZTv0_n20_N8S3506C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S3506C10D0Ev,_ZThn28_N8S3506C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S3506C10D0Ev,_ZThn12_N8S3506C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3506C10D1Ev,_ZTv0_n20_N8S3506C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S3506C10D1Ev,_ZThn28_N8S3506C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S3506C10D1Ev,_ZThn12_N8S3506C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3506C10 = {  "S3506C10", // class name
  bases_S3506C10, 10,
  &(vtc_S3506C10[0]), // expected_vtbl_contents
  &(vtt_S3506C10[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S3506C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S3506C10),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3506C10),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3506C1  : S3506C2 , virtual S3506C7 , virtual S3506C6 , S3506C10 , S5166C23 {
  void *s3506c1f0;
  virtual  ~S3506C1(); // _ZN7S3506C1D2Ev
  S3506C1(); // tgen
};
//SIG(1 S3506C1) C1{ BC2{ BC3{ VBC4{ m} VBC5{ m} vd Fp} vd FC6{ VBC5 VBC3 vd Fi}} VBC7{ BC8{ VBC3 vd} BC4 BC5 BC9{ BC5 BC3} Fi} VBC6 BC10{ BC3 VBC9 BC5 BC4 VBC6 vd} BC11{ m} vd Fp}


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

static void Test_S3506C1()
{
  extern Class_Descriptor cd_S3506C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[20];
    init_test(&cd_S3506C1, buf);
    S3506C1 *dp, &lv = *(dp=new (buf) S3506C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,76), "sizeof(S3506C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3506C1)");
    check_base_class_offset(lv, (S5166C37*)(S3506C3*)(S3506C2*), 0, "S3506C1");
    /*is_ambiguous_... S3506C1::S3506C3 */ AMB_check_base_class_offset(lv, (S5166C37*)(S3506C3*), 0, "S3506C1");
    check_base_class_offset(lv, (S5166C37*)(S3506C3*)(S3506C9*)(S3506C7*), 0, "S3506C1");
    /*is_ambiguous_... S3506C10::S3506C3 */ AMB_check_base_class_offset(lv, (S5166C37*)(S3506C3*)(S3506C10*), 0, "S3506C1");
    /*is_ambiguous_... S3506C1::S3506C9 */ AMB_check_base_class_offset(lv, (S5166C37*)(S3506C3*)(S3506C9*), 0, "S3506C1");
    check_base_class_offset(lv, (S5166C27*)(S3506C3*)(S3506C2*), 0, "S3506C1");
    /*is_ambiguous_... S3506C1::S3506C3 */ AMB_check_base_class_offset(lv, (S5166C27*)(S3506C3*), 0, "S3506C1");
    check_base_class_offset(lv, (S5166C27*)(S3506C3*)(S3506C9*)(S3506C7*), 0, "S3506C1");
    check_base_class_offset(lv, (S5166C27*)(S3506C6*), 0, "S3506C1");
    /*is_ambiguous_... S3506C10::S3506C3 */ AMB_check_base_class_offset(lv, (S5166C27*)(S3506C3*)(S3506C10*), 0, "S3506C1");
    /*is_ambiguous_... S3506C1::S3506C9 */ AMB_check_base_class_offset(lv, (S5166C27*)(S3506C3*)(S3506C9*), 0, "S3506C1");
    check_base_class_offset(lv, (S3506C3*)(S3506C2*), 0, "S3506C1");
    check_base_class_offset(lv, (S3506C2*), 0, "S3506C1");
    check_base_class_offset(lv, (S3506C3*)(S3506C8*)(S3506C7*), ABISELECT(104,52), "S3506C1");
    check_base_class_offset(lv, (S3506C3*)(S3506C6*), ABISELECT(104,52), "S3506C1");
    check_base_class_offset(lv, (S3506C8*)(S3506C7*), ABISELECT(72,36), "S3506C1");
    /*is_ambiguous_... S3506C7::S5166C37 */ AMB_check_base_class_offset(lv, (S5166C37*)(S3506C7*), ABISELECT(72,36), "S3506C1");
    /*is_ambiguous_... S3506C7::S5166C27 */ AMB_check_base_class_offset(lv, (S5166C27*)(S3506C7*), ABISELECT(72,36), "S3506C1");
    /*is_ambiguous_... S3506C9::S5166C27 */ AMB_check_base_class_offset(lv, (S5166C27*)(S3506C9*)(S3506C7*), ABISELECT(80,40), "S3506C1");
    check_base_class_offset(lv, (S3506C3*)(S3506C9*)(S3506C7*), ABISELECT(80,40), "S3506C1");
    check_base_class_offset(lv, (S3506C9*)(S3506C7*), ABISELECT(80,40), "S3506C1");
    check_base_class_offset(lv, (S3506C7*), ABISELECT(72,36), "S3506C1");
    check_base_class_offset(lv, (S3506C6*), ABISELECT(120,60), "S3506C1");
    check_base_class_offset(lv, (S3506C6*)(S3506C10*), ABISELECT(120,60), "S3506C1");
    /*is_ambiguous_... S3506C10::S3506C3 */ AMB_check_base_class_offset(lv, (S3506C3*)(S3506C10*), ABISELECT(48,24), "S3506C1");
    /*is_ambiguous_... S3506C1::S3506C9 */ AMB_check_base_class_offset(lv, (S5166C27*)(S3506C9*), ABISELECT(136,68), "S3506C1");
    /*is_ambiguous_... S3506C1::S3506C9 */ AMB_check_base_class_offset(lv, (S3506C3*)(S3506C9*), ABISELECT(136,68), "S3506C1");
    check_base_class_offset(lv, (S3506C9*)(S3506C10*), ABISELECT(136,68), "S3506C1");
    /*is_ambiguous_... S3506C10::S5166C27 */ AMB_check_base_class_offset(lv, (S5166C27*)(S3506C10*), ABISELECT(48,24), "S3506C1");
    /*is_ambiguous_... S3506C10::S5166C37 */ AMB_check_base_class_offset(lv, (S5166C37*)(S3506C10*), ABISELECT(48,24), "S3506C1");
    check_base_class_offset(lv, (S3506C10*), ABISELECT(48,24), "S3506C1");
    check_base_class_offset(lv, (S5166C23*), 0, "S3506C1");
    check_field_offset(lv, s3506c1f0, ABISELECT(64,32), "S3506C1.s3506c1f0");
    test_class_info(&lv, &cd_S3506C1);
    dp->~S3506C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3506C1(Test_S3506C1, "S3506C1", ABISELECT(152,76));

#else // __cplusplus

extern void _ZN7S3506C1C1Ev();
extern void _ZN7S3506C1D2Ev();
Name_Map name_map_S3506C1[] = {
  NSPAIR(_ZN7S3506C1C1Ev),
  NSPAIR(_ZN7S3506C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S3506C3;
extern VTBL_ENTRY _ZTI7S3506C3[];
extern  VTBL_ENTRY _ZTV7S3506C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C3[];
extern Class_Descriptor cd_S3506C2;
extern VTBL_ENTRY _ZTI7S3506C2[];
extern  VTBL_ENTRY _ZTV7S3506C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C2[];
extern Class_Descriptor cd_S3506C3;
extern VTBL_ENTRY _ZTI7S3506C3[];
extern  VTBL_ENTRY _ZTV7S3506C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C3[];
extern Class_Descriptor cd_S3506C8;
extern VTBL_ENTRY _ZTI7S3506C8[];
extern  VTBL_ENTRY _ZTV7S3506C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C8[];
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S3506C3;
extern VTBL_ENTRY _ZTI7S3506C3[];
extern  VTBL_ENTRY _ZTV7S3506C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C3[];
extern Class_Descriptor cd_S3506C9;
extern VTBL_ENTRY _ZTI7S3506C9[];
extern  VTBL_ENTRY _ZTV7S3506C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C9[];
extern Class_Descriptor cd_S3506C7;
extern VTBL_ENTRY _ZTI7S3506C7[];
extern  VTBL_ENTRY _ZTV7S3506C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C7[];
extern Class_Descriptor cd_S3506C6;
extern VTBL_ENTRY _ZTI7S3506C6[];
extern  VTBL_ENTRY _ZTV7S3506C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C6[];
extern Class_Descriptor cd_S3506C3;
extern VTBL_ENTRY _ZTI7S3506C3[];
extern  VTBL_ENTRY _ZTV7S3506C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C3[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S3506C3;
extern VTBL_ENTRY _ZTI7S3506C3[];
extern  VTBL_ENTRY _ZTV7S3506C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C3[];
extern Class_Descriptor cd_S3506C9;
extern VTBL_ENTRY _ZTI7S3506C9[];
extern  VTBL_ENTRY _ZTV7S3506C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C9[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S3506C10;
extern VTBL_ENTRY _ZTI8S3506C10[];
extern  VTBL_ENTRY _ZTV8S3506C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3506C10[];
extern Class_Descriptor cd_S5166C23;
extern VTBL_ENTRY _ZTI8S5166C23[];
static Base_Class bases_S3506C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3506C3,    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
    3, //immediately_derived
  0, 0},
  {&cd_S3506C2,    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_S3506C3,    ABISELECT(104,52), //bcp->offset
    33, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3506C8,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    11, //immediately_derived
  0, 0},
  {&cd_S5166C37,    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
    11, //immediately_derived
  0, 0},
  {&cd_S5166C27,    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
    11, //immediately_derived
  0, 0},
  {&cd_S5166C27,    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
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3506C3,    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
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3506C9,    ABISELECT(80,40), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3506C7,    ABISELECT(72,36), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3506C6,    ABISELECT(120,60), //bcp->offset
    40, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3506C3,    ABISELECT(48,24), //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
    11, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S5166C27,    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
    16, //immediately_derived
  0, 0},
  {&cd_S3506C3,    ABISELECT(136,68), //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
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3506C9,    ABISELECT(136,68), //bcp->offset
    48, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S5166C27,    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
    19, //immediately_derived
  0, 0},
  {&cd_S5166C37,    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
    19, //immediately_derived
  0, 0},
  {&cd_S3506C10,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5166C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S3506C1[];
extern void _ZN7S3506C1D1Ev();
extern void _ZN7S3506C1D0Ev();
extern void ABISELECT(_ZThn48_N7S3506C1D1Ev,_ZThn24_N7S3506C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S3506C1D0Ev,_ZThn24_N7S3506C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S3506C1D1Ev,_ZTv0_n24_N7S3506C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S3506C1D1Ev,_ZThn36_N7S3506C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3506C1D0Ev,_ZTv0_n24_N7S3506C1D0Ev)();
extern void ABISELECT(_ZThn72_N7S3506C1D0Ev,_ZThn36_N7S3506C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n48_N7S3506C1D1Ev,_ZTvn4_n24_N7S3506C1D1Ev)();
extern void ABISELECT(_ZTvn8_n48_N7S3506C1D0Ev,_ZTvn4_n24_N7S3506C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3506C1D1Ev,_ZTv0_n20_N7S3506C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S3506C1D1Ev,_ZThn52_N7S3506C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3506C1D0Ev,_ZTv0_n20_N7S3506C1D0Ev)();
extern void ABISELECT(_ZThn104_N7S3506C1D0Ev,_ZThn52_N7S3506C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3506C1D1Ev,_ZTv0_n24_N7S3506C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S3506C1D1Ev,_ZThn60_N7S3506C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3506C1D0Ev,_ZTv0_n24_N7S3506C1D0Ev)();
extern void ABISELECT(_ZThn120_N7S3506C1D0Ev,_ZThn60_N7S3506C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3506C1D1Ev,_ZTv0_n20_N7S3506C1D1Ev)();
extern void ABISELECT(_ZThn136_N7S3506C1D1Ev,_ZThn68_N7S3506C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3506C1D0Ev,_ZTv0_n20_N7S3506C1D0Ev)();
extern void ABISELECT(_ZThn136_N7S3506C1D0Ev,_ZThn68_N7S3506C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3506C1[] = {
  ABISELECT(136,68),
  ABISELECT(120,60),
  ABISELECT(104,52),
  ABISELECT(72,36),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C1[0]),
  (VTBL_ENTRY)&_ZN7S3506C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C1D0Ev,
  ABISELECT(56,28),
  ABISELECT(72,36),
  ABISELECT(88,44),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3506C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3506C1D1Ev,_ZThn24_N7S3506C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3506C1D0Ev,_ZThn24_N7S3506C1D0Ev),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(32,16),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S3506C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3506C1D1Ev,_ZTv0_n24_N7S3506C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3506C1D0Ev,_ZTv0_n24_N7S3506C1D0Ev),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S3506C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n48_N7S3506C1D1Ev,_ZTvn4_n24_N7S3506C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n48_N7S3506C1D0Ev,_ZTvn4_n24_N7S3506C1D0Ev),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S3506C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C1D1Ev,_ZTv0_n20_N7S3506C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C1D0Ev,_ZTv0_n20_N7S3506C1D0Ev),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  ABISELECT(-16,-8),
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S3506C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3506C1D1Ev,_ZTv0_n24_N7S3506C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3506C1D0Ev,_ZTv0_n24_N7S3506C1D0Ev),
  ABISELECT(-136,-68),
  ABISELECT(-136,-68),
  ABISELECT(-136,-68),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI7S3506C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C1D1Ev,_ZTv0_n20_N7S3506C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C1D0Ev,_ZTv0_n20_N7S3506C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S3506C1[];
extern void _ZN7S3506C2D1Ev();
extern void _ZN7S3506C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C2__7S3506C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C2[0]),
  (VTBL_ENTRY)&_ZN7S3506C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C2D0Ev,
};
extern void _ZN7S3506C3D1Ev();
extern void _ZN7S3506C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C37S3506C2__7S3506C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C3[0]),
  (VTBL_ENTRY)&_ZN7S3506C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C3D0Ev,
};
extern void _ZN8S3506C10D1Ev();
extern void _ZN8S3506C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3506C10__7S3506C1[] = {
  ABISELECT(56,28),
  ABISELECT(72,36),
  ABISELECT(88,44),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S3506C10[0]),
  (VTBL_ENTRY)&_ZN8S3506C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3506C10D0Ev,
};
extern void _ZN7S3506C3D1Ev();
extern void _ZN7S3506C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C38S3506C10__A3__7S3506C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C3[0]),
  (VTBL_ENTRY)&_ZN7S3506C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C3D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S3506C10D1Ev,_ZTv0_n20_N8S3506C10D1Ev)();
extern void ABISELECT(_ZThn88_N8S3506C10D1Ev,_ZThn44_N8S3506C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3506C10D0Ev,_ZTv0_n20_N8S3506C10D0Ev)();
extern void ABISELECT(_ZThn88_N8S3506C10D0Ev,_ZThn44_N8S3506C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3506C9__8S3506C10__7S3506C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-136,-68),
  ABISELECT(-136,-68),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S3506C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3506C10D1Ev,_ZTv0_n20_N8S3506C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3506C10D0Ev,_ZTv0_n20_N8S3506C10D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S3506C10D1Ev,_ZTv0_n24_N8S3506C10D1Ev)();
extern void ABISELECT(_ZThn72_N8S3506C10D1Ev,_ZThn36_N8S3506C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3506C10D0Ev,_ZTv0_n24_N8S3506C10D0Ev)();
extern void ABISELECT(_ZThn72_N8S3506C10D0Ev,_ZThn36_N8S3506C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3506C6__8S3506C10__7S3506C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-120,-60),
  ABISELECT(-16,-8),
  ABISELECT(-120,-60),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S3506C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3506C10D1Ev,_ZTv0_n24_N8S3506C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3506C10D0Ev,_ZTv0_n24_N8S3506C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S3506C10D1Ev,_ZTv0_n20_N8S3506C10D1Ev)();
extern void ABISELECT(_ZThn56_N8S3506C10D1Ev,_ZThn28_N8S3506C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3506C10D0Ev,_ZTv0_n20_N8S3506C10D0Ev)();
extern void ABISELECT(_ZThn56_N8S3506C10D0Ev,_ZThn28_N8S3506C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3506C3__A2__8S3506C10__7S3506C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S3506C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3506C10D1Ev,_ZTv0_n20_N8S3506C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3506C10D0Ev,_ZTv0_n20_N8S3506C10D0Ev),
};
extern void _ZN7S3506C7D1Ev();
extern void _ZN7S3506C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C7__7S3506C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C7[0]),
  (VTBL_ENTRY)&_ZN7S3506C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C7D0Ev,
};
extern void _ZN7S3506C8D1Ev();
extern void _ZN7S3506C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C87S3506C7__7S3506C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C8[0]),
  (VTBL_ENTRY)&_ZN7S3506C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C8D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S3506C8D1Ev,_ZTv0_n20_N7S3506C8D1Ev)();
extern void ABISELECT(_ZThn32_N7S3506C8D1Ev,_ZThn16_N7S3506C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3506C8D0Ev,_ZTv0_n20_N7S3506C8D0Ev)();
extern void ABISELECT(_ZThn32_N7S3506C8D0Ev,_ZThn16_N7S3506C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3506C3__7S3506C87S3506C7__7S3506C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3506C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C8D1Ev,_ZTv0_n20_N7S3506C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C8D0Ev,_ZTv0_n20_N7S3506C8D0Ev),
};
extern void _ZN7S3506C9D1Ev();
extern void _ZN7S3506C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C97S3506C7__7S3506C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C9[0]),
  (VTBL_ENTRY)&_ZN7S3506C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C9D0Ev,
};
extern void _ZN7S3506C3D1Ev();
extern void _ZN7S3506C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C37S3506C97S3506C7__A2__7S3506C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C3[0]),
  (VTBL_ENTRY)&_ZN7S3506C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C3D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S3506C7D1Ev,_ZTv0_n20_N7S3506C7D1Ev)();
extern void ABISELECT(_ZThn32_N7S3506C7D1Ev,_ZThn16_N7S3506C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3506C7D0Ev,_ZTv0_n20_N7S3506C7D0Ev)();
extern void ABISELECT(_ZThn32_N7S3506C7D0Ev,_ZThn16_N7S3506C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3506C3__7S3506C7__7S3506C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3506C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C7D1Ev,_ZTv0_n20_N7S3506C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C7D0Ev,_ZTv0_n20_N7S3506C7D0Ev),
};
extern void ABISELECT(_ZThn8_N7S3506C7D1Ev,_ZThn4_N7S3506C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S3506C7D0Ev,_ZThn4_N7S3506C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3506C9__7S3506C7__7S3506C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3506C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3506C7D1Ev,_ZThn4_N7S3506C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3506C7D0Ev,_ZThn4_N7S3506C7D0Ev),
};
extern void _ZN7S3506C3D1Ev();
extern void _ZN7S3506C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C3__A1__7S3506C1[] = {
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C3[0]),
  (VTBL_ENTRY)&_ZN7S3506C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C3D0Ev,
};
extern void _ZN7S3506C6D1Ev();
extern void _ZN7S3506C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C6__7S3506C1[] = {
  ABISELECT(-120,-60),
  ABISELECT(-16,-8),
  ABISELECT(-120,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C6[0]),
  (VTBL_ENTRY)&_ZN7S3506C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C6D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S3506C6D1Ev,_ZTv0_n20_N7S3506C6D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S3506C6D0Ev,_ZTv0_n20_N7S3506C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3506C3__7S3506C6__7S3506C1[] = {
  ABISELECT(16,8),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S3506C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C6D1Ev,_ZTv0_n20_N7S3506C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3506C6D0Ev,_ZTv0_n20_N7S3506C6D0Ev),
};
extern void _ZN7S3506C9D1Ev();
extern void _ZN7S3506C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C9__A1__7S3506C1[] = {
  ABISELECT(-136,-68),
  ABISELECT(-136,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C9[0]),
  (VTBL_ENTRY)&_ZN7S3506C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C9D0Ev,
};
extern void _ZN7S3506C3D1Ev();
extern void _ZN7S3506C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3506C37S3506C9__A4__7S3506C1[] = {
  ABISELECT(-136,-68),
  ABISELECT(-136,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S3506C3[0]),
  (VTBL_ENTRY)&_ZN7S3506C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3506C3D0Ev,
};
static  VTT_ENTRY vtt_S3506C1[] = {
  {&(_ZTV7S3506C1[8]),  8,55},
  {&(_tg__ZTV7S3506C2__7S3506C1[4]),  4,6},
  {&(_tg__ZTV7S3506C37S3506C2__7S3506C1[4]),  4,6},
  {&(_tg__ZTV8S3506C10__7S3506C1[7]),  7,9},
  {&(_tg__ZTV7S3506C38S3506C10__A3__7S3506C1[4]),  4,6},
  {&(_tg__ZTV7S3506C9__8S3506C10__7S3506C1[5]),  5,7},
  {&(_tg__ZTV7S3506C6__8S3506C10__7S3506C1[6]),  6,8},
  {&(_tg__ZTV7S3506C3__A2__8S3506C10__7S3506C1[5]),  5,7},
  {&(_ZTV7S3506C1[25]),  25,55},
  {&(_ZTV7S3506C1[38]),  38,55},
  {&(_ZTV7S3506C1[31]),  31,55},
  {&(_ZTV7S3506C1[46]),  46,55},
  {&(_ZTV7S3506C1[17]),  17,55},
  {&(_ZTV7S3506C1[53]),  53,55},
  {&(_tg__ZTV7S3506C7__7S3506C1[5]),  5,7},
  {&(_tg__ZTV7S3506C87S3506C7__7S3506C1[5]),  5,7},
  {&(_tg__ZTV7S3506C3__7S3506C87S3506C7__7S3506C1[5]),  5,7},
  {&(_tg__ZTV7S3506C97S3506C7__7S3506C1[4]),  4,6},
  {&(_tg__ZTV7S3506C37S3506C97S3506C7__A2__7S3506C1[4]),  4,6},
  {&(_tg__ZTV7S3506C3__7S3506C7__7S3506C1[5]),  5,7},
  {&(_tg__ZTV7S3506C9__7S3506C7__7S3506C1[4]),  4,6},
  {&(_tg__ZTV7S3506C3__A1__7S3506C1[4]),  4,6},
  {&(_tg__ZTV7S3506C6__7S3506C1[5]),  5,7},
  {&(_tg__ZTV7S3506C3__7S3506C6__7S3506C1[5]),  5,7},
  {&(_tg__ZTV7S3506C9__A1__7S3506C1[4]),  4,6},
  {&(_tg__ZTV7S3506C37S3506C9__A4__7S3506C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3506C1[];
extern  VTBL_ENTRY _ZTV7S3506C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3506C1[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3506C7D0Ev,_ZTv0_n20_N7S3506C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3506C7D0Ev,_ZThn16_N7S3506C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3506C7D1Ev,_ZTv0_n20_N7S3506C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3506C7D1Ev,_ZThn16_N7S3506C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3506C8D0Ev,_ZTv0_n20_N7S3506C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3506C8D0Ev,_ZThn16_N7S3506C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3506C8D1Ev,_ZTv0_n20_N7S3506C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3506C8D1Ev,_ZThn16_N7S3506C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3506C10D0Ev,_ZTv0_n24_N8S3506C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S3506C10D0Ev,_ZThn36_N8S3506C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3506C10D1Ev,_ZTv0_n24_N8S3506C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S3506C10D1Ev,_ZThn36_N8S3506C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3506C10D0Ev,_ZTv0_n20_N8S3506C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S3506C10D0Ev,_ZThn28_N8S3506C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S3506C10D0Ev,_ZThn44_N8S3506C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3506C10D1Ev,_ZTv0_n20_N8S3506C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S3506C10D1Ev,_ZThn28_N8S3506C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S3506C10D1Ev,_ZThn44_N8S3506C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3506C1D0Ev,_ZTv0_n20_N7S3506C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S3506C1D0Ev,_ZThn68_N7S3506C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3506C1D0Ev,_ZThn52_N7S3506C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3506C1D1Ev,_ZTv0_n20_N7S3506C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S3506C1D1Ev,_ZThn68_N7S3506C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3506C1D1Ev,_ZThn52_N7S3506C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3506C1D0Ev,_ZTv0_n24_N7S3506C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S3506C1D0Ev,_ZThn60_N7S3506C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S3506C1D0Ev,_ZThn36_N7S3506C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3506C1D1Ev,_ZTv0_n24_N7S3506C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S3506C1D1Ev,_ZThn60_N7S3506C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S3506C1D1Ev,_ZThn36_N7S3506C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3506C1 = {  "S3506C1", // class name
  bases_S3506C1, 21,
  &(vtc_S3506C1[0]), // expected_vtbl_contents
  &(vtt_S3506C1[0]), // expected_vtt_contents
  ABISELECT(152,76), // object size
  NSPAIRA(_ZTI7S3506C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3506C1),55, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3506C1),26, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13190C2_nt  {
  int s13190c2f0;
  void *s13190c2f1[3];
};
//SIG(-1 S13190C2_nt) C1{ Fi Fp[3]}



//skip512 S13190C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13190C3_nt  {
  int s13190c3f0[2];
  void *s13190c3f1;
  int s13190c3f2;
};
//SIG(-1 S13190C3_nt) C1{ Fi[2] Fp Fi}



//skip512 S13190C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13190C4  {
  int s13190c4f0[3];
  void *s13190c4f1[6];
  int s13190c4f2[2];
};
//SIG(-1 S13190C4) C1{ Fi[3] Fp[6] Fi[2]}



static void Test_S13190C4()
{
  {
    init_simple_test("S13190C4");
    S13190C4 lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S13190C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13190C4)");
    check_field_offset(lv, s13190c4f0, 0, "S13190C4.s13190c4f0");
    check_field_offset(lv, s13190c4f1, ABISELECT(16,12), "S13190C4.s13190c4f1");
    check_field_offset(lv, s13190c4f2, ABISELECT(64,36), "S13190C4.s13190c4f2");
  }
}
static Arrange_To_Call_Me vS13190C4(Test_S13190C4, "S13190C4", ABISELECT(72,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13190C5_nt  {
  int s13190c5f0;
};
//SIG(-1 S13190C5_nt) C1{ Fi}



//skip512 S13190C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13190C6  {
  int s13190c6f0;
  void *s13190c6f1[2];
};
//SIG(-1 S13190C6) C1{ Fi Fp[2]}



static void Test_S13190C6()
{
  {
    init_simple_test("S13190C6");
    S13190C6 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S13190C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13190C6)");
    check_field_offset(lv, s13190c6f0, 0, "S13190C6.s13190c6f0");
    check_field_offset(lv, s13190c6f1, ABISELECT(8,4), "S13190C6.s13190c6f1");
  }
}
static Arrange_To_Call_Me vS13190C6(Test_S13190C6, "S13190C6", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13190C7  {
  int s13190c7f0;
  void *s13190c7f1[3];
  int s13190c7f2[3];
};
//SIG(-1 S13190C7) C1{ Fi Fp[3] Fi[3]}



static void Test_S13190C7()
{
  {
    init_simple_test("S13190C7");
    S13190C7 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S13190C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13190C7)");
    check_field_offset(lv, s13190c7f0, 0, "S13190C7.s13190c7f0");
    check_field_offset(lv, s13190c7f1, ABISELECT(8,4), "S13190C7.s13190c7f1");
    check_field_offset(lv, s13190c7f2, ABISELECT(32,16), "S13190C7.s13190c7f2");
  }
}
static Arrange_To_Call_Me vS13190C7(Test_S13190C7, "S13190C7", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13190C8_nt  {
  int s13190c8f0[3];
};
//SIG(-1 S13190C8_nt) C1{ Fi[3]}



//skip512 S13190C8_nt

#else // __cplusplus

Class_Descriptor cd_S13190C8_nt = {  "S13190C8_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

union  S13190C10  {
  int s13190c10f0;
};
//SIG(1 S13190C10) U1{ Fi}

#endif // __cplusplus
#ifdef __cplusplus

struct  S13190C9  {
  int s13190c9f0;
  ::S13190C10 s13190c9f1;
};
//SIG(-1 S13190C9) C1{ Fi FU2{ Fi}}



static void Test_S13190C9()
{
  {
    init_simple_test("S13190C9");
    S13190C9 lv;
    check2(sizeof(lv), 8, "sizeof(S13190C9)");
    check2(__alignof__(lv), 4, "__alignof__(S13190C9)");
    check_field_offset(lv, s13190c9f0, 0, "S13190C9.s13190c9f0");
    check_field_offset(lv, s13190c9f1, 4, "S13190C9.s13190c9f1");
  }
}
static Arrange_To_Call_Me vS13190C9(Test_S13190C9, "S13190C9", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13190C1  {
  int s13190c1f0[2];
  void *s13190c1f1;
  int s13190c1f2;
  void *s13190c1f3;
  int s13190c1f4;
  void *s13190c1f5;
  ::S13190C2_nt s13190c1f6;
  ::S13190C3_nt s13190c1f7;
  ::S13190C4 s13190c1f8;
  ::S13190C5_nt s13190c1f9;
  ::S13190C6 s13190c1f10;
  ::S13190C7 s13190c1f11;
  ::S13190C8_nt s13190c1f12;
  ::S13190C9 s13190c1f13;
};
//SIG(1 S13190C1) C1{ Fi[2] Fp Fi Fp Fi Fp FC2{ Fi Fp[3]} FC3{ Fi[2] Fp Fi} FC4{ Fi[3] Fp[6] Fi[2]} FC5{ Fi} FC6{ Fi Fp[2]} FC7{ Fi Fp[3] Fi[3]} FC8{ Fi[3]} FC9{ Fi FU10{ Fi}}}



static void Test_S13190C1()
{
  {
    init_simple_test("S13190C1");
    S13190C1 lv;
    check2(sizeof(lv), ABISELECT(280,168), "sizeof(S13190C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13190C1)");
    check_field_offset(lv, s13190c1f0, 0, "S13190C1.s13190c1f0");
    check_field_offset(lv, s13190c1f1, 8, "S13190C1.s13190c1f1");
    check_field_offset(lv, s13190c1f2, ABISELECT(16,12), "S13190C1.s13190c1f2");
    check_field_offset(lv, s13190c1f3, ABISELECT(24,16), "S13190C1.s13190c1f3");
    check_field_offset(lv, s13190c1f4, ABISELECT(32,20), "S13190C1.s13190c1f4");
    check_field_offset(lv, s13190c1f5, ABISELECT(40,24), "S13190C1.s13190c1f5");
    check_field_offset(lv, s13190c1f6, ABISELECT(48,28), "S13190C1.s13190c1f6");
    check_field_offset(lv, s13190c1f7, ABISELECT(80,44), "S13190C1.s13190c1f7");
    check_field_offset(lv, s13190c1f8, ABISELECT(104,60), "S13190C1.s13190c1f8");
    check_field_offset(lv, s13190c1f9, ABISELECT(176,104), "S13190C1.s13190c1f9");
    check_field_offset(lv, s13190c1f10, ABISELECT(184,108), "S13190C1.s13190c1f10");
    check_field_offset(lv, s13190c1f11, ABISELECT(208,120), "S13190C1.s13190c1f11");
    check_field_offset(lv, s13190c1f12, ABISELECT(256,148), "S13190C1.s13190c1f12");
    check_field_offset(lv, s13190c1f13, ABISELECT(268,160), "S13190C1.s13190c1f13");
  }
}
static Arrange_To_Call_Me vS13190C1(Test_S13190C1, "S13190C1", ABISELECT(280,168));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10279C2_nt  {
  void *s10279c2f0;
  int s10279c2f1;
  virtual  ~S10279C2_nt(); // _ZN11S10279C2_ntD1Ev
  virtual void  v9(); // _ZN11S10279C2_nt2v9Ev
  virtual void  v10(); // _ZN11S10279C2_nt3v10Ev
  virtual void  v11(); // _ZN11S10279C2_nt3v11Ev
  virtual void  v12(); // _ZN11S10279C2_nt3v12Ev
  virtual void  v13(); // _ZN11S10279C2_nt3v13Ev
  virtual void  v14(); // _ZN11S10279C2_nt3v14Ev
  virtual void  v15(); // _ZN11S10279C2_nt3v15Ev
  virtual void  v16(); // _ZN11S10279C2_nt3v16Ev
  virtual void  v17(); // _ZN11S10279C2_nt3v17Ev
  virtual void  v18(); // _ZN11S10279C2_nt3v18Ev
  S10279C2_nt(); // tgen
};
//SIG(-1 S10279C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fi}


 S10279C2_nt ::~S10279C2_nt(){ note_dtor("S10279C2_nt", this);}
void  S10279C2_nt ::v9(){vfunc_called(this, "_ZN11S10279C2_nt2v9Ev");}
void  S10279C2_nt ::v10(){vfunc_called(this, "_ZN11S10279C2_nt3v10Ev");}
void  S10279C2_nt ::v11(){vfunc_called(this, "_ZN11S10279C2_nt3v11Ev");}
void  S10279C2_nt ::v12(){vfunc_called(this, "_ZN11S10279C2_nt3v12Ev");}
void  S10279C2_nt ::v13(){vfunc_called(this, "_ZN11S10279C2_nt3v13Ev");}
void  S10279C2_nt ::v14(){vfunc_called(this, "_ZN11S10279C2_nt3v14Ev");}
void  S10279C2_nt ::v15(){vfunc_called(this, "_ZN11S10279C2_nt3v15Ev");}
void  S10279C2_nt ::v16(){vfunc_called(this, "_ZN11S10279C2_nt3v16Ev");}
void  S10279C2_nt ::v17(){vfunc_called(this, "_ZN11S10279C2_nt3v17Ev");}
void  S10279C2_nt ::v18(){vfunc_called(this, "_ZN11S10279C2_nt3v18Ev");}
S10279C2_nt ::S10279C2_nt(){ note_ctor("S10279C2_nt", this);} // tgen

//skip512 S10279C2_nt

#else // __cplusplus

extern void _ZN11S10279C2_ntC1Ev();
extern void _ZN11S10279C2_ntD1Ev();
Name_Map name_map_S10279C2_nt[] = {
  NSPAIR(_ZN11S10279C2_ntC1Ev),
  NSPAIR(_ZN11S10279C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10279C2_nt[];
extern void _ZN11S10279C2_ntD1Ev();
extern void _ZN11S10279C2_ntD0Ev();
extern void _ZN11S10279C2_nt2v9Ev();
extern void _ZN11S10279C2_nt3v10Ev();
extern void _ZN11S10279C2_nt3v11Ev();
extern void _ZN11S10279C2_nt3v12Ev();
extern void _ZN11S10279C2_nt3v13Ev();
extern void _ZN11S10279C2_nt3v14Ev();
extern void _ZN11S10279C2_nt3v15Ev();
extern void _ZN11S10279C2_nt3v16Ev();
extern void _ZN11S10279C2_nt3v17Ev();
extern void _ZN11S10279C2_nt3v18Ev();
static  VTBL_ENTRY vtc_S10279C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10279C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S10279C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI11S10279C2_nt[];
VTBL_ENTRY *P__ZTI11S10279C2_nt = _ZTI11S10279C2_nt; 
extern  VTBL_ENTRY _ZTV11S10279C2_nt[];
Class_Descriptor cd_S10279C2_nt = {  "S10279C2_nt", // class name
  0,0,//no base classes
  &(vtc_S10279C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI11S10279C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10279C2_nt),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10279C1  : S10279C2_nt {
  ::S8053C10_nt s10279c1f0;
  void *s10279c1f1[2];
  ::S5166C36 s10279c1f2;
  void *s10279c1f3;
  char s10279c1f4;
  int s10279c1f5;
  virtual  ~S10279C1(); // _ZN8S10279C1D1Ev
  virtual void  v1(); // _ZN8S10279C12v1Ev
  virtual void  v2(); // _ZN8S10279C12v2Ev
  virtual void  v3(); // _ZN8S10279C12v3Ev
  virtual void  v4(); // _ZN8S10279C12v4Ev
  virtual void  v5(); // _ZN8S10279C12v5Ev
  virtual void  v6(); // _ZN8S10279C12v6Ev
  virtual void  v7(); // _ZN8S10279C12v7Ev
  virtual void  v8(); // _ZN8S10279C12v8Ev
  S10279C1(); // tgen
};
//SIG(1 S10279C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 FC3{ m Fp Fi FC4{ m}} Fp[2] FC5{ m Fp Fi[2] FC4} Fp Fc Fi}


 S10279C1 ::~S10279C1(){ note_dtor("S10279C1", this);}
void  S10279C1 ::v1(){vfunc_called(this, "_ZN8S10279C12v1Ev");}
void  S10279C1 ::v2(){vfunc_called(this, "_ZN8S10279C12v2Ev");}
void  S10279C1 ::v3(){vfunc_called(this, "_ZN8S10279C12v3Ev");}
void  S10279C1 ::v4(){vfunc_called(this, "_ZN8S10279C12v4Ev");}
void  S10279C1 ::v5(){vfunc_called(this, "_ZN8S10279C12v5Ev");}
void  S10279C1 ::v6(){vfunc_called(this, "_ZN8S10279C12v6Ev");}
void  S10279C1 ::v7(){vfunc_called(this, "_ZN8S10279C12v7Ev");}
void  S10279C1 ::v8(){vfunc_called(this, "_ZN8S10279C12v8Ev");}
S10279C1 ::S10279C1(){ note_ctor("S10279C1", this);} // tgen

static void Test_S10279C1()
{
  extern Class_Descriptor cd_S10279C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S10279C1, buf);
    S10279C1 *dp, &lv = *(dp=new (buf) S10279C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S10279C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10279C1)");
    check_base_class_offset(lv, (S10279C2_nt*), 0, "S10279C1");
    check_field_offset(lv, s10279c1f0, ABISELECT(24,12), "S10279C1.s10279c1f0");
    check_field_offset(lv, s10279c1f1, ABISELECT(40,24), "S10279C1.s10279c1f1");
    check_field_offset(lv, s10279c1f2, ABISELECT(56,32), "S10279C1.s10279c1f2");
    check_field_offset(lv, s10279c1f3, ABISELECT(80,48), "S10279C1.s10279c1f3");
    check_field_offset(lv, s10279c1f4, ABISELECT(88,52), "S10279C1.s10279c1f4");
    check_field_offset(lv, s10279c1f5, ABISELECT(92,56), "S10279C1.s10279c1f5");
    test_class_info(&lv, &cd_S10279C1);
    dp->~S10279C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10279C1(Test_S10279C1, "S10279C1", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN8S10279C1C1Ev();
extern void _ZN8S10279C1D1Ev();
Name_Map name_map_S10279C1[] = {
  NSPAIR(_ZN8S10279C1C1Ev),
  NSPAIR(_ZN8S10279C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10279C2_nt;
extern VTBL_ENTRY _ZTI11S10279C2_nt[];
extern  VTBL_ENTRY _ZTV11S10279C2_nt[];
static Base_Class bases_S10279C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10279C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10279C1[];
extern void _ZN8S10279C1D1Ev();
extern void _ZN8S10279C1D0Ev();
extern void _ZN11S10279C2_nt2v9Ev();
extern void _ZN11S10279C2_nt3v10Ev();
extern void _ZN11S10279C2_nt3v11Ev();
extern void _ZN11S10279C2_nt3v12Ev();
extern void _ZN11S10279C2_nt3v13Ev();
extern void _ZN11S10279C2_nt3v14Ev();
extern void _ZN11S10279C2_nt3v15Ev();
extern void _ZN11S10279C2_nt3v16Ev();
extern void _ZN11S10279C2_nt3v17Ev();
extern void _ZN11S10279C2_nt3v18Ev();
extern void _ZN8S10279C12v1Ev();
extern void _ZN8S10279C12v2Ev();
extern void _ZN8S10279C12v3Ev();
extern void _ZN8S10279C12v4Ev();
extern void _ZN8S10279C12v5Ev();
extern void _ZN8S10279C12v6Ev();
extern void _ZN8S10279C12v7Ev();
extern void _ZN8S10279C12v8Ev();
static  VTBL_ENTRY vtc_S10279C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10279C1[0]),
  (VTBL_ENTRY)&_ZN8S10279C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10279C1D0Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S10279C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN8S10279C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10279C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10279C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10279C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10279C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10279C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10279C12v7Ev,
  (VTBL_ENTRY)&_ZN8S10279C12v8Ev,
};
extern VTBL_ENTRY _ZTI8S10279C1[];
extern  VTBL_ENTRY _ZTV8S10279C1[];
Class_Descriptor cd_S10279C1 = {  "S10279C1", // class name
  bases_S10279C1, 1,
  &(vtc_S10279C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI8S10279C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10279C1),22, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5393C3  {
  virtual  ~S5393C3(); // _ZN7S5393C3D1Ev
  virtual void  v7(); // _ZN7S5393C32v7Ev
  virtual void  v8(); // _ZN7S5393C32v8Ev
  virtual void  v9(); // _ZN7S5393C32v9Ev
  S5393C3(); // tgen
};
//SIG(-1 S5393C3) C1{ vd v1 v2 v3}


 S5393C3 ::~S5393C3(){ note_dtor("S5393C3", this);}
void  S5393C3 ::v7(){vfunc_called(this, "_ZN7S5393C32v7Ev");}
void  S5393C3 ::v8(){vfunc_called(this, "_ZN7S5393C32v8Ev");}
void  S5393C3 ::v9(){vfunc_called(this, "_ZN7S5393C32v9Ev");}
S5393C3 ::S5393C3(){ note_ctor("S5393C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5393C3C1Ev();
extern void _ZN7S5393C3D1Ev();
Name_Map name_map_S5393C3[] = {
  NSPAIR(_ZN7S5393C3C1Ev),
  NSPAIR(_ZN7S5393C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5393C3[];
extern void _ZN7S5393C3D1Ev();
extern void _ZN7S5393C3D0Ev();
extern void _ZN7S5393C32v7Ev();
extern void _ZN7S5393C32v8Ev();
extern void _ZN7S5393C32v9Ev();
static  VTBL_ENTRY vtc_S5393C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5393C3[0]),
  (VTBL_ENTRY)&_ZN7S5393C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5393C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5393C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5393C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5393C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S5393C3[];
extern  VTBL_ENTRY _ZTV7S5393C3[];
Class_Descriptor cd_S5393C3 = {  "S5393C3", // class name
  0,0,//no base classes
  &(vtc_S5393C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5393C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5393C3),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  S5393C2  : S5393C3 {
  ::S1378C23 s5393c2f0;
  ::S1378C23 s5393c2f1;
  int s5393c2f2[3];
  virtual void  v10(); // _ZN7S5393C23v10Ev
  virtual void  v11(); // _ZN7S5393C23v11Ev
  virtual void  v12(); // _ZN7S5393C23v12Ev
  virtual void  v13(); // _ZN7S5393C23v13Ev
  virtual void  v14(); // _ZN7S5393C23v14Ev
  virtual void  v15(); // _ZN7S5393C23v15Ev
  virtual void  v16(); // _ZN7S5393C23v16Ev
  virtual void  v17(); // _ZN7S5393C23v17Ev
  virtual void  v18(); // _ZN7S5393C23v18Ev
  virtual void  v19(); // _ZN7S5393C23v19Ev
  virtual void  v20(); // _ZN7S5393C23v20Ev
  virtual void  v21(); // _ZN7S5393C23v21Ev
  virtual void  v22(); // _ZN7S5393C23v22Ev
  virtual void  v23(); // _ZN7S5393C23v23Ev
  ~S5393C2(); // tgen
  S5393C2(); // tgen
};
//SIG(-1 S5393C2) C1{ BC2{ vd v15 v16 v17} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 FC3{ BC4{ m Fp Fi[2]}} FC3 Fi[3]}


void  S5393C2 ::v10(){vfunc_called(this, "_ZN7S5393C23v10Ev");}
void  S5393C2 ::v11(){vfunc_called(this, "_ZN7S5393C23v11Ev");}
void  S5393C2 ::v12(){vfunc_called(this, "_ZN7S5393C23v12Ev");}
void  S5393C2 ::v13(){vfunc_called(this, "_ZN7S5393C23v13Ev");}
void  S5393C2 ::v14(){vfunc_called(this, "_ZN7S5393C23v14Ev");}
void  S5393C2 ::v15(){vfunc_called(this, "_ZN7S5393C23v15Ev");}
void  S5393C2 ::v16(){vfunc_called(this, "_ZN7S5393C23v16Ev");}
void  S5393C2 ::v17(){vfunc_called(this, "_ZN7S5393C23v17Ev");}
void  S5393C2 ::v18(){vfunc_called(this, "_ZN7S5393C23v18Ev");}
void  S5393C2 ::v19(){vfunc_called(this, "_ZN7S5393C23v19Ev");}
void  S5393C2 ::v20(){vfunc_called(this, "_ZN7S5393C23v20Ev");}
void  S5393C2 ::v21(){vfunc_called(this, "_ZN7S5393C23v21Ev");}
void  S5393C2 ::v22(){vfunc_called(this, "_ZN7S5393C23v22Ev");}
void  S5393C2 ::v23(){vfunc_called(this, "_ZN7S5393C23v23Ev");}
S5393C2 ::~S5393C2(){ note_dtor("S5393C2", this);} // tgen
S5393C2 ::S5393C2(){ note_ctor("S5393C2", this);} // tgen

static void Test_S5393C2()
{
  extern Class_Descriptor cd_S5393C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S5393C2, buf);
    S5393C2 *dp, &lv = *(dp=new (buf) S5393C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S5393C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5393C2)");
    check_base_class_offset(lv, (S5393C3*), 0, "S5393C2");
    check_field_offset(lv, s5393c2f0, ABISELECT(8,4), "S5393C2.s5393c2f0");
    check_field_offset(lv, s5393c2f1, ABISELECT(24,16), "S5393C2.s5393c2f1");
    check_field_offset(lv, s5393c2f2, ABISELECT(40,28), "S5393C2.s5393c2f2");
    test_class_info(&lv, &cd_S5393C2);
    dp->~S5393C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5393C2(Test_S5393C2, "S5393C2", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S5393C2C1Ev();
extern void _ZN7S5393C2D1Ev();
Name_Map name_map_S5393C2[] = {
  NSPAIR(_ZN7S5393C2C1Ev),
  NSPAIR(_ZN7S5393C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5393C3;
extern VTBL_ENTRY _ZTI7S5393C3[];
extern  VTBL_ENTRY _ZTV7S5393C3[];
static Base_Class bases_S5393C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5393C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S5393C2[];
extern void _ZN7S5393C2D1Ev();
extern void _ZN7S5393C2D0Ev();
extern void _ZN7S5393C32v7Ev();
extern void _ZN7S5393C32v8Ev();
extern void _ZN7S5393C32v9Ev();
extern void _ZN7S5393C23v10Ev();
extern void _ZN7S5393C23v11Ev();
extern void _ZN7S5393C23v12Ev();
extern void _ZN7S5393C23v13Ev();
extern void _ZN7S5393C23v14Ev();
extern void _ZN7S5393C23v15Ev();
extern void _ZN7S5393C23v16Ev();
extern void _ZN7S5393C23v17Ev();
extern void _ZN7S5393C23v18Ev();
extern void _ZN7S5393C23v19Ev();
extern void _ZN7S5393C23v20Ev();
extern void _ZN7S5393C23v21Ev();
extern void _ZN7S5393C23v22Ev();
extern void _ZN7S5393C23v23Ev();
static  VTBL_ENTRY vtc_S5393C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5393C2[0]),
  (VTBL_ENTRY)&_ZN7S5393C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5393C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5393C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5393C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5393C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v15Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v16Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v17Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v18Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v19Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v20Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v21Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v22Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v23Ev,
};
extern VTBL_ENTRY _ZTI7S5393C2[];
extern  VTBL_ENTRY _ZTV7S5393C2[];
Class_Descriptor cd_S5393C2 = {  "S5393C2", // class name
  bases_S5393C2, 1,
  &(vtc_S5393C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S5393C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5393C2),21, //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  S5393C1  : S5393C2 {
  int s5393c1f0;
  void *s5393c1f1[2];
  virtual void  v1(); // _ZN7S5393C12v1Ev
  virtual void  v2(); // _ZN7S5393C12v2Ev
  virtual void  v3(); // _ZN7S5393C12v3Ev
  virtual void  v4(); // _ZN7S5393C12v4Ev
  virtual void  v5(); // _ZN7S5393C12v5Ev
  virtual void  v6(); // _ZN7S5393C12v6Ev
  ~S5393C1(); // tgen
  S5393C1(); // tgen
};
//SIG(1 S5393C1) C1{ BC2{ BC3{ vd v7 v8 v9} v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 FC4{ BC5{ m Fp Fi[2]}} FC4 Fi[3]} v1 v2 v3 v4 v5 v6 Fi Fp[2]}


void  S5393C1 ::v1(){vfunc_called(this, "_ZN7S5393C12v1Ev");}
void  S5393C1 ::v2(){vfunc_called(this, "_ZN7S5393C12v2Ev");}
void  S5393C1 ::v3(){vfunc_called(this, "_ZN7S5393C12v3Ev");}
void  S5393C1 ::v4(){vfunc_called(this, "_ZN7S5393C12v4Ev");}
void  S5393C1 ::v5(){vfunc_called(this, "_ZN7S5393C12v5Ev");}
void  S5393C1 ::v6(){vfunc_called(this, "_ZN7S5393C12v6Ev");}
S5393C1 ::~S5393C1(){ note_dtor("S5393C1", this);} // tgen
S5393C1 ::S5393C1(){ note_ctor("S5393C1", this);} // tgen

static void Test_S5393C1()
{
  extern Class_Descriptor cd_S5393C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S5393C1, buf);
    S5393C1 *dp, &lv = *(dp=new (buf) S5393C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S5393C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5393C1)");
    check_base_class_offset(lv, (S5393C3*)(S5393C2*), 0, "S5393C1");
    check_base_class_offset(lv, (S5393C2*), 0, "S5393C1");
    check_field_offset(lv, s5393c1f0, ABISELECT(52,40), "S5393C1.s5393c1f0");
    check_field_offset(lv, s5393c1f1, ABISELECT(56,44), "S5393C1.s5393c1f1");
    test_class_info(&lv, &cd_S5393C1);
    dp->~S5393C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5393C1(Test_S5393C1, "S5393C1", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S5393C1C1Ev();
extern void _ZN7S5393C1D1Ev();
Name_Map name_map_S5393C1[] = {
  NSPAIR(_ZN7S5393C1C1Ev),
  NSPAIR(_ZN7S5393C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5393C3;
extern VTBL_ENTRY _ZTI7S5393C3[];
extern  VTBL_ENTRY _ZTV7S5393C3[];
extern Class_Descriptor cd_S5393C2;
extern VTBL_ENTRY _ZTI7S5393C2[];
extern  VTBL_ENTRY _ZTV7S5393C2[];
static Base_Class bases_S5393C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5393C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5393C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5393C1[];
extern void _ZN7S5393C1D1Ev();
extern void _ZN7S5393C1D0Ev();
extern void _ZN7S5393C32v7Ev();
extern void _ZN7S5393C32v8Ev();
extern void _ZN7S5393C32v9Ev();
extern void _ZN7S5393C23v10Ev();
extern void _ZN7S5393C23v11Ev();
extern void _ZN7S5393C23v12Ev();
extern void _ZN7S5393C23v13Ev();
extern void _ZN7S5393C23v14Ev();
extern void _ZN7S5393C23v15Ev();
extern void _ZN7S5393C23v16Ev();
extern void _ZN7S5393C23v17Ev();
extern void _ZN7S5393C23v18Ev();
extern void _ZN7S5393C23v19Ev();
extern void _ZN7S5393C23v20Ev();
extern void _ZN7S5393C23v21Ev();
extern void _ZN7S5393C23v22Ev();
extern void _ZN7S5393C23v23Ev();
extern void _ZN7S5393C12v1Ev();
extern void _ZN7S5393C12v2Ev();
extern void _ZN7S5393C12v3Ev();
extern void _ZN7S5393C12v4Ev();
extern void _ZN7S5393C12v5Ev();
extern void _ZN7S5393C12v6Ev();
static  VTBL_ENTRY vtc_S5393C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5393C1[0]),
  (VTBL_ENTRY)&_ZN7S5393C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5393C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5393C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5393C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5393C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v15Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v16Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v17Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v18Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v19Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v20Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v21Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v22Ev,
  (VTBL_ENTRY)&_ZN7S5393C23v23Ev,
  (VTBL_ENTRY)&_ZN7S5393C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5393C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5393C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5393C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5393C12v5Ev,
  (VTBL_ENTRY)&_ZN7S5393C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S5393C1[];
extern  VTBL_ENTRY _ZTV7S5393C1[];
Class_Descriptor cd_S5393C1 = {  "S5393C1", // class name
  bases_S5393C1, 2,
  &(vtc_S5393C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S5393C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5393C1),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  S9082C2_nt  {
  virtual  ~S9082C2_nt(); // _ZN10S9082C2_ntD1Ev
  virtual void  v2(); // _ZN10S9082C2_nt2v2Ev
  S9082C2_nt(); // tgen
};
//SIG(-1 S9082C2_nt) C1{ vd v1}


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

//skip512 S9082C2_nt

#else // __cplusplus

extern void _ZN10S9082C2_ntC1Ev();
extern void _ZN10S9082C2_ntD1Ev();
Name_Map name_map_S9082C2_nt[] = {
  NSPAIR(_ZN10S9082C2_ntC1Ev),
  NSPAIR(_ZN10S9082C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9082C2_nt[];
extern void _ZN10S9082C2_ntD1Ev();
extern void _ZN10S9082C2_ntD0Ev();
extern void _ZN10S9082C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S9082C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9082C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9082C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9082C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9082C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S9082C2_nt[];
VTBL_ENTRY *P__ZTI10S9082C2_nt = _ZTI10S9082C2_nt; 
extern  VTBL_ENTRY _ZTV10S9082C2_nt[];
Class_Descriptor cd_S9082C2_nt = {  "S9082C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9082C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S9082C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9082C2_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  S9082C5  {
  virtual  ~S9082C5(); // _ZN7S9082C5D1Ev
  virtual void  v3(); // _ZN7S9082C52v3Ev
  virtual void  v4(); // _ZN7S9082C52v4Ev
  virtual void  v5(); // _ZN7S9082C52v5Ev
  S9082C5(); // tgen
};
//SIG(-1 S9082C5) C1{ vd v1 v2 v3}


 S9082C5 ::~S9082C5(){ note_dtor("S9082C5", this);}
void  S9082C5 ::v3(){vfunc_called(this, "_ZN7S9082C52v3Ev");}
void  S9082C5 ::v4(){vfunc_called(this, "_ZN7S9082C52v4Ev");}
void  S9082C5 ::v5(){vfunc_called(this, "_ZN7S9082C52v5Ev");}
S9082C5 ::S9082C5(){ note_ctor("S9082C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9082C5C1Ev();
extern void _ZN7S9082C5D1Ev();
Name_Map name_map_S9082C5[] = {
  NSPAIR(_ZN7S9082C5C1Ev),
  NSPAIR(_ZN7S9082C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9082C5[];
extern void _ZN7S9082C5D1Ev();
extern void _ZN7S9082C5D0Ev();
extern void _ZN7S9082C52v3Ev();
extern void _ZN7S9082C52v4Ev();
extern void _ZN7S9082C52v5Ev();
static  VTBL_ENTRY vtc_S9082C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9082C5[0]),
  (VTBL_ENTRY)&_ZN7S9082C5D1Ev,
  (VTBL_ENTRY)&_ZN7S9082C5D0Ev,
  (VTBL_ENTRY)&_ZN7S9082C52v3Ev,
  (VTBL_ENTRY)&_ZN7S9082C52v4Ev,
  (VTBL_ENTRY)&_ZN7S9082C52v5Ev,
};
extern VTBL_ENTRY _ZTI7S9082C5[];
extern  VTBL_ENTRY _ZTV7S9082C5[];
Class_Descriptor cd_S9082C5 = {  "S9082C5", // class name
  0,0,//no base classes
  &(vtc_S9082C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9082C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9082C5),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  S9082C4  : S9082C5 {
  ::S5166C36 s9082c4f0;
  ::S2355C13_nt s9082c4f1;
  char s9082c4f2;
  virtual  ~S9082C4(); // _ZN7S9082C4D1Ev
  virtual void  v6(); // _ZN7S9082C42v6Ev
  virtual void  v7(); // _ZN7S9082C42v7Ev
  virtual void  v8(); // _ZN7S9082C42v8Ev
  S9082C4(); // tgen
};
//SIG(-1 S9082C4) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S9082C4 ::~S9082C4(){ note_dtor("S9082C4", this);}
void  S9082C4 ::v6(){vfunc_called(this, "_ZN7S9082C42v6Ev");}
void  S9082C4 ::v7(){vfunc_called(this, "_ZN7S9082C42v7Ev");}
void  S9082C4 ::v8(){vfunc_called(this, "_ZN7S9082C42v8Ev");}
S9082C4 ::S9082C4(){ note_ctor("S9082C4", this);} // tgen

static void Test_S9082C4()
{
  extern Class_Descriptor cd_S9082C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S9082C4, buf);
    S9082C4 *dp, &lv = *(dp=new (buf) S9082C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S9082C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9082C4)");
    check_base_class_offset(lv, (S9082C5*), 0, "S9082C4");
    check_field_offset(lv, s9082c4f0, ABISELECT(8,4), "S9082C4.s9082c4f0");
    check_field_offset(lv, s9082c4f1, ABISELECT(32,20), "S9082C4.s9082c4f1");
    check_field_offset(lv, s9082c4f2, ABISELECT(64,52), "S9082C4.s9082c4f2");
    test_class_info(&lv, &cd_S9082C4);
    dp->~S9082C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9082C4(Test_S9082C4, "S9082C4", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S9082C4C1Ev();
extern void _ZN7S9082C4D1Ev();
Name_Map name_map_S9082C4[] = {
  NSPAIR(_ZN7S9082C4C1Ev),
  NSPAIR(_ZN7S9082C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9082C5;
extern VTBL_ENTRY _ZTI7S9082C5[];
extern  VTBL_ENTRY _ZTV7S9082C5[];
static Base_Class bases_S9082C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9082C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9082C4[];
extern void _ZN7S9082C4D1Ev();
extern void _ZN7S9082C4D0Ev();
extern void _ZN7S9082C52v3Ev();
extern void _ZN7S9082C52v4Ev();
extern void _ZN7S9082C52v5Ev();
extern void _ZN7S9082C42v6Ev();
extern void _ZN7S9082C42v7Ev();
extern void _ZN7S9082C42v8Ev();
static  VTBL_ENTRY vtc_S9082C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9082C4[0]),
  (VTBL_ENTRY)&_ZN7S9082C4D1Ev,
  (VTBL_ENTRY)&_ZN7S9082C4D0Ev,
  (VTBL_ENTRY)&_ZN7S9082C52v3Ev,
  (VTBL_ENTRY)&_ZN7S9082C52v4Ev,
  (VTBL_ENTRY)&_ZN7S9082C52v5Ev,
  (VTBL_ENTRY)&_ZN7S9082C42v6Ev,
  (VTBL_ENTRY)&_ZN7S9082C42v7Ev,
  (VTBL_ENTRY)&_ZN7S9082C42v8Ev,
};
extern VTBL_ENTRY _ZTI7S9082C4[];
extern  VTBL_ENTRY _ZTV7S9082C4[];
Class_Descriptor cd_S9082C4 = {  "S9082C4", // class name
  bases_S9082C4, 1,
  &(vtc_S9082C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S9082C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9082C4),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  S9082C3  : S9082C4 {
  ::S5166C24 s9082c3f0;
  virtual  ~S9082C3(); // _ZN7S9082C3D1Ev
  S9082C3(); // tgen
};
//SIG(-1 S9082C3) C1{ BC2{ BC3{ vd v1 v2 v3} vd v4 v5 v6 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd FC7{ BC8{ m Fp Fi FC9{ m} FC10{ m}}}}


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

static void Test_S9082C3()
{
  extern Class_Descriptor cd_S9082C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,18)];
    init_test(&cd_S9082C3, buf);
    S9082C3 *dp, &lv = *(dp=new (buf) S9082C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,68), "sizeof(S9082C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9082C3)");
    check_base_class_offset(lv, (S9082C5*)(S9082C4*), 0, "S9082C3");
    check_base_class_offset(lv, (S9082C4*), 0, "S9082C3");
    check_field_offset(lv, s9082c3f0, ABISELECT(72,56), "S9082C3.s9082c3f0");
    test_class_info(&lv, &cd_S9082C3);
    dp->~S9082C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9082C3(Test_S9082C3, "S9082C3", ABISELECT(88,68));

#else // __cplusplus

extern void _ZN7S9082C3C1Ev();
extern void _ZN7S9082C3D1Ev();
Name_Map name_map_S9082C3[] = {
  NSPAIR(_ZN7S9082C3C1Ev),
  NSPAIR(_ZN7S9082C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9082C5;
extern VTBL_ENTRY _ZTI7S9082C5[];
extern  VTBL_ENTRY _ZTV7S9082C5[];
extern Class_Descriptor cd_S9082C4;
extern VTBL_ENTRY _ZTI7S9082C4[];
extern  VTBL_ENTRY _ZTV7S9082C4[];
static Base_Class bases_S9082C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9082C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S9082C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S9082C3[];
extern void _ZN7S9082C3D1Ev();
extern void _ZN7S9082C3D0Ev();
extern void _ZN7S9082C52v3Ev();
extern void _ZN7S9082C52v4Ev();
extern void _ZN7S9082C52v5Ev();
extern void _ZN7S9082C42v6Ev();
extern void _ZN7S9082C42v7Ev();
extern void _ZN7S9082C42v8Ev();
static  VTBL_ENTRY vtc_S9082C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9082C3[0]),
  (VTBL_ENTRY)&_ZN7S9082C3D1Ev,
  (VTBL_ENTRY)&_ZN7S9082C3D0Ev,
  (VTBL_ENTRY)&_ZN7S9082C52v3Ev,
  (VTBL_ENTRY)&_ZN7S9082C52v4Ev,
  (VTBL_ENTRY)&_ZN7S9082C52v5Ev,
  (VTBL_ENTRY)&_ZN7S9082C42v6Ev,
  (VTBL_ENTRY)&_ZN7S9082C42v7Ev,
  (VTBL_ENTRY)&_ZN7S9082C42v8Ev,
};
extern VTBL_ENTRY _ZTI7S9082C3[];
extern  VTBL_ENTRY _ZTV7S9082C3[];
Class_Descriptor cd_S9082C3 = {  "S9082C3", // class name
  bases_S9082C3, 2,
  &(vtc_S9082C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,68), // object size
  NSPAIRA(_ZTI7S9082C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9082C3),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  S9082C1  : S9082C2_nt {
  void *s9082c1f0;
  char s9082c1f1;
  ::S9082C3 s9082c1f2;
  virtual  ~S9082C1(); // _ZN7S9082C1D1Ev
  virtual void  v1(); // _ZN7S9082C12v1Ev
  S9082C1(); // tgen
};
//SIG(1 S9082C1) C1{ BC2{ vd v2} vd v1 Fp Fc FC3{ BC4{ BC5{ vd v3 v4 v5} vd v6 v7 v8 FC6{ m Fp Fi[2] FC7{ m}} FC8{ m FL[4]} Fc} vd FC9{ BC10{ m Fp Fi FC11{ m} FC12{ m}}}}}


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

static void Test_S9082C1()
{
  extern Class_Descriptor cd_S9082C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,21)];
    init_test(&cd_S9082C1, buf);
    S9082C1 *dp, &lv = *(dp=new (buf) S9082C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,80), "sizeof(S9082C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9082C1)");
    check_base_class_offset(lv, (S9082C2_nt*), 0, "S9082C1");
    check_field_offset(lv, s9082c1f0, ABISELECT(8,4), "S9082C1.s9082c1f0");
    check_field_offset(lv, s9082c1f1, ABISELECT(16,8), "S9082C1.s9082c1f1");
    check_field_offset(lv, s9082c1f2, ABISELECT(24,12), "S9082C1.s9082c1f2");
    test_class_info(&lv, &cd_S9082C1);
    dp->~S9082C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9082C1(Test_S9082C1, "S9082C1", ABISELECT(112,80));

#else // __cplusplus

extern void _ZN7S9082C1C1Ev();
extern void _ZN7S9082C1D1Ev();
Name_Map name_map_S9082C1[] = {
  NSPAIR(_ZN7S9082C1C1Ev),
  NSPAIR(_ZN7S9082C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9082C2_nt;
extern VTBL_ENTRY _ZTI10S9082C2_nt[];
extern  VTBL_ENTRY _ZTV10S9082C2_nt[];
static Base_Class bases_S9082C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9082C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9082C1[];
extern void _ZN7S9082C1D1Ev();
extern void _ZN7S9082C1D0Ev();
extern void _ZN10S9082C2_nt2v2Ev();
extern void _ZN7S9082C12v1Ev();
static  VTBL_ENTRY vtc_S9082C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9082C1[0]),
  (VTBL_ENTRY)&_ZN7S9082C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9082C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9082C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S9082C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9082C1[];
extern  VTBL_ENTRY _ZTV7S9082C1[];
Class_Descriptor cd_S9082C1 = {  "S9082C1", // class name
  bases_S9082C1, 1,
  &(vtc_S9082C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,80), // object size
  NSPAIRA(_ZTI7S9082C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9082C1),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  S15448C5_nt  {
  char s15448c5f0[2];
  short s15448c5f1;
  ::S13190C5_nt s15448c5f2;
  char s15448c5f3[8];
};
//SIG(-1 S15448C5_nt) C1{ Fc[2] Fs FC2{ Fi} Fc[8]}



//skip512 S15448C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15448C4_nt  {
  ::S15448C5_nt s15448c4f0;
  void  mf15448c4(); // _ZN11S15448C4_nt9mf15448c4Ev
};
//SIG(-1 S15448C4_nt) C1{ m FC2{ Fc[2] Fs FC3{ Fi} Fc[8]}}


void  S15448C4_nt ::mf15448c4(){}

//skip512 S15448C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15448C8_nt  {
  ::S1378C22 s15448c8f0;
  ::S1378C22 s15448c8f1;
  int s15448c8f2;
  ::S1378C22 s15448c8f3;
  ::S1378C19 s15448c8f4;
  ::S1378C22 s15448c8f5;
  int s15448c8f6;
  void  mf15448c8(); // _ZN11S15448C8_nt9mf15448c8Ev
};
//SIG(-1 S15448C8_nt) C1{ m FC2{ BC3{ BC4{ m Fp Fi[2]}}} FC2 Fi FC2 FC5{ BC4} FC2 Fi}


void  S15448C8_nt ::mf15448c8(){}

//skip512 S15448C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15448C1  {
  ::S1378C23 s15448c1f0;
  int s15448c1f1[4];
  void *s15448c1f2;
  ::S15448C4_nt s15448c1f3;
  int s15448c1f4;
  void *s15448c1f5;
  ::S1378C19 s15448c1f6;
  int s15448c1f7;
  ::S15448C8_nt s15448c1f8;
  void *s15448c1f9;
  int s15448c1f10;
  void  mf15448c1(); // _ZN8S15448C19mf15448c1Ev
};
//SIG(1 S15448C1) C1{ m FC2{ BC3{ m Fp Fi[2]}} Fi[4] Fp FC4{ m FC5{ Fc[2] Fs FC6{ Fi} Fc[8]}} Fi Fp FC7{ BC3} Fi FC8{ m FC9{ BC2} FC9 Fi FC9 FC7 FC9 Fi} Fp Fi}


void  S15448C1 ::mf15448c1(){}

static void Test_S15448C1()
{
  {
    init_simple_test("S15448C1");
    S15448C1 lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S15448C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15448C1)");
    check_field_offset(lv, s15448c1f0, 0, "S15448C1.s15448c1f0");
    check_field_offset(lv, s15448c1f1, ABISELECT(16,12), "S15448C1.s15448c1f1");
    check_field_offset(lv, s15448c1f2, ABISELECT(32,28), "S15448C1.s15448c1f2");
    check_field_offset(lv, s15448c1f3, ABISELECT(40,32), "S15448C1.s15448c1f3");
    check_field_offset(lv, s15448c1f4, ABISELECT(56,48), "S15448C1.s15448c1f4");
    check_field_offset(lv, s15448c1f5, ABISELECT(64,52), "S15448C1.s15448c1f5");
    check_field_offset(lv, s15448c1f6, ABISELECT(72,56), "S15448C1.s15448c1f6");
    check_field_offset(lv, s15448c1f7, ABISELECT(88,68), "S15448C1.s15448c1f7");
    check_field_offset(lv, s15448c1f8, ABISELECT(96,72), "S15448C1.s15448c1f8");
    check_field_offset(lv, s15448c1f9, ABISELECT(192,140), "S15448C1.s15448c1f9");
    check_field_offset(lv, s15448c1f10, ABISELECT(200,144), "S15448C1.s15448c1f10");
  }
}
static Arrange_To_Call_Me vS15448C1(Test_S15448C1, "S15448C1", ABISELECT(208,148));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4426C3  {
  ::S8053C10_nt s4426c3f0;
  int s4426c3f1[2];
  char s4426c3f2;
  virtual  ~S4426C3(); // _ZN7S4426C3D1Ev
  virtual void  v2(); // _ZN7S4426C32v2Ev
  virtual void  v3(); // _ZN7S4426C32v3Ev
  virtual void  v4(); // _ZN7S4426C32v4Ev
  S4426C3(); // tgen
};
//SIG(-1 S4426C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4426C3 ::~S4426C3(){ note_dtor("S4426C3", this);}
void  S4426C3 ::v2(){vfunc_called(this, "_ZN7S4426C32v2Ev");}
void  S4426C3 ::v3(){vfunc_called(this, "_ZN7S4426C32v3Ev");}
void  S4426C3 ::v4(){vfunc_called(this, "_ZN7S4426C32v4Ev");}
S4426C3 ::S4426C3(){ note_ctor("S4426C3", this);} // tgen

static void Test_S4426C3()
{
  extern Class_Descriptor cd_S4426C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4426C3, buf);
    S4426C3 *dp, &lv = *(dp=new (buf) S4426C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4426C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4426C3)");
    check_field_offset(lv, s4426c3f0, ABISELECT(8,4), "S4426C3.s4426c3f0");
    check_field_offset(lv, s4426c3f1, ABISELECT(24,16), "S4426C3.s4426c3f1");
    check_field_offset(lv, s4426c3f2, ABISELECT(32,24), "S4426C3.s4426c3f2");
    test_class_info(&lv, &cd_S4426C3);
    dp->~S4426C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4426C3(Test_S4426C3, "S4426C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4426C3C1Ev();
extern void _ZN7S4426C3D1Ev();
Name_Map name_map_S4426C3[] = {
  NSPAIR(_ZN7S4426C3C1Ev),
  NSPAIR(_ZN7S4426C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4426C3[];
extern void _ZN7S4426C3D1Ev();
extern void _ZN7S4426C3D0Ev();
extern void _ZN7S4426C32v2Ev();
extern void _ZN7S4426C32v3Ev();
extern void _ZN7S4426C32v4Ev();
static  VTBL_ENTRY vtc_S4426C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4426C3[0]),
  (VTBL_ENTRY)&_ZN7S4426C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4426C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4426C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4426C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4426C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4426C3[];
extern  VTBL_ENTRY _ZTV7S4426C3[];
Class_Descriptor cd_S4426C3 = {  "S4426C3", // class name
  0,0,//no base classes
  &(vtc_S4426C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4426C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4426C3),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  S4426C7_nt  {
  __tsi64 s4426c7f0[4];
};
//SIG(-1 S4426C7_nt) C1{ FL[4]}



//skip512 S4426C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4426C6_nt  {
  ::S4426C7_nt s4426c6f0;
  void  mf4426c6(); // _ZN10S4426C6_nt8mf4426c6Ev
};
//SIG(-1 S4426C6_nt) C1{ m FC2{ FL[4]}}


void  S4426C6_nt ::mf4426c6(){}

//skip512 S4426C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4426C10_nt  {
  int s4426c10f0[4];
};
//SIG(-1 S4426C10_nt) C1{ Fi[4]}



//skip512 S4426C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4426C9_nt  {
  void *s4426c9f0;
  ::S4426C10_nt s4426c9f1;
  void  mf4426c9(); // _ZN10S4426C9_nt8mf4426c9Ev
};
//SIG(-1 S4426C9_nt) C1{ m Fp FC2{ Fi[4]}}


void  S4426C9_nt ::mf4426c9(){}

//skip512 S4426C9_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S4426C8  : S4426C9_nt {
  int s4426c8f0;
  virtual  ~S4426C8(); // _ZN7S4426C8D1Ev
  virtual void  v7(); // _ZN7S4426C82v7Ev
  S4426C8(); // tgen
};
//SIG(-1 S4426C8) C1{ BC2{ m Fp FC3{ Fi[4]}} vd v1 Fi}


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

static void Test_S4426C8()
{
  extern Class_Descriptor cd_S4426C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4426C8, buf);
    S4426C8 *dp, &lv = *(dp=new (buf) S4426C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4426C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4426C8)");
    check_base_class_offset(lv, (S4426C9_nt*), ABISELECT(8,4), "S4426C8");
    check_field_offset(lv, s4426c8f0, ABISELECT(32,24), "S4426C8.s4426c8f0");
    test_class_info(&lv, &cd_S4426C8);
    dp->~S4426C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4426C8(Test_S4426C8, "S4426C8", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4426C8C1Ev();
extern void _ZN7S4426C8D1Ev();
Name_Map name_map_S4426C8[] = {
  NSPAIR(_ZN7S4426C8C1Ev),
  NSPAIR(_ZN7S4426C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4426C9_nt;
extern VTBL_ENTRY _ZTI10S4426C9_nt[];
static Base_Class bases_S4426C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4426C9_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 _ZTI7S4426C8[];
extern void _ZN7S4426C8D1Ev();
extern void _ZN7S4426C8D0Ev();
extern void _ZN7S4426C82v7Ev();
static  VTBL_ENTRY vtc_S4426C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4426C8[0]),
  (VTBL_ENTRY)&_ZN7S4426C8D1Ev,
  (VTBL_ENTRY)&_ZN7S4426C8D0Ev,
  (VTBL_ENTRY)&_ZN7S4426C82v7Ev,
};
extern VTBL_ENTRY _ZTI7S4426C8[];
extern  VTBL_ENTRY _ZTV7S4426C8[];
Class_Descriptor cd_S4426C8 = {  "S4426C8", // class name
  bases_S4426C8, 1,
  &(vtc_S4426C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4426C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S4426C8),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4426C2  : S4426C3 {
  void *s4426c2f0;
  char s4426c2f1;
  int s4426c2f2[3];
  ::S4426C6_nt s4426c2f3;
  ::S4426C8 s4426c2f4;
  virtual  ~S4426C2(); // _ZN7S4426C2D1Ev
  virtual void  v5(); // _ZN7S4426C22v5Ev
  virtual void  v6(); // _ZN7S4426C22v6Ev
  S4426C2(); // tgen
};
//SIG(-1 S4426C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp Fc Fi[3] FC5{ m FC6{ FL[4]}} FC7{ BC8{ m Fp FC9{ Fi[4]}} vd v6 Fi}}


 S4426C2 ::~S4426C2(){ note_dtor("S4426C2", this);}
void  S4426C2 ::v5(){vfunc_called(this, "_ZN7S4426C22v5Ev");}
void  S4426C2 ::v6(){vfunc_called(this, "_ZN7S4426C22v6Ev");}
S4426C2 ::S4426C2(){ note_ctor("S4426C2", this);} // tgen

static void Test_S4426C2()
{
  extern Class_Descriptor cd_S4426C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,28)];
    init_test(&cd_S4426C2, buf);
    S4426C2 *dp, &lv = *(dp=new (buf) S4426C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,108), "sizeof(S4426C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4426C2)");
    check_base_class_offset(lv, (S4426C3*), 0, "S4426C2");
    check_field_offset(lv, s4426c2f0, ABISELECT(40,28), "S4426C2.s4426c2f0");
    check_field_offset(lv, s4426c2f1, ABISELECT(48,32), "S4426C2.s4426c2f1");
    check_field_offset(lv, s4426c2f2, ABISELECT(52,36), "S4426C2.s4426c2f2");
    check_field_offset(lv, s4426c2f3, ABISELECT(64,48), "S4426C2.s4426c2f3");
    check_field_offset(lv, s4426c2f4, ABISELECT(96,80), "S4426C2.s4426c2f4");
    test_class_info(&lv, &cd_S4426C2);
    dp->~S4426C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4426C2(Test_S4426C2, "S4426C2", ABISELECT(136,108));

#else // __cplusplus

extern void _ZN7S4426C2C1Ev();
extern void _ZN7S4426C2D1Ev();
Name_Map name_map_S4426C2[] = {
  NSPAIR(_ZN7S4426C2C1Ev),
  NSPAIR(_ZN7S4426C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4426C3;
extern VTBL_ENTRY _ZTI7S4426C3[];
extern  VTBL_ENTRY _ZTV7S4426C3[];
static Base_Class bases_S4426C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4426C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4426C2[];
extern void _ZN7S4426C2D1Ev();
extern void _ZN7S4426C2D0Ev();
extern void _ZN7S4426C32v2Ev();
extern void _ZN7S4426C32v3Ev();
extern void _ZN7S4426C32v4Ev();
extern void _ZN7S4426C22v5Ev();
extern void _ZN7S4426C22v6Ev();
static  VTBL_ENTRY vtc_S4426C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4426C2[0]),
  (VTBL_ENTRY)&_ZN7S4426C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4426C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4426C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4426C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4426C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4426C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4426C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4426C2[];
extern  VTBL_ENTRY _ZTV7S4426C2[];
Class_Descriptor cd_S4426C2 = {  "S4426C2", // class name
  bases_S4426C2, 1,
  &(vtc_S4426C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,108), // object size
  NSPAIRA(_ZTI7S4426C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4426C2),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  S4426C1  : S4426C2 {
  virtual  ~S4426C1(); // _ZN7S4426C1D1Ev
  virtual void  v1(); // _ZN7S4426C12v1Ev
  S4426C1(); // tgen
};
//SIG(1 S4426C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 v6 Fp Fc Fi[3] FC6{ m FC7{ FL[4]}} FC8{ BC9{ m Fp FC10{ Fi[4]}} vd v7 Fi}} vd v1}


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

static void Test_S4426C1()
{
  extern Class_Descriptor cd_S4426C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,28)];
    init_test(&cd_S4426C1, buf);
    S4426C1 *dp, &lv = *(dp=new (buf) S4426C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,108), "sizeof(S4426C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4426C1)");
    check_base_class_offset(lv, (S4426C3*)(S4426C2*), 0, "S4426C1");
    check_base_class_offset(lv, (S4426C2*), 0, "S4426C1");
    test_class_info(&lv, &cd_S4426C1);
    dp->~S4426C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4426C1(Test_S4426C1, "S4426C1", ABISELECT(136,108));

#else // __cplusplus

extern void _ZN7S4426C1C1Ev();
extern void _ZN7S4426C1D1Ev();
Name_Map name_map_S4426C1[] = {
  NSPAIR(_ZN7S4426C1C1Ev),
  NSPAIR(_ZN7S4426C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4426C3;
extern VTBL_ENTRY _ZTI7S4426C3[];
extern  VTBL_ENTRY _ZTV7S4426C3[];
extern Class_Descriptor cd_S4426C2;
extern VTBL_ENTRY _ZTI7S4426C2[];
extern  VTBL_ENTRY _ZTV7S4426C2[];
static Base_Class bases_S4426C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4426C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4426C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4426C1[];
extern void _ZN7S4426C1D1Ev();
extern void _ZN7S4426C1D0Ev();
extern void _ZN7S4426C32v2Ev();
extern void _ZN7S4426C32v3Ev();
extern void _ZN7S4426C32v4Ev();
extern void _ZN7S4426C22v5Ev();
extern void _ZN7S4426C22v6Ev();
extern void _ZN7S4426C12v1Ev();
static  VTBL_ENTRY vtc_S4426C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4426C1[0]),
  (VTBL_ENTRY)&_ZN7S4426C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4426C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4426C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4426C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4426C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4426C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4426C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4426C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4426C1[];
extern  VTBL_ENTRY _ZTV7S4426C1[];
Class_Descriptor cd_S4426C1 = {  "S4426C1", // class name
  bases_S4426C1, 2,
  &(vtc_S4426C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,108), // object size
  NSPAIRA(_ZTI7S4426C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4426C1),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  S4425C3  {
  ::S8053C10_nt s4425c3f0;
  int s4425c3f1[2];
  char s4425c3f2;
  virtual  ~S4425C3(); // _ZN7S4425C3D1Ev
  virtual void  v2(); // _ZN7S4425C32v2Ev
  virtual void  v3(); // _ZN7S4425C32v3Ev
  virtual void  v4(); // _ZN7S4425C32v4Ev
  S4425C3(); // tgen
};
//SIG(-1 S4425C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4425C3 ::~S4425C3(){ note_dtor("S4425C3", this);}
void  S4425C3 ::v2(){vfunc_called(this, "_ZN7S4425C32v2Ev");}
void  S4425C3 ::v3(){vfunc_called(this, "_ZN7S4425C32v3Ev");}
void  S4425C3 ::v4(){vfunc_called(this, "_ZN7S4425C32v4Ev");}
S4425C3 ::S4425C3(){ note_ctor("S4425C3", this);} // tgen

static void Test_S4425C3()
{
  extern Class_Descriptor cd_S4425C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4425C3, buf);
    S4425C3 *dp, &lv = *(dp=new (buf) S4425C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4425C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4425C3)");
    check_field_offset(lv, s4425c3f0, ABISELECT(8,4), "S4425C3.s4425c3f0");
    check_field_offset(lv, s4425c3f1, ABISELECT(24,16), "S4425C3.s4425c3f1");
    check_field_offset(lv, s4425c3f2, ABISELECT(32,24), "S4425C3.s4425c3f2");
    test_class_info(&lv, &cd_S4425C3);
    dp->~S4425C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4425C3(Test_S4425C3, "S4425C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4425C3C1Ev();
extern void _ZN7S4425C3D1Ev();
Name_Map name_map_S4425C3[] = {
  NSPAIR(_ZN7S4425C3C1Ev),
  NSPAIR(_ZN7S4425C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4425C3[];
extern void _ZN7S4425C3D1Ev();
extern void _ZN7S4425C3D0Ev();
extern void _ZN7S4425C32v2Ev();
extern void _ZN7S4425C32v3Ev();
extern void _ZN7S4425C32v4Ev();
static  VTBL_ENTRY vtc_S4425C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4425C3[0]),
  (VTBL_ENTRY)&_ZN7S4425C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4425C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4425C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4425C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4425C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4425C3[];
extern  VTBL_ENTRY _ZTV7S4425C3[];
Class_Descriptor cd_S4425C3 = {  "S4425C3", // class name
  0,0,//no base classes
  &(vtc_S4425C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4425C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4425C3),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  S4425C2  : S4425C3 {
  void *s4425c2f0;
  char s4425c2f1;
  int s4425c2f2[3];
  ::S2172C10_nt s4425c2f3;
  ::S4426C8 s4425c2f4;
  virtual  ~S4425C2(); // _ZN7S4425C2D1Ev
  virtual void  v5(); // _ZN7S4425C22v5Ev
  virtual void  v6(); // _ZN7S4425C22v6Ev
  S4425C2(); // tgen
};
//SIG(-1 S4425C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp Fc Fi[3] FC5{ m FC6{ Fl[4]}} FC7{ BC8{ m Fp FC9{ Fi[4]}} vd v6 Fi}}


 S4425C2 ::~S4425C2(){ note_dtor("S4425C2", this);}
void  S4425C2 ::v5(){vfunc_called(this, "_ZN7S4425C22v5Ev");}
void  S4425C2 ::v6(){vfunc_called(this, "_ZN7S4425C22v6Ev");}
S4425C2 ::S4425C2(){ note_ctor("S4425C2", this);} // tgen

static void Test_S4425C2()
{
  extern Class_Descriptor cd_S4425C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,24)];
    init_test(&cd_S4425C2, buf);
    S4425C2 *dp, &lv = *(dp=new (buf) S4425C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,92), "sizeof(S4425C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4425C2)");
    check_base_class_offset(lv, (S4425C3*), 0, "S4425C2");
    check_field_offset(lv, s4425c2f0, ABISELECT(40,28), "S4425C2.s4425c2f0");
    check_field_offset(lv, s4425c2f1, ABISELECT(48,32), "S4425C2.s4425c2f1");
    check_field_offset(lv, s4425c2f2, ABISELECT(52,36), "S4425C2.s4425c2f2");
    check_field_offset(lv, s4425c2f3, ABISELECT(64,48), "S4425C2.s4425c2f3");
    check_field_offset(lv, s4425c2f4, ABISELECT(96,64), "S4425C2.s4425c2f4");
    test_class_info(&lv, &cd_S4425C2);
    dp->~S4425C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4425C2(Test_S4425C2, "S4425C2", ABISELECT(136,92));

#else // __cplusplus

extern void _ZN7S4425C2C1Ev();
extern void _ZN7S4425C2D1Ev();
Name_Map name_map_S4425C2[] = {
  NSPAIR(_ZN7S4425C2C1Ev),
  NSPAIR(_ZN7S4425C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4425C3;
extern VTBL_ENTRY _ZTI7S4425C3[];
extern  VTBL_ENTRY _ZTV7S4425C3[];
static Base_Class bases_S4425C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4425C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4425C2[];
extern void _ZN7S4425C2D1Ev();
extern void _ZN7S4425C2D0Ev();
extern void _ZN7S4425C32v2Ev();
extern void _ZN7S4425C32v3Ev();
extern void _ZN7S4425C32v4Ev();
extern void _ZN7S4425C22v5Ev();
extern void _ZN7S4425C22v6Ev();
static  VTBL_ENTRY vtc_S4425C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4425C2[0]),
  (VTBL_ENTRY)&_ZN7S4425C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4425C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4425C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4425C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4425C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4425C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4425C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4425C2[];
extern  VTBL_ENTRY _ZTV7S4425C2[];
Class_Descriptor cd_S4425C2 = {  "S4425C2", // class name
  bases_S4425C2, 1,
  &(vtc_S4425C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,92), // object size
  NSPAIRA(_ZTI7S4425C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4425C2),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  S4425C1  : S4425C2 {
  virtual  ~S4425C1(); // _ZN7S4425C1D1Ev
  virtual void  v1(); // _ZN7S4425C12v1Ev
  S4425C1(); // tgen
};
//SIG(1 S4425C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 v6 Fp Fc Fi[3] FC6{ m FC7{ Fl[4]}} FC8{ BC9{ m Fp FC10{ Fi[4]}} vd v7 Fi}} vd v1}


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

static void Test_S4425C1()
{
  extern Class_Descriptor cd_S4425C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,24)];
    init_test(&cd_S4425C1, buf);
    S4425C1 *dp, &lv = *(dp=new (buf) S4425C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,92), "sizeof(S4425C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4425C1)");
    check_base_class_offset(lv, (S4425C3*)(S4425C2*), 0, "S4425C1");
    check_base_class_offset(lv, (S4425C2*), 0, "S4425C1");
    test_class_info(&lv, &cd_S4425C1);
    dp->~S4425C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4425C1(Test_S4425C1, "S4425C1", ABISELECT(136,92));

#else // __cplusplus

extern void _ZN7S4425C1C1Ev();
extern void _ZN7S4425C1D1Ev();
Name_Map name_map_S4425C1[] = {
  NSPAIR(_ZN7S4425C1C1Ev),
  NSPAIR(_ZN7S4425C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4425C3;
extern VTBL_ENTRY _ZTI7S4425C3[];
extern  VTBL_ENTRY _ZTV7S4425C3[];
extern Class_Descriptor cd_S4425C2;
extern VTBL_ENTRY _ZTI7S4425C2[];
extern  VTBL_ENTRY _ZTV7S4425C2[];
static Base_Class bases_S4425C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4425C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4425C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4425C1[];
extern void _ZN7S4425C1D1Ev();
extern void _ZN7S4425C1D0Ev();
extern void _ZN7S4425C32v2Ev();
extern void _ZN7S4425C32v3Ev();
extern void _ZN7S4425C32v4Ev();
extern void _ZN7S4425C22v5Ev();
extern void _ZN7S4425C22v6Ev();
extern void _ZN7S4425C12v1Ev();
static  VTBL_ENTRY vtc_S4425C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4425C1[0]),
  (VTBL_ENTRY)&_ZN7S4425C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4425C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4425C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4425C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4425C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4425C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4425C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4425C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4425C1[];
extern  VTBL_ENTRY _ZTV7S4425C1[];
Class_Descriptor cd_S4425C1 = {  "S4425C1", // class name
  bases_S4425C1, 2,
  &(vtc_S4425C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,92), // object size
  NSPAIRA(_ZTI7S4425C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4425C1),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  S16304C3  {
  ::S4426C10_nt s16304c3f0;
  void  mf16304c3(); // _ZN8S16304C39mf16304c3Ev
};
//SIG(-1 S16304C3) C1{ m FC2{ Fi[4]}}


void  S16304C3 ::mf16304c3(){}

static void Test_S16304C3()
{
  {
    init_simple_test("S16304C3");
    S16304C3 lv;
    check2(sizeof(lv), 16, "sizeof(S16304C3)");
    check2(__alignof__(lv), 4, "__alignof__(S16304C3)");
    check_field_offset(lv, s16304c3f0, 0, "S16304C3.s16304c3f0");
  }
}
static Arrange_To_Call_Me vS16304C3(Test_S16304C3, "S16304C3", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16304C7_nt  {
  void *s16304c7f0;
  __tsi64 s16304c7f1;
  void  mf16304c7(); // _ZN11S16304C7_nt9mf16304c7Ev
};
//SIG(-1 S16304C7_nt) C1{ m Fp FL}


void  S16304C7_nt ::mf16304c7(){}

//skip512 S16304C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16304C6  {
  void *s16304c6f0;
  ::S16304C7_nt s16304c6f1;
  int s16304c6f2;
  char s16304c6f3[2];
  ::S16304C3 s16304c6f4;
  int s16304c6f5;
  void *s16304c6f6[5];
  void  mf16304c6(); // _ZN8S16304C69mf16304c6Ev
};
//SIG(1 S16304C6) C1{ m Fp FC2{ m Fp FL} Fi Fc[2] FC3{ m FC4{ Fi[4]}} Fi Fp[5]}


void  S16304C6 ::mf16304c6(){}

static void Test_S16304C6()
{
  {
    init_simple_test("S16304C6");
    S16304C6 lv;
    check2(sizeof(lv), ABISELECT(96,64), "sizeof(S16304C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16304C6)");
    check_field_offset(lv, s16304c6f0, 0, "S16304C6.s16304c6f0");
    check_field_offset(lv, s16304c6f1, ABISELECT(8,4), "S16304C6.s16304c6f1");
    check_field_offset(lv, s16304c6f2, ABISELECT(24,16), "S16304C6.s16304c6f2");
    check_field_offset(lv, s16304c6f3, ABISELECT(28,20), "S16304C6.s16304c6f3");
    check_field_offset(lv, s16304c6f4, ABISELECT(32,24), "S16304C6.s16304c6f4");
    check_field_offset(lv, s16304c6f5, ABISELECT(48,40), "S16304C6.s16304c6f5");
    check_field_offset(lv, s16304c6f6, ABISELECT(56,44), "S16304C6.s16304c6f6");
  }
}
static Arrange_To_Call_Me vS16304C6(Test_S16304C6, "S16304C6", ABISELECT(96,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16304C2  {
  void *s16304c2f0;
  int s16304c2f1[2];
  ::S16304C3 s16304c2f2;
  ::S16304C3 s16304c2f3;
  ::S16304C3 s16304c2f4;
  ::S16304C3 s16304c2f5;
  ::S16304C3 s16304c2f6;
  ::S807C9_nt s16304c2f7;
  ::S16304C6 s16304c2f8[6];
  char s16304c2f9;
  int s16304c2f10[2];
  void *s16304c2f11[6];
  void  mf16304c2(); // _ZN8S16304C29mf16304c2Ev
};
//SIG(-1 S16304C2) C1{ m Fp Fi[2] FC2{ m FC3{ Fi[4]}} FC2 FC2 FC2 FC2 FC4{ m Fc} FC5{ m Fp FC6{ m Fp FL} Fi Fc[2] FC2 Fi Fp[5]}[6] Fc Fi[2] Fp[6]}


void  S16304C2 ::mf16304c2(){}

static void Test_S16304C2()
{
  {
    init_simple_test("S16304C2");
    S16304C2 lv;
    check2(sizeof(lv), ABISELECT(744,516), "sizeof(S16304C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16304C2)");
    check_field_offset(lv, s16304c2f0, 0, "S16304C2.s16304c2f0");
    check_field_offset(lv, s16304c2f1, ABISELECT(8,4), "S16304C2.s16304c2f1");
    check_field_offset(lv, s16304c2f2, ABISELECT(16,12), "S16304C2.s16304c2f2");
    check_field_offset(lv, s16304c2f3, ABISELECT(32,28), "S16304C2.s16304c2f3");
    check_field_offset(lv, s16304c2f4, ABISELECT(48,44), "S16304C2.s16304c2f4");
    check_field_offset(lv, s16304c2f5, ABISELECT(64,60), "S16304C2.s16304c2f5");
    check_field_offset(lv, s16304c2f6, ABISELECT(80,76), "S16304C2.s16304c2f6");
    check_field_offset(lv, s16304c2f7, ABISELECT(96,92), "S16304C2.s16304c2f7");
    check_field_offset(lv, s16304c2f8, ABISELECT(104,96), "S16304C2.s16304c2f8");
    check_field_offset(lv, s16304c2f9, ABISELECT(680,480), "S16304C2.s16304c2f9");
    check_field_offset(lv, s16304c2f10, ABISELECT(684,484), "S16304C2.s16304c2f10");
    check_field_offset(lv, s16304c2f11, ABISELECT(696,492), "S16304C2.s16304c2f11");
  }
}
static Arrange_To_Call_Me vS16304C2(Test_S16304C2, "S16304C2", ABISELECT(744,516));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16304C1  {
  ::S16304C2 s16304c1f0;
  void  mf16304c1(); // _ZN8S16304C19mf16304c1Ev
};
//SIG(1 S16304C1) C1{ m FC2{ m Fp Fi[2] FC3{ m FC4{ Fi[4]}} FC3 FC3 FC3 FC3 FC5{ m Fc} FC6{ m Fp FC7{ m Fp FL} Fi Fc[2] FC3 Fi Fp[5]}[6] Fc Fi[2] Fp[6]}}


void  S16304C1 ::mf16304c1(){}

static void Test_S16304C1()
{
  {
    init_simple_test("S16304C1");
    S16304C1 lv;
    check2(sizeof(lv), ABISELECT(744,516), "sizeof(S16304C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16304C1)");
    check_field_offset(lv, s16304c1f0, 0, "S16304C1.s16304c1f0");
  }
}
static Arrange_To_Call_Me vS16304C1(Test_S16304C1, "S16304C1", ABISELECT(744,516));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4427C3  {
  ::S8053C10_nt s4427c3f0;
  int s4427c3f1[2];
  char s4427c3f2;
  virtual  ~S4427C3(); // _ZN7S4427C3D1Ev
  virtual void  v2(); // _ZN7S4427C32v2Ev
  virtual void  v3(); // _ZN7S4427C32v3Ev
  virtual void  v4(); // _ZN7S4427C32v4Ev
  S4427C3(); // tgen
};
//SIG(-1 S4427C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4427C3 ::~S4427C3(){ note_dtor("S4427C3", this);}
void  S4427C3 ::v2(){vfunc_called(this, "_ZN7S4427C32v2Ev");}
void  S4427C3 ::v3(){vfunc_called(this, "_ZN7S4427C32v3Ev");}
void  S4427C3 ::v4(){vfunc_called(this, "_ZN7S4427C32v4Ev");}
S4427C3 ::S4427C3(){ note_ctor("S4427C3", this);} // tgen

static void Test_S4427C3()
{
  extern Class_Descriptor cd_S4427C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4427C3, buf);
    S4427C3 *dp, &lv = *(dp=new (buf) S4427C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4427C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4427C3)");
    check_field_offset(lv, s4427c3f0, ABISELECT(8,4), "S4427C3.s4427c3f0");
    check_field_offset(lv, s4427c3f1, ABISELECT(24,16), "S4427C3.s4427c3f1");
    check_field_offset(lv, s4427c3f2, ABISELECT(32,24), "S4427C3.s4427c3f2");
    test_class_info(&lv, &cd_S4427C3);
    dp->~S4427C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4427C3(Test_S4427C3, "S4427C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4427C3C1Ev();
extern void _ZN7S4427C3D1Ev();
Name_Map name_map_S4427C3[] = {
  NSPAIR(_ZN7S4427C3C1Ev),
  NSPAIR(_ZN7S4427C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4427C3[];
extern void _ZN7S4427C3D1Ev();
extern void _ZN7S4427C3D0Ev();
extern void _ZN7S4427C32v2Ev();
extern void _ZN7S4427C32v3Ev();
extern void _ZN7S4427C32v4Ev();
static  VTBL_ENTRY vtc_S4427C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4427C3[0]),
  (VTBL_ENTRY)&_ZN7S4427C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4427C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4427C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4427C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4427C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4427C3[];
extern  VTBL_ENTRY _ZTV7S4427C3[];
Class_Descriptor cd_S4427C3 = {  "S4427C3", // class name
  0,0,//no base classes
  &(vtc_S4427C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4427C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4427C3),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  S4427C2  : S4427C3 {
  void *s4427c2f0;
  char s4427c2f1;
  int s4427c2f2[3];
  ::S2355C13_nt s4427c2f3;
  ::S4426C8 s4427c2f4;
  virtual  ~S4427C2(); // _ZN7S4427C2D1Ev
  virtual void  v5(); // _ZN7S4427C22v5Ev
  virtual void  v6(); // _ZN7S4427C22v6Ev
  S4427C2(); // tgen
};
//SIG(-1 S4427C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp Fc Fi[3] FC5{ m FL[4]} FC6{ BC7{ m Fp FC8{ Fi[4]}} vd v6 Fi}}


 S4427C2 ::~S4427C2(){ note_dtor("S4427C2", this);}
void  S4427C2 ::v5(){vfunc_called(this, "_ZN7S4427C22v5Ev");}
void  S4427C2 ::v6(){vfunc_called(this, "_ZN7S4427C22v6Ev");}
S4427C2 ::S4427C2(){ note_ctor("S4427C2", this);} // tgen

static void Test_S4427C2()
{
  extern Class_Descriptor cd_S4427C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,28)];
    init_test(&cd_S4427C2, buf);
    S4427C2 *dp, &lv = *(dp=new (buf) S4427C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,108), "sizeof(S4427C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4427C2)");
    check_base_class_offset(lv, (S4427C3*), 0, "S4427C2");
    check_field_offset(lv, s4427c2f0, ABISELECT(40,28), "S4427C2.s4427c2f0");
    check_field_offset(lv, s4427c2f1, ABISELECT(48,32), "S4427C2.s4427c2f1");
    check_field_offset(lv, s4427c2f2, ABISELECT(52,36), "S4427C2.s4427c2f2");
    check_field_offset(lv, s4427c2f3, ABISELECT(64,48), "S4427C2.s4427c2f3");
    check_field_offset(lv, s4427c2f4, ABISELECT(96,80), "S4427C2.s4427c2f4");
    test_class_info(&lv, &cd_S4427C2);
    dp->~S4427C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4427C2(Test_S4427C2, "S4427C2", ABISELECT(136,108));

#else // __cplusplus

extern void _ZN7S4427C2C1Ev();
extern void _ZN7S4427C2D1Ev();
Name_Map name_map_S4427C2[] = {
  NSPAIR(_ZN7S4427C2C1Ev),
  NSPAIR(_ZN7S4427C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4427C3;
extern VTBL_ENTRY _ZTI7S4427C3[];
extern  VTBL_ENTRY _ZTV7S4427C3[];
static Base_Class bases_S4427C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4427C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4427C2[];
extern void _ZN7S4427C2D1Ev();
extern void _ZN7S4427C2D0Ev();
extern void _ZN7S4427C32v2Ev();
extern void _ZN7S4427C32v3Ev();
extern void _ZN7S4427C32v4Ev();
extern void _ZN7S4427C22v5Ev();
extern void _ZN7S4427C22v6Ev();
static  VTBL_ENTRY vtc_S4427C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4427C2[0]),
  (VTBL_ENTRY)&_ZN7S4427C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4427C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4427C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4427C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4427C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4427C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4427C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4427C2[];
extern  VTBL_ENTRY _ZTV7S4427C2[];
Class_Descriptor cd_S4427C2 = {  "S4427C2", // class name
  bases_S4427C2, 1,
  &(vtc_S4427C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,108), // object size
  NSPAIRA(_ZTI7S4427C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4427C2),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  S4427C1  : S4427C2 {
  virtual  ~S4427C1(); // _ZN7S4427C1D1Ev
  virtual void  v1(); // _ZN7S4427C12v1Ev
  S4427C1(); // tgen
};
//SIG(1 S4427C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 v6 Fp Fc Fi[3] FC6{ m FL[4]} FC7{ BC8{ m Fp FC9{ Fi[4]}} vd v7 Fi}} vd v1}


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

static void Test_S4427C1()
{
  extern Class_Descriptor cd_S4427C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,28)];
    init_test(&cd_S4427C1, buf);
    S4427C1 *dp, &lv = *(dp=new (buf) S4427C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,108), "sizeof(S4427C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4427C1)");
    check_base_class_offset(lv, (S4427C3*)(S4427C2*), 0, "S4427C1");
    check_base_class_offset(lv, (S4427C2*), 0, "S4427C1");
    test_class_info(&lv, &cd_S4427C1);
    dp->~S4427C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4427C1(Test_S4427C1, "S4427C1", ABISELECT(136,108));

#else // __cplusplus

extern void _ZN7S4427C1C1Ev();
extern void _ZN7S4427C1D1Ev();
Name_Map name_map_S4427C1[] = {
  NSPAIR(_ZN7S4427C1C1Ev),
  NSPAIR(_ZN7S4427C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4427C3;
extern VTBL_ENTRY _ZTI7S4427C3[];
extern  VTBL_ENTRY _ZTV7S4427C3[];
extern Class_Descriptor cd_S4427C2;
extern VTBL_ENTRY _ZTI7S4427C2[];
extern  VTBL_ENTRY _ZTV7S4427C2[];
static Base_Class bases_S4427C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4427C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4427C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4427C1[];
extern void _ZN7S4427C1D1Ev();
extern void _ZN7S4427C1D0Ev();
extern void _ZN7S4427C32v2Ev();
extern void _ZN7S4427C32v3Ev();
extern void _ZN7S4427C32v4Ev();
extern void _ZN7S4427C22v5Ev();
extern void _ZN7S4427C22v6Ev();
extern void _ZN7S4427C12v1Ev();
static  VTBL_ENTRY vtc_S4427C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4427C1[0]),
  (VTBL_ENTRY)&_ZN7S4427C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4427C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4427C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4427C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4427C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4427C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4427C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4427C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4427C1[];
extern  VTBL_ENTRY _ZTV7S4427C1[];
Class_Descriptor cd_S4427C1 = {  "S4427C1", // class name
  bases_S4427C1, 2,
  &(vtc_S4427C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,108), // object size
  NSPAIRA(_ZTI7S4427C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4427C1),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  S5288C3  {
  virtual  ~S5288C3(); // _ZN7S5288C3D1Ev
  virtual void  v5(); // _ZN7S5288C32v5Ev
  virtual void  v6(); // _ZN7S5288C32v6Ev
  S5288C3(); // tgen
};
//SIG(-1 S5288C3) C1{ vd v1 v2}


 S5288C3 ::~S5288C3(){ note_dtor("S5288C3", this);}
void  S5288C3 ::v5(){vfunc_called(this, "_ZN7S5288C32v5Ev");}
void  S5288C3 ::v6(){vfunc_called(this, "_ZN7S5288C32v6Ev");}
S5288C3 ::S5288C3(){ note_ctor("S5288C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5288C3C1Ev();
extern void _ZN7S5288C3D1Ev();
Name_Map name_map_S5288C3[] = {
  NSPAIR(_ZN7S5288C3C1Ev),
  NSPAIR(_ZN7S5288C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5288C3[];
extern void _ZN7S5288C3D1Ev();
extern void _ZN7S5288C3D0Ev();
extern void _ZN7S5288C32v5Ev();
extern void _ZN7S5288C32v6Ev();
static  VTBL_ENTRY vtc_S5288C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5288C3[0]),
  (VTBL_ENTRY)&_ZN7S5288C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5288C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5288C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5288C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5288C3[];
extern  VTBL_ENTRY _ZTV7S5288C3[];
Class_Descriptor cd_S5288C3 = {  "S5288C3", // class name
  0,0,//no base classes
  &(vtc_S5288C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5288C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5288C3),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  S5288C2  : S5288C3 , S5166C37 {
  void *s5288c2f0[3];
  ::S5166C36 s5288c2f1;
  int s5288c2f2[3];
  virtual  ~S5288C2(); // _ZN7S5288C2D1Ev
  virtual void  v7(); // _ZN7S5288C22v7Ev
  virtual void  v8(); // _ZN7S5288C22v8Ev
  virtual void  v9(); // _ZN7S5288C22v9Ev
  virtual void  v10(); // _ZN7S5288C23v10Ev
  virtual void  v11(); // _ZN7S5288C23v11Ev
  virtual void  v12(); // _ZN7S5288C23v12Ev
  S5288C2(); // tgen
};
//SIG(-1 S5288C2) C1{ BC2{ vd v7 v8} BC3{ m} vd v1 v2 v3 v4 v5 v6 Fp[3] FC4{ m Fp Fi[2] FC3} Fi[3]}


 S5288C2 ::~S5288C2(){ note_dtor("S5288C2", this);}
void  S5288C2 ::v7(){vfunc_called(this, "_ZN7S5288C22v7Ev");}
void  S5288C2 ::v8(){vfunc_called(this, "_ZN7S5288C22v8Ev");}
void  S5288C2 ::v9(){vfunc_called(this, "_ZN7S5288C22v9Ev");}
void  S5288C2 ::v10(){vfunc_called(this, "_ZN7S5288C23v10Ev");}
void  S5288C2 ::v11(){vfunc_called(this, "_ZN7S5288C23v11Ev");}
void  S5288C2 ::v12(){vfunc_called(this, "_ZN7S5288C23v12Ev");}
S5288C2 ::S5288C2(){ note_ctor("S5288C2", this);} // tgen

static void Test_S5288C2()
{
  extern Class_Descriptor cd_S5288C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S5288C2, buf);
    S5288C2 *dp, &lv = *(dp=new (buf) S5288C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S5288C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5288C2)");
    check_base_class_offset(lv, (S5288C3*), 0, "S5288C2");
    check_base_class_offset(lv, (S5166C37*), 0, "S5288C2");
    check_field_offset(lv, s5288c2f0, ABISELECT(8,4), "S5288C2.s5288c2f0");
    check_field_offset(lv, s5288c2f1, ABISELECT(32,16), "S5288C2.s5288c2f1");
    check_field_offset(lv, s5288c2f2, ABISELECT(56,32), "S5288C2.s5288c2f2");
    test_class_info(&lv, &cd_S5288C2);
    dp->~S5288C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5288C2(Test_S5288C2, "S5288C2", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S5288C2C1Ev();
extern void _ZN7S5288C2D1Ev();
Name_Map name_map_S5288C2[] = {
  NSPAIR(_ZN7S5288C2C1Ev),
  NSPAIR(_ZN7S5288C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5288C3;
extern VTBL_ENTRY _ZTI7S5288C3[];
extern  VTBL_ENTRY _ZTV7S5288C3[];
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
static Base_Class bases_S5288C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5288C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S5288C2[];
extern void _ZN7S5288C2D1Ev();
extern void _ZN7S5288C2D0Ev();
extern void _ZN7S5288C32v5Ev();
extern void _ZN7S5288C32v6Ev();
extern void _ZN7S5288C22v7Ev();
extern void _ZN7S5288C22v8Ev();
extern void _ZN7S5288C22v9Ev();
extern void _ZN7S5288C23v10Ev();
extern void _ZN7S5288C23v11Ev();
extern void _ZN7S5288C23v12Ev();
static  VTBL_ENTRY vtc_S5288C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5288C2[0]),
  (VTBL_ENTRY)&_ZN7S5288C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5288C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5288C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5288C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5288C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5288C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5288C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5288C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5288C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5288C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S5288C2[];
extern  VTBL_ENTRY _ZTV7S5288C2[];
Class_Descriptor cd_S5288C2 = {  "S5288C2", // class name
  bases_S5288C2, 2,
  &(vtc_S5288C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S5288C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5288C2),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  S5288C1  : S5288C2 {
  int s5288c1f0;
  ::S8053C10_nt s5288c1f1;
  virtual  ~S5288C1(); // _ZN7S5288C1D1Ev
  virtual void  v1(); // _ZN7S5288C12v1Ev
  virtual void  v2(); // _ZN7S5288C12v2Ev
  virtual void  v3(); // _ZN7S5288C12v3Ev
  virtual void  v4(); // _ZN7S5288C12v4Ev
  S5288C1(); // tgen
};
//SIG(1 S5288C1) C1{ BC2{ BC3{ vd v5 v6} BC4{ m} vd v7 v8 v9 v10 v11 v12 Fp[3] FC5{ m Fp Fi[2] FC4} Fi[3]} vd v1 v2 v3 v4 Fi FC6{ m Fp Fi FC4}}


 S5288C1 ::~S5288C1(){ note_dtor("S5288C1", this);}
void  S5288C1 ::v1(){vfunc_called(this, "_ZN7S5288C12v1Ev");}
void  S5288C1 ::v2(){vfunc_called(this, "_ZN7S5288C12v2Ev");}
void  S5288C1 ::v3(){vfunc_called(this, "_ZN7S5288C12v3Ev");}
void  S5288C1 ::v4(){vfunc_called(this, "_ZN7S5288C12v4Ev");}
S5288C1 ::S5288C1(){ note_ctor("S5288C1", this);} // tgen

static void Test_S5288C1()
{
  extern Class_Descriptor cd_S5288C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,16)];
    init_test(&cd_S5288C1, buf);
    S5288C1 *dp, &lv = *(dp=new (buf) S5288C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S5288C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5288C1)");
    check_base_class_offset(lv, (S5288C3*)(S5288C2*), 0, "S5288C1");
    check_base_class_offset(lv, (S5166C37*)(S5288C2*), 0, "S5288C1");
    check_base_class_offset(lv, (S5288C2*), 0, "S5288C1");
    check_field_offset(lv, s5288c1f0, ABISELECT(68,44), "S5288C1.s5288c1f0");
    check_field_offset(lv, s5288c1f1, ABISELECT(72,48), "S5288C1.s5288c1f1");
    test_class_info(&lv, &cd_S5288C1);
    dp->~S5288C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5288C1(Test_S5288C1, "S5288C1", ABISELECT(88,60));

#else // __cplusplus

extern void _ZN7S5288C1C1Ev();
extern void _ZN7S5288C1D1Ev();
Name_Map name_map_S5288C1[] = {
  NSPAIR(_ZN7S5288C1C1Ev),
  NSPAIR(_ZN7S5288C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5288C3;
extern VTBL_ENTRY _ZTI7S5288C3[];
extern  VTBL_ENTRY _ZTV7S5288C3[];
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5288C2;
extern VTBL_ENTRY _ZTI7S5288C2[];
extern  VTBL_ENTRY _ZTV7S5288C2[];
static Base_Class bases_S5288C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5288C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5288C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5288C1[];
extern void _ZN7S5288C1D1Ev();
extern void _ZN7S5288C1D0Ev();
extern void _ZN7S5288C32v5Ev();
extern void _ZN7S5288C32v6Ev();
extern void _ZN7S5288C22v7Ev();
extern void _ZN7S5288C22v8Ev();
extern void _ZN7S5288C22v9Ev();
extern void _ZN7S5288C23v10Ev();
extern void _ZN7S5288C23v11Ev();
extern void _ZN7S5288C23v12Ev();
extern void _ZN7S5288C12v1Ev();
extern void _ZN7S5288C12v2Ev();
extern void _ZN7S5288C12v3Ev();
extern void _ZN7S5288C12v4Ev();
static  VTBL_ENTRY vtc_S5288C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5288C1[0]),
  (VTBL_ENTRY)&_ZN7S5288C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5288C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5288C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5288C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5288C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5288C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5288C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5288C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5288C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5288C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5288C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5288C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5288C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5288C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S5288C1[];
extern  VTBL_ENTRY _ZTV7S5288C1[];
Class_Descriptor cd_S5288C1 = {  "S5288C1", // class name
  bases_S5288C1, 3,
  &(vtc_S5288C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,60), // object size
  NSPAIRA(_ZTI7S5288C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5288C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16496C4_nt  {
  void *s16496c4f0;
  int s16496c4f1;
  void  mf16496c4(); // _ZN11S16496C4_nt9mf16496c4Ev
  virtual  ~S16496C4_nt(); // _ZN11S16496C4_ntD1Ev
  S16496C4_nt(); // tgen
};
//SIG(-1 S16496C4_nt) C1{ vd m Fp Fi}


void  S16496C4_nt ::mf16496c4(){}
 S16496C4_nt ::~S16496C4_nt(){ note_dtor("S16496C4_nt", this);}
S16496C4_nt ::S16496C4_nt(){ note_ctor("S16496C4_nt", this);} // tgen

//skip512 S16496C4_nt

#else // __cplusplus

extern void _ZN11S16496C4_ntC1Ev();
extern void _ZN11S16496C4_ntD1Ev();
Name_Map name_map_S16496C4_nt[] = {
  NSPAIR(_ZN11S16496C4_ntC1Ev),
  NSPAIR(_ZN11S16496C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern void _ZN11S16496C4_ntD1Ev();
extern void _ZN11S16496C4_ntD0Ev();
static  VTBL_ENTRY vtc_S16496C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S16496C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S16496C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S16496C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
VTBL_ENTRY *P__ZTI11S16496C4_nt = _ZTI11S16496C4_nt; 
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
Class_Descriptor cd_S16496C4_nt = {  "S16496C4_nt", // class name
  0,0,//no base classes
  &(vtc_S16496C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI11S16496C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S16496C4_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  S16496C1  {
  ::S1C11_nt s16496c1f0;
  ::S1C11_nt s16496c1f1;
  ::S1C11_nt s16496c1f2;
  ::S17448C5_nt s16496c1f3;
  ::S17448C5_nt s16496c1f4;
  ::S16496C4_nt s16496c1f5;
  ::S16496C4_nt s16496c1f6;
  ::S16496C4_nt s16496c1f7;
  int s16496c1f8[4];
  __tsi64 s16496c1f9;
  char s16496c1f10[2];
  ::S17448C5_nt s16496c1f11;
  ::S17448C5_nt s16496c1f12;
  int s16496c1f13[2];
  ::S16496C4_nt s16496c1f14;
  ::S16496C4_nt s16496c1f15;
  __tsi64 s16496c1f16;
  ::S16496C4_nt s16496c1f17;
  ::S16496C4_nt s16496c1f18;
  ::S16496C4_nt s16496c1f19;
  ::S16496C4_nt s16496c1f20;
  char s16496c1f21;
  void  mf16496c1(); // _ZN8S16496C19mf16496c1Ev
};
//SIG(1 S16496C1) C1{ m FC2{ vd m Fp Fi} FC2 FC2 FC3{ FL} FC3 FC4{ vd m Fp Fi} FC4 FC4 Fi[4] FL Fc[2] FC3 FC3 Fi[2] FC4 FC4 FL FC4 FC4 FC4 FC4 Fc}


void  S16496C1 ::mf16496c1(){}

static void Test_S16496C1()
{
  {
    init_simple_test("S16496C1");
    S16496C1 lv;
    check2(sizeof(lv), ABISELECT(376,224), "sizeof(S16496C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16496C1)");
    check_field_offset(lv, s16496c1f0, 0, "S16496C1.s16496c1f0");
    check_field_offset(lv, s16496c1f1, ABISELECT(24,12), "S16496C1.s16496c1f1");
    check_field_offset(lv, s16496c1f2, ABISELECT(48,24), "S16496C1.s16496c1f2");
    check_field_offset(lv, s16496c1f3, ABISELECT(72,36), "S16496C1.s16496c1f3");
    check_field_offset(lv, s16496c1f4, ABISELECT(80,44), "S16496C1.s16496c1f4");
    check_field_offset(lv, s16496c1f5, ABISELECT(88,52), "S16496C1.s16496c1f5");
    check_field_offset(lv, s16496c1f6, ABISELECT(112,64), "S16496C1.s16496c1f6");
    check_field_offset(lv, s16496c1f7, ABISELECT(136,76), "S16496C1.s16496c1f7");
    check_field_offset(lv, s16496c1f8, ABISELECT(160,88), "S16496C1.s16496c1f8");
    check_field_offset(lv, s16496c1f9, ABISELECT(176,104), "S16496C1.s16496c1f9");
    check_field_offset(lv, s16496c1f10, ABISELECT(184,112), "S16496C1.s16496c1f10");
    check_field_offset(lv, s16496c1f11, ABISELECT(192,116), "S16496C1.s16496c1f11");
    check_field_offset(lv, s16496c1f12, ABISELECT(200,124), "S16496C1.s16496c1f12");
    check_field_offset(lv, s16496c1f13, ABISELECT(208,132), "S16496C1.s16496c1f13");
    check_field_offset(lv, s16496c1f14, ABISELECT(216,140), "S16496C1.s16496c1f14");
    check_field_offset(lv, s16496c1f15, ABISELECT(240,152), "S16496C1.s16496c1f15");
    check_field_offset(lv, s16496c1f16, ABISELECT(264,164), "S16496C1.s16496c1f16");
    check_field_offset(lv, s16496c1f17, ABISELECT(272,172), "S16496C1.s16496c1f17");
    check_field_offset(lv, s16496c1f18, ABISELECT(296,184), "S16496C1.s16496c1f18");
    check_field_offset(lv, s16496c1f19, ABISELECT(320,196), "S16496C1.s16496c1f19");
    check_field_offset(lv, s16496c1f20, ABISELECT(344,208), "S16496C1.s16496c1f20");
    check_field_offset(lv, s16496c1f21, ABISELECT(368,220), "S16496C1.s16496c1f21");
  }
}
static Arrange_To_Call_Me vS16496C1(Test_S16496C1, "S16496C1", ABISELECT(376,224));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16495C3_nt  {
  long s16495c3f0;
};
//SIG(-1 S16495C3_nt) C1{ Fl}



//skip512 S16495C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16495C1  {
  ::S16496C4_nt s16495c1f0;
  ::S16496C4_nt s16495c1f1;
  ::S16496C4_nt s16495c1f2;
  ::S16495C3_nt s16495c1f3;
  ::S16495C3_nt s16495c1f4;
  ::S1C11_nt s16495c1f5;
  ::S1C11_nt s16495c1f6;
  ::S1C11_nt s16495c1f7;
  int s16495c1f8[4];
  __tsi64 s16495c1f9;
  char s16495c1f10[2];
  ::S16495C3_nt s16495c1f11;
  ::S16495C3_nt s16495c1f12;
  int s16495c1f13[2];
  ::S1C11_nt s16495c1f14;
  ::S1C11_nt s16495c1f15;
  __tsi64 s16495c1f16;
  ::S1C11_nt s16495c1f17;
  ::S1C11_nt s16495c1f18;
  ::S1C11_nt s16495c1f19;
  ::S1C11_nt s16495c1f20;
  char s16495c1f21;
  void  mf16495c1(); // _ZN8S16495C19mf16495c1Ev
};
//SIG(1 S16495C1) C1{ m FC2{ vd m Fp Fi} FC2 FC2 FC3{ Fl} FC3 FC4{ vd m Fp Fi} FC4 FC4 Fi[4] FL Fc[2] FC3 FC3 Fi[2] FC4 FC4 FL FC4 FC4 FC4 FC4 Fc}


void  S16495C1 ::mf16495c1(){}

static void Test_S16495C1()
{
  {
    init_simple_test("S16495C1");
    S16495C1 lv;
    check2(sizeof(lv), ABISELECT(376,208), "sizeof(S16495C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16495C1)");
    check_field_offset(lv, s16495c1f0, 0, "S16495C1.s16495c1f0");
    check_field_offset(lv, s16495c1f1, ABISELECT(24,12), "S16495C1.s16495c1f1");
    check_field_offset(lv, s16495c1f2, ABISELECT(48,24), "S16495C1.s16495c1f2");
    check_field_offset(lv, s16495c1f3, ABISELECT(72,36), "S16495C1.s16495c1f3");
    check_field_offset(lv, s16495c1f4, ABISELECT(80,40), "S16495C1.s16495c1f4");
    check_field_offset(lv, s16495c1f5, ABISELECT(88,44), "S16495C1.s16495c1f5");
    check_field_offset(lv, s16495c1f6, ABISELECT(112,56), "S16495C1.s16495c1f6");
    check_field_offset(lv, s16495c1f7, ABISELECT(136,68), "S16495C1.s16495c1f7");
    check_field_offset(lv, s16495c1f8, ABISELECT(160,80), "S16495C1.s16495c1f8");
    check_field_offset(lv, s16495c1f9, ABISELECT(176,96), "S16495C1.s16495c1f9");
    check_field_offset(lv, s16495c1f10, ABISELECT(184,104), "S16495C1.s16495c1f10");
    check_field_offset(lv, s16495c1f11, ABISELECT(192,108), "S16495C1.s16495c1f11");
    check_field_offset(lv, s16495c1f12, ABISELECT(200,112), "S16495C1.s16495c1f12");
    check_field_offset(lv, s16495c1f13, ABISELECT(208,116), "S16495C1.s16495c1f13");
    check_field_offset(lv, s16495c1f14, ABISELECT(216,124), "S16495C1.s16495c1f14");
    check_field_offset(lv, s16495c1f15, ABISELECT(240,136), "S16495C1.s16495c1f15");
    check_field_offset(lv, s16495c1f16, ABISELECT(264,148), "S16495C1.s16495c1f16");
    check_field_offset(lv, s16495c1f17, ABISELECT(272,156), "S16495C1.s16495c1f17");
    check_field_offset(lv, s16495c1f18, ABISELECT(296,168), "S16495C1.s16495c1f18");
    check_field_offset(lv, s16495c1f19, ABISELECT(320,180), "S16495C1.s16495c1f19");
    check_field_offset(lv, s16495c1f20, ABISELECT(344,192), "S16495C1.s16495c1f20");
    check_field_offset(lv, s16495c1f21, ABISELECT(368,204), "S16495C1.s16495c1f21");
  }
}
static Arrange_To_Call_Me vS16495C1(Test_S16495C1, "S16495C1", ABISELECT(376,208));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9401C2  {
  ::S8053C10_nt s9401c2f0;
  int s9401c2f1[2];
  char s9401c2f2;
  virtual  ~S9401C2(); // _ZN7S9401C2D1Ev
  virtual void  v3(); // _ZN7S9401C22v3Ev
  virtual void  v4(); // _ZN7S9401C22v4Ev
  virtual void  v5(); // _ZN7S9401C22v5Ev
  S9401C2(); // tgen
};
//SIG(-1 S9401C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9401C2 ::~S9401C2(){ note_dtor("S9401C2", this);}
void  S9401C2 ::v3(){vfunc_called(this, "_ZN7S9401C22v3Ev");}
void  S9401C2 ::v4(){vfunc_called(this, "_ZN7S9401C22v4Ev");}
void  S9401C2 ::v5(){vfunc_called(this, "_ZN7S9401C22v5Ev");}
S9401C2 ::S9401C2(){ note_ctor("S9401C2", this);} // tgen

static void Test_S9401C2()
{
  extern Class_Descriptor cd_S9401C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9401C2, buf);
    S9401C2 *dp, &lv = *(dp=new (buf) S9401C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9401C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9401C2)");
    check_field_offset(lv, s9401c2f0, ABISELECT(8,4), "S9401C2.s9401c2f0");
    check_field_offset(lv, s9401c2f1, ABISELECT(24,16), "S9401C2.s9401c2f1");
    check_field_offset(lv, s9401c2f2, ABISELECT(32,24), "S9401C2.s9401c2f2");
    test_class_info(&lv, &cd_S9401C2);
    dp->~S9401C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9401C2(Test_S9401C2, "S9401C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9401C2C1Ev();
extern void _ZN7S9401C2D1Ev();
Name_Map name_map_S9401C2[] = {
  NSPAIR(_ZN7S9401C2C1Ev),
  NSPAIR(_ZN7S9401C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9401C2[];
extern void _ZN7S9401C2D1Ev();
extern void _ZN7S9401C2D0Ev();
extern void _ZN7S9401C22v3Ev();
extern void _ZN7S9401C22v4Ev();
extern void _ZN7S9401C22v5Ev();
static  VTBL_ENTRY vtc_S9401C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9401C2[0]),
  (VTBL_ENTRY)&_ZN7S9401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9401C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9401C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9401C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9401C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9401C2[];
extern  VTBL_ENTRY _ZTV7S9401C2[];
Class_Descriptor cd_S9401C2 = {  "S9401C2", // class name
  0,0,//no base classes
  &(vtc_S9401C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9401C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9401C2),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  S9401C1  : S9401C2 {
  void *s9401c1f0[2];
  int s9401c1f1[3];
  ::S4426C6_nt s9401c1f2;
  ::S4426C8 s9401c1f3;
  void *s9401c1f4;
  virtual  ~S9401C1(); // _ZN7S9401C1D1Ev
  virtual void  v1(); // _ZN7S9401C12v1Ev
  virtual void  v2(); // _ZN7S9401C12v2Ev
  S9401C1(); // tgen
};
//SIG(1 S9401C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp[2] Fi[3] FC5{ m FC6{ FL[4]}} FC7{ BC8{ m Fp FC9{ Fi[4]}} vd v6 Fi} Fp}


 S9401C1 ::~S9401C1(){ note_dtor("S9401C1", this);}
void  S9401C1 ::v1(){vfunc_called(this, "_ZN7S9401C12v1Ev");}
void  S9401C1 ::v2(){vfunc_called(this, "_ZN7S9401C12v2Ev");}
S9401C1 ::S9401C1(){ note_ctor("S9401C1", this);} // tgen

static void Test_S9401C1()
{
  extern Class_Descriptor cd_S9401C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,29)];
    init_test(&cd_S9401C1, buf);
    S9401C1 *dp, &lv = *(dp=new (buf) S9401C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,112), "sizeof(S9401C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9401C1)");
    check_base_class_offset(lv, (S9401C2*), 0, "S9401C1");
    check_field_offset(lv, s9401c1f0, ABISELECT(40,28), "S9401C1.s9401c1f0");
    check_field_offset(lv, s9401c1f1, ABISELECT(56,36), "S9401C1.s9401c1f1");
    check_field_offset(lv, s9401c1f2, ABISELECT(72,48), "S9401C1.s9401c1f2");
    check_field_offset(lv, s9401c1f3, ABISELECT(104,80), "S9401C1.s9401c1f3");
    check_field_offset(lv, s9401c1f4, ABISELECT(144,108), "S9401C1.s9401c1f4");
    test_class_info(&lv, &cd_S9401C1);
    dp->~S9401C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9401C1(Test_S9401C1, "S9401C1", ABISELECT(152,112));

#else // __cplusplus

extern void _ZN7S9401C1C1Ev();
extern void _ZN7S9401C1D1Ev();
Name_Map name_map_S9401C1[] = {
  NSPAIR(_ZN7S9401C1C1Ev),
  NSPAIR(_ZN7S9401C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9401C2;
extern VTBL_ENTRY _ZTI7S9401C2[];
extern  VTBL_ENTRY _ZTV7S9401C2[];
static Base_Class bases_S9401C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9401C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9401C1[];
extern void _ZN7S9401C1D1Ev();
extern void _ZN7S9401C1D0Ev();
extern void _ZN7S9401C22v3Ev();
extern void _ZN7S9401C22v4Ev();
extern void _ZN7S9401C22v5Ev();
extern void _ZN7S9401C12v1Ev();
extern void _ZN7S9401C12v2Ev();
static  VTBL_ENTRY vtc_S9401C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9401C1[0]),
  (VTBL_ENTRY)&_ZN7S9401C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9401C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9401C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9401C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9401C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9401C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9401C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9401C1[];
extern  VTBL_ENTRY _ZTV7S9401C1[];
Class_Descriptor cd_S9401C1 = {  "S9401C1", // class name
  bases_S9401C1, 1,
  &(vtc_S9401C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,112), // object size
  NSPAIRA(_ZTI7S9401C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9401C1),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  S5009C3  {
  virtual  ~S5009C3(); // _ZN7S5009C3D1Ev
  virtual void  v3(); // _ZN7S5009C32v3Ev
  S5009C3(); // tgen
};
//SIG(-1 S5009C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S5009C3C1Ev();
extern void _ZN7S5009C3D1Ev();
Name_Map name_map_S5009C3[] = {
  NSPAIR(_ZN7S5009C3C1Ev),
  NSPAIR(_ZN7S5009C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5009C3[];
extern void _ZN7S5009C3D1Ev();
extern void _ZN7S5009C3D0Ev();
extern void _ZN7S5009C32v3Ev();
static  VTBL_ENTRY vtc_S5009C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5009C3[0]),
  (VTBL_ENTRY)&_ZN7S5009C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5009C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5009C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S5009C3[];
extern  VTBL_ENTRY _ZTV7S5009C3[];
Class_Descriptor cd_S5009C3 = {  "S5009C3", // class name
  0,0,//no base classes
  &(vtc_S5009C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5009C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5009C3),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  S5009C2_nt  : S5009C3 {
  virtual  ~S5009C2_nt(); // _ZN10S5009C2_ntD1Ev
  S5009C2_nt(); // tgen
};
//SIG(-1 S5009C2_nt) C1{ BC2{ vd v1} vd}


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

//skip512 S5009C2_nt

#else // __cplusplus

extern void _ZN10S5009C2_ntC1Ev();
extern void _ZN10S5009C2_ntD1Ev();
Name_Map name_map_S5009C2_nt[] = {
  NSPAIR(_ZN10S5009C2_ntC1Ev),
  NSPAIR(_ZN10S5009C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5009C3;
extern VTBL_ENTRY _ZTI7S5009C3[];
extern  VTBL_ENTRY _ZTV7S5009C3[];
static Base_Class bases_S5009C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5009C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI10S5009C2_nt[];
extern void _ZN10S5009C2_ntD1Ev();
extern void _ZN10S5009C2_ntD0Ev();
extern void _ZN7S5009C32v3Ev();
static  VTBL_ENTRY vtc_S5009C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5009C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S5009C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5009C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S5009C32v3Ev,
};
extern VTBL_ENTRY _ZTI10S5009C2_nt[];
VTBL_ENTRY *P__ZTI10S5009C2_nt = _ZTI10S5009C2_nt; 
extern  VTBL_ENTRY _ZTV10S5009C2_nt[];
Class_Descriptor cd_S5009C2_nt = {  "S5009C2_nt", // class name
  bases_S5009C2_nt, 1,
  &(vtc_S5009C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S5009C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S5009C2_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  S5009C5  {
  virtual  ~S5009C5(); // _ZN7S5009C5D1Ev
  virtual void  v4(); // _ZN7S5009C52v4Ev
  S5009C5(); // tgen
};
//SIG(-1 S5009C5) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S5009C5C1Ev();
extern void _ZN7S5009C5D1Ev();
Name_Map name_map_S5009C5[] = {
  NSPAIR(_ZN7S5009C5C1Ev),
  NSPAIR(_ZN7S5009C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5009C5[];
extern void _ZN7S5009C5D1Ev();
extern void _ZN7S5009C5D0Ev();
extern void _ZN7S5009C52v4Ev();
static  VTBL_ENTRY vtc_S5009C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5009C5[0]),
  (VTBL_ENTRY)&_ZN7S5009C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5009C5D0Ev,
  (VTBL_ENTRY)&_ZN7S5009C52v4Ev,
};
extern VTBL_ENTRY _ZTI7S5009C5[];
extern  VTBL_ENTRY _ZTV7S5009C5[];
Class_Descriptor cd_S5009C5 = {  "S5009C5", // class name
  0,0,//no base classes
  &(vtc_S5009C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5009C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5009C5),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  S5009C4  : S5009C5 {
  virtual  ~S5009C4(); // _ZN7S5009C4D1Ev
  S5009C4(); // tgen
};
//SIG(-1 S5009C4) C1{ BC2{ vd v1} vd}


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

static void Test_S5009C4()
{
  extern Class_Descriptor cd_S5009C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5009C4, buf);
    S5009C4 *dp, &lv = *(dp=new (buf) S5009C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5009C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5009C4)");
    check_base_class_offset(lv, (S5009C5*), 0, "S5009C4");
    test_class_info(&lv, &cd_S5009C4);
    dp->~S5009C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5009C4(Test_S5009C4, "S5009C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5009C4C1Ev();
extern void _ZN7S5009C4D1Ev();
Name_Map name_map_S5009C4[] = {
  NSPAIR(_ZN7S5009C4C1Ev),
  NSPAIR(_ZN7S5009C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5009C5;
extern VTBL_ENTRY _ZTI7S5009C5[];
extern  VTBL_ENTRY _ZTV7S5009C5[];
static Base_Class bases_S5009C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5009C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S5009C4[];
extern void _ZN7S5009C4D1Ev();
extern void _ZN7S5009C4D0Ev();
extern void _ZN7S5009C52v4Ev();
static  VTBL_ENTRY vtc_S5009C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5009C4[0]),
  (VTBL_ENTRY)&_ZN7S5009C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5009C4D0Ev,
  (VTBL_ENTRY)&_ZN7S5009C52v4Ev,
};
extern VTBL_ENTRY _ZTI7S5009C4[];
extern  VTBL_ENTRY _ZTV7S5009C4[];
Class_Descriptor cd_S5009C4 = {  "S5009C4", // class name
  bases_S5009C4, 1,
  &(vtc_S5009C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5009C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5009C4),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  S5009C7  {
  virtual  ~S5009C7(); // _ZN7S5009C7D1Ev
  virtual void  v5(); // _ZN7S5009C72v5Ev
  virtual void  v6(); // _ZN7S5009C72v6Ev
  virtual void  v7(); // _ZN7S5009C72v7Ev
  S5009C7(); // tgen
};
//SIG(-1 S5009C7) C1{ vd v1 v2 v3}


 S5009C7 ::~S5009C7(){ note_dtor("S5009C7", this);}
void  S5009C7 ::v5(){vfunc_called(this, "_ZN7S5009C72v5Ev");}
void  S5009C7 ::v6(){vfunc_called(this, "_ZN7S5009C72v6Ev");}
void  S5009C7 ::v7(){vfunc_called(this, "_ZN7S5009C72v7Ev");}
S5009C7 ::S5009C7(){ note_ctor("S5009C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5009C7C1Ev();
extern void _ZN7S5009C7D1Ev();
Name_Map name_map_S5009C7[] = {
  NSPAIR(_ZN7S5009C7C1Ev),
  NSPAIR(_ZN7S5009C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5009C7[];
extern void _ZN7S5009C7D1Ev();
extern void _ZN7S5009C7D0Ev();
extern void _ZN7S5009C72v5Ev();
extern void _ZN7S5009C72v6Ev();
extern void _ZN7S5009C72v7Ev();
static  VTBL_ENTRY vtc_S5009C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5009C7[0]),
  (VTBL_ENTRY)&_ZN7S5009C7D1Ev,
  (VTBL_ENTRY)&_ZN7S5009C7D0Ev,
  (VTBL_ENTRY)&_ZN7S5009C72v5Ev,
  (VTBL_ENTRY)&_ZN7S5009C72v6Ev,
  (VTBL_ENTRY)&_ZN7S5009C72v7Ev,
};
extern VTBL_ENTRY _ZTI7S5009C7[];
extern  VTBL_ENTRY _ZTV7S5009C7[];
Class_Descriptor cd_S5009C7 = {  "S5009C7", // class name
  0,0,//no base classes
  &(vtc_S5009C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5009C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5009C7),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  S5009C6  : S5009C7 {
  ::S5166C36 s5009c6f0;
  ::S2355C13_nt s5009c6f1;
  char s5009c6f2;
  virtual  ~S5009C6(); // _ZN7S5009C6D1Ev
  virtual void  v8(); // _ZN7S5009C62v8Ev
  virtual void  v9(); // _ZN7S5009C62v9Ev
  virtual void  v10(); // _ZN7S5009C63v10Ev
  S5009C6(); // tgen
};
//SIG(-1 S5009C6) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S5009C6 ::~S5009C6(){ note_dtor("S5009C6", this);}
void  S5009C6 ::v8(){vfunc_called(this, "_ZN7S5009C62v8Ev");}
void  S5009C6 ::v9(){vfunc_called(this, "_ZN7S5009C62v9Ev");}
void  S5009C6 ::v10(){vfunc_called(this, "_ZN7S5009C63v10Ev");}
S5009C6 ::S5009C6(){ note_ctor("S5009C6", this);} // tgen

static void Test_S5009C6()
{
  extern Class_Descriptor cd_S5009C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S5009C6, buf);
    S5009C6 *dp, &lv = *(dp=new (buf) S5009C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S5009C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5009C6)");
    check_base_class_offset(lv, (S5009C7*), 0, "S5009C6");
    check_field_offset(lv, s5009c6f0, ABISELECT(8,4), "S5009C6.s5009c6f0");
    check_field_offset(lv, s5009c6f1, ABISELECT(32,20), "S5009C6.s5009c6f1");
    check_field_offset(lv, s5009c6f2, ABISELECT(64,52), "S5009C6.s5009c6f2");
    test_class_info(&lv, &cd_S5009C6);
    dp->~S5009C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5009C6(Test_S5009C6, "S5009C6", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S5009C6C1Ev();
extern void _ZN7S5009C6D1Ev();
Name_Map name_map_S5009C6[] = {
  NSPAIR(_ZN7S5009C6C1Ev),
  NSPAIR(_ZN7S5009C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5009C7;
extern VTBL_ENTRY _ZTI7S5009C7[];
extern  VTBL_ENTRY _ZTV7S5009C7[];
static Base_Class bases_S5009C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5009C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S5009C6[];
extern void _ZN7S5009C6D1Ev();
extern void _ZN7S5009C6D0Ev();
extern void _ZN7S5009C72v5Ev();
extern void _ZN7S5009C72v6Ev();
extern void _ZN7S5009C72v7Ev();
extern void _ZN7S5009C62v8Ev();
extern void _ZN7S5009C62v9Ev();
extern void _ZN7S5009C63v10Ev();
static  VTBL_ENTRY vtc_S5009C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5009C6[0]),
  (VTBL_ENTRY)&_ZN7S5009C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5009C6D0Ev,
  (VTBL_ENTRY)&_ZN7S5009C72v5Ev,
  (VTBL_ENTRY)&_ZN7S5009C72v6Ev,
  (VTBL_ENTRY)&_ZN7S5009C72v7Ev,
  (VTBL_ENTRY)&_ZN7S5009C62v8Ev,
  (VTBL_ENTRY)&_ZN7S5009C62v9Ev,
  (VTBL_ENTRY)&_ZN7S5009C63v10Ev,
};
extern VTBL_ENTRY _ZTI7S5009C6[];
extern  VTBL_ENTRY _ZTV7S5009C6[];
Class_Descriptor cd_S5009C6 = {  "S5009C6", // class name
  bases_S5009C6, 1,
  &(vtc_S5009C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S5009C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5009C6),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  S5009C1  : S5009C2_nt , S5009C4 , S5009C6 {
  void *s5009c1f0;
  virtual  ~S5009C1(); // _ZN7S5009C1D1Ev
  virtual void  v1(); // _ZN7S5009C12v1Ev
  virtual void  v2(); // _ZN7S5009C12v2Ev
  S5009C1(); // tgen
};
//SIG(1 S5009C1) C1{ BC2{ BC3{ vd v3} vd} BC4{ BC5{ vd v4} vd} BC6{ BC7{ vd v5 v6 v7} vd v8 v9 v10 FC8{ m Fp Fi[2] FC9{ m}} FC10{ m FL[4]} Fc} vd v1 v2 Fp}


 S5009C1 ::~S5009C1(){ note_dtor("S5009C1", this);}
void  S5009C1 ::v1(){vfunc_called(this, "_ZN7S5009C12v1Ev");}
void  S5009C1 ::v2(){vfunc_called(this, "_ZN7S5009C12v2Ev");}
S5009C1 ::S5009C1(){ note_ctor("S5009C1", this);} // tgen

static void Test_S5009C1()
{
  extern Class_Descriptor cd_S5009C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,18)];
    init_test(&cd_S5009C1, buf);
    S5009C1 *dp, &lv = *(dp=new (buf) S5009C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S5009C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5009C1)");
    check_base_class_offset(lv, (S5009C3*)(S5009C2_nt*), 0, "S5009C1");
    check_base_class_offset(lv, (S5009C2_nt*), 0, "S5009C1");
    check_base_class_offset(lv, (S5009C5*)(S5009C4*), ABISELECT(8,4), "S5009C1");
    check_base_class_offset(lv, (S5009C4*), ABISELECT(8,4), "S5009C1");
    check_base_class_offset(lv, (S5009C7*)(S5009C6*), ABISELECT(16,8), "S5009C1");
    check_base_class_offset(lv, (S5009C6*), ABISELECT(16,8), "S5009C1");
    check_field_offset(lv, s5009c1f0, ABISELECT(88,64), "S5009C1.s5009c1f0");
    test_class_info(&lv, &cd_S5009C1);
    dp->~S5009C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5009C1(Test_S5009C1, "S5009C1", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN7S5009C1C1Ev();
extern void _ZN7S5009C1D1Ev();
Name_Map name_map_S5009C1[] = {
  NSPAIR(_ZN7S5009C1C1Ev),
  NSPAIR(_ZN7S5009C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5009C3;
extern VTBL_ENTRY _ZTI7S5009C3[];
extern  VTBL_ENTRY _ZTV7S5009C3[];
extern Class_Descriptor cd_S5009C2_nt;
extern VTBL_ENTRY _ZTI10S5009C2_nt[];
extern  VTBL_ENTRY _ZTV10S5009C2_nt[];
extern Class_Descriptor cd_S5009C5;
extern VTBL_ENTRY _ZTI7S5009C5[];
extern  VTBL_ENTRY _ZTV7S5009C5[];
extern Class_Descriptor cd_S5009C4;
extern VTBL_ENTRY _ZTI7S5009C4[];
extern  VTBL_ENTRY _ZTV7S5009C4[];
extern Class_Descriptor cd_S5009C7;
extern VTBL_ENTRY _ZTI7S5009C7[];
extern  VTBL_ENTRY _ZTV7S5009C7[];
extern Class_Descriptor cd_S5009C6;
extern VTBL_ENTRY _ZTI7S5009C6[];
extern  VTBL_ENTRY _ZTV7S5009C6[];
static Base_Class bases_S5009C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5009C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5009C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S5009C5,    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
    3, //immediately_derived
  0, 0},
  {&cd_S5009C4,    ABISELECT(8,4), //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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5009C7,    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
    5, //immediately_derived
  0, 0},
  {&cd_S5009C6,    ABISELECT(16,8), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5009C1[];
extern void _ZN7S5009C1D1Ev();
extern void _ZN7S5009C1D0Ev();
extern void _ZN7S5009C32v3Ev();
extern void _ZN7S5009C12v1Ev();
extern void _ZN7S5009C12v2Ev();
extern void ABISELECT(_ZThn8_N7S5009C1D1Ev,_ZThn4_N7S5009C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S5009C1D0Ev,_ZThn4_N7S5009C1D0Ev)();
extern void _ZN7S5009C52v4Ev();
extern void ABISELECT(_ZThn16_N7S5009C1D1Ev,_ZThn8_N7S5009C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S5009C1D0Ev,_ZThn8_N7S5009C1D0Ev)();
extern void _ZN7S5009C72v5Ev();
extern void _ZN7S5009C72v6Ev();
extern void _ZN7S5009C72v7Ev();
extern void _ZN7S5009C62v8Ev();
extern void _ZN7S5009C62v9Ev();
extern void _ZN7S5009C63v10Ev();
static  VTBL_ENTRY vtc_S5009C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5009C1[0]),
  (VTBL_ENTRY)&_ZN7S5009C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5009C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5009C32v3Ev,
  (VTBL_ENTRY)&_ZN7S5009C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5009C12v2Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S5009C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S5009C1D1Ev,_ZThn4_N7S5009C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S5009C1D0Ev,_ZThn4_N7S5009C1D0Ev),
  (VTBL_ENTRY)&_ZN7S5009C52v4Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S5009C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S5009C1D1Ev,_ZThn8_N7S5009C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S5009C1D0Ev,_ZThn8_N7S5009C1D0Ev),
  (VTBL_ENTRY)&_ZN7S5009C72v5Ev,
  (VTBL_ENTRY)&_ZN7S5009C72v6Ev,
  (VTBL_ENTRY)&_ZN7S5009C72v7Ev,
  (VTBL_ENTRY)&_ZN7S5009C62v8Ev,
  (VTBL_ENTRY)&_ZN7S5009C62v9Ev,
  (VTBL_ENTRY)&_ZN7S5009C63v10Ev,
};
extern VTBL_ENTRY _ZTI7S5009C1[];
extern  VTBL_ENTRY _ZTV7S5009C1[];
Class_Descriptor cd_S5009C1 = {  "S5009C1", // class name
  bases_S5009C1, 6,
  &(vtc_S5009C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI7S5009C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5009C1),22, //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  S5010C3  {
  virtual  ~S5010C3(); // _ZN7S5010C3D1Ev
  virtual void  v3(); // _ZN7S5010C32v3Ev
  S5010C3(); // tgen
};
//SIG(-1 S5010C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S5010C3C1Ev();
extern void _ZN7S5010C3D1Ev();
Name_Map name_map_S5010C3[] = {
  NSPAIR(_ZN7S5010C3C1Ev),
  NSPAIR(_ZN7S5010C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5010C3[];
extern void _ZN7S5010C3D1Ev();
extern void _ZN7S5010C3D0Ev();
extern void _ZN7S5010C32v3Ev();
static  VTBL_ENTRY vtc_S5010C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5010C3[0]),
  (VTBL_ENTRY)&_ZN7S5010C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5010C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5010C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S5010C3[];
extern  VTBL_ENTRY _ZTV7S5010C3[];
Class_Descriptor cd_S5010C3 = {  "S5010C3", // class name
  0,0,//no base classes
  &(vtc_S5010C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5010C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5010C3),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  S5010C2  : S5010C3 {
  virtual  ~S5010C2(); // _ZN7S5010C2D1Ev
  S5010C2(); // tgen
};
//SIG(-1 S5010C2) C1{ BC2{ vd v1} vd}


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

static void Test_S5010C2()
{
  extern Class_Descriptor cd_S5010C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5010C2, buf);
    S5010C2 *dp, &lv = *(dp=new (buf) S5010C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5010C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5010C2)");
    check_base_class_offset(lv, (S5010C3*), 0, "S5010C2");
    test_class_info(&lv, &cd_S5010C2);
    dp->~S5010C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5010C2(Test_S5010C2, "S5010C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5010C2C1Ev();
extern void _ZN7S5010C2D1Ev();
Name_Map name_map_S5010C2[] = {
  NSPAIR(_ZN7S5010C2C1Ev),
  NSPAIR(_ZN7S5010C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5010C3;
extern VTBL_ENTRY _ZTI7S5010C3[];
extern  VTBL_ENTRY _ZTV7S5010C3[];
static Base_Class bases_S5010C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5010C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S5010C2[];
extern void _ZN7S5010C2D1Ev();
extern void _ZN7S5010C2D0Ev();
extern void _ZN7S5010C32v3Ev();
static  VTBL_ENTRY vtc_S5010C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5010C2[0]),
  (VTBL_ENTRY)&_ZN7S5010C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5010C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5010C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S5010C2[];
extern  VTBL_ENTRY _ZTV7S5010C2[];
Class_Descriptor cd_S5010C2 = {  "S5010C2", // class name
  bases_S5010C2, 1,
  &(vtc_S5010C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5010C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5010C2),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  S5010C5  {
  virtual  ~S5010C5(); // _ZN7S5010C5D1Ev
  virtual void  v4(); // _ZN7S5010C52v4Ev
  S5010C5(); // tgen
};
//SIG(-1 S5010C5) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S5010C5C1Ev();
extern void _ZN7S5010C5D1Ev();
Name_Map name_map_S5010C5[] = {
  NSPAIR(_ZN7S5010C5C1Ev),
  NSPAIR(_ZN7S5010C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5010C5[];
extern void _ZN7S5010C5D1Ev();
extern void _ZN7S5010C5D0Ev();
extern void _ZN7S5010C52v4Ev();
static  VTBL_ENTRY vtc_S5010C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5010C5[0]),
  (VTBL_ENTRY)&_ZN7S5010C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5010C5D0Ev,
  (VTBL_ENTRY)&_ZN7S5010C52v4Ev,
};
extern VTBL_ENTRY _ZTI7S5010C5[];
extern  VTBL_ENTRY _ZTV7S5010C5[];
Class_Descriptor cd_S5010C5 = {  "S5010C5", // class name
  0,0,//no base classes
  &(vtc_S5010C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5010C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5010C5),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  S5010C4  : S5010C5 {
  virtual  ~S5010C4(); // _ZN7S5010C4D1Ev
  S5010C4(); // tgen
};
//SIG(-1 S5010C4) C1{ BC2{ vd v1} vd}


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

static void Test_S5010C4()
{
  extern Class_Descriptor cd_S5010C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5010C4, buf);
    S5010C4 *dp, &lv = *(dp=new (buf) S5010C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5010C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5010C4)");
    check_base_class_offset(lv, (S5010C5*), 0, "S5010C4");
    test_class_info(&lv, &cd_S5010C4);
    dp->~S5010C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5010C4(Test_S5010C4, "S5010C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5010C4C1Ev();
extern void _ZN7S5010C4D1Ev();
Name_Map name_map_S5010C4[] = {
  NSPAIR(_ZN7S5010C4C1Ev),
  NSPAIR(_ZN7S5010C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5010C5;
extern VTBL_ENTRY _ZTI7S5010C5[];
extern  VTBL_ENTRY _ZTV7S5010C5[];
static Base_Class bases_S5010C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5010C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S5010C4[];
extern void _ZN7S5010C4D1Ev();
extern void _ZN7S5010C4D0Ev();
extern void _ZN7S5010C52v4Ev();
static  VTBL_ENTRY vtc_S5010C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5010C4[0]),
  (VTBL_ENTRY)&_ZN7S5010C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5010C4D0Ev,
  (VTBL_ENTRY)&_ZN7S5010C52v4Ev,
};
extern VTBL_ENTRY _ZTI7S5010C4[];
extern  VTBL_ENTRY _ZTV7S5010C4[];
Class_Descriptor cd_S5010C4 = {  "S5010C4", // class name
  bases_S5010C4, 1,
  &(vtc_S5010C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5010C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5010C4),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  S5010C7  {
  virtual  ~S5010C7(); // _ZN7S5010C7D1Ev
  virtual void  v5(); // _ZN7S5010C72v5Ev
  virtual void  v6(); // _ZN7S5010C72v6Ev
  virtual void  v7(); // _ZN7S5010C72v7Ev
  S5010C7(); // tgen
};
//SIG(-1 S5010C7) C1{ vd v1 v2 v3}


 S5010C7 ::~S5010C7(){ note_dtor("S5010C7", this);}
void  S5010C7 ::v5(){vfunc_called(this, "_ZN7S5010C72v5Ev");}
void  S5010C7 ::v6(){vfunc_called(this, "_ZN7S5010C72v6Ev");}
void  S5010C7 ::v7(){vfunc_called(this, "_ZN7S5010C72v7Ev");}
S5010C7 ::S5010C7(){ note_ctor("S5010C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5010C7C1Ev();
extern void _ZN7S5010C7D1Ev();
Name_Map name_map_S5010C7[] = {
  NSPAIR(_ZN7S5010C7C1Ev),
  NSPAIR(_ZN7S5010C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5010C7[];
extern void _ZN7S5010C7D1Ev();
extern void _ZN7S5010C7D0Ev();
extern void _ZN7S5010C72v5Ev();
extern void _ZN7S5010C72v6Ev();
extern void _ZN7S5010C72v7Ev();
static  VTBL_ENTRY vtc_S5010C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5010C7[0]),
  (VTBL_ENTRY)&_ZN7S5010C7D1Ev,
  (VTBL_ENTRY)&_ZN7S5010C7D0Ev,
  (VTBL_ENTRY)&_ZN7S5010C72v5Ev,
  (VTBL_ENTRY)&_ZN7S5010C72v6Ev,
  (VTBL_ENTRY)&_ZN7S5010C72v7Ev,
};
extern VTBL_ENTRY _ZTI7S5010C7[];
extern  VTBL_ENTRY _ZTV7S5010C7[];
Class_Descriptor cd_S5010C7 = {  "S5010C7", // class name
  0,0,//no base classes
  &(vtc_S5010C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5010C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5010C7),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  S5010C6  : S5010C7 {
  ::S5166C36 s5010c6f0;
  ::S2355C13_nt s5010c6f1;
  char s5010c6f2;
  virtual  ~S5010C6(); // _ZN7S5010C6D1Ev
  virtual void  v8(); // _ZN7S5010C62v8Ev
  virtual void  v9(); // _ZN7S5010C62v9Ev
  virtual void  v10(); // _ZN7S5010C63v10Ev
  S5010C6(); // tgen
};
//SIG(-1 S5010C6) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S5010C6 ::~S5010C6(){ note_dtor("S5010C6", this);}
void  S5010C6 ::v8(){vfunc_called(this, "_ZN7S5010C62v8Ev");}
void  S5010C6 ::v9(){vfunc_called(this, "_ZN7S5010C62v9Ev");}
void  S5010C6 ::v10(){vfunc_called(this, "_ZN7S5010C63v10Ev");}
S5010C6 ::S5010C6(){ note_ctor("S5010C6", this);} // tgen

static void Test_S5010C6()
{
  extern Class_Descriptor cd_S5010C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S5010C6, buf);
    S5010C6 *dp, &lv = *(dp=new (buf) S5010C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S5010C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5010C6)");
    check_base_class_offset(lv, (S5010C7*), 0, "S5010C6");
    check_field_offset(lv, s5010c6f0, ABISELECT(8,4), "S5010C6.s5010c6f0");
    check_field_offset(lv, s5010c6f1, ABISELECT(32,20), "S5010C6.s5010c6f1");
    check_field_offset(lv, s5010c6f2, ABISELECT(64,52), "S5010C6.s5010c6f2");
    test_class_info(&lv, &cd_S5010C6);
    dp->~S5010C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5010C6(Test_S5010C6, "S5010C6", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S5010C6C1Ev();
extern void _ZN7S5010C6D1Ev();
Name_Map name_map_S5010C6[] = {
  NSPAIR(_ZN7S5010C6C1Ev),
  NSPAIR(_ZN7S5010C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5010C7;
extern VTBL_ENTRY _ZTI7S5010C7[];
extern  VTBL_ENTRY _ZTV7S5010C7[];
static Base_Class bases_S5010C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5010C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S5010C6[];
extern void _ZN7S5010C6D1Ev();
extern void _ZN7S5010C6D0Ev();
extern void _ZN7S5010C72v5Ev();
extern void _ZN7S5010C72v6Ev();
extern void _ZN7S5010C72v7Ev();
extern void _ZN7S5010C62v8Ev();
extern void _ZN7S5010C62v9Ev();
extern void _ZN7S5010C63v10Ev();
static  VTBL_ENTRY vtc_S5010C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5010C6[0]),
  (VTBL_ENTRY)&_ZN7S5010C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5010C6D0Ev,
  (VTBL_ENTRY)&_ZN7S5010C72v5Ev,
  (VTBL_ENTRY)&_ZN7S5010C72v6Ev,
  (VTBL_ENTRY)&_ZN7S5010C72v7Ev,
  (VTBL_ENTRY)&_ZN7S5010C62v8Ev,
  (VTBL_ENTRY)&_ZN7S5010C62v9Ev,
  (VTBL_ENTRY)&_ZN7S5010C63v10Ev,
};
extern VTBL_ENTRY _ZTI7S5010C6[];
extern  VTBL_ENTRY _ZTV7S5010C6[];
Class_Descriptor cd_S5010C6 = {  "S5010C6", // class name
  bases_S5010C6, 1,
  &(vtc_S5010C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S5010C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5010C6),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  S5010C1  : S5010C2 , S5010C4 , S5010C6 {
  virtual  ~S5010C1(); // _ZN7S5010C1D1Ev
  virtual void  v1(); // _ZN7S5010C12v1Ev
  virtual void  v2(); // _ZN7S5010C12v2Ev
  S5010C1(); // tgen
};
//SIG(1 S5010C1) C1{ BC2{ BC3{ vd v3} vd} BC4{ BC5{ vd v4} vd} BC6{ BC7{ vd v5 v6 v7} vd v8 v9 v10 FC8{ m Fp Fi[2] FC9{ m}} FC10{ m FL[4]} Fc} vd v1 v2}


 S5010C1 ::~S5010C1(){ note_dtor("S5010C1", this);}
void  S5010C1 ::v1(){vfunc_called(this, "_ZN7S5010C12v1Ev");}
void  S5010C1 ::v2(){vfunc_called(this, "_ZN7S5010C12v2Ev");}
S5010C1 ::S5010C1(){ note_ctor("S5010C1", this);} // tgen

static void Test_S5010C1()
{
  extern Class_Descriptor cd_S5010C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,17)];
    init_test(&cd_S5010C1, buf);
    S5010C1 *dp, &lv = *(dp=new (buf) S5010C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S5010C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5010C1)");
    check_base_class_offset(lv, (S5010C3*)(S5010C2*), 0, "S5010C1");
    check_base_class_offset(lv, (S5010C2*), 0, "S5010C1");
    check_base_class_offset(lv, (S5010C5*)(S5010C4*), ABISELECT(8,4), "S5010C1");
    check_base_class_offset(lv, (S5010C4*), ABISELECT(8,4), "S5010C1");
    check_base_class_offset(lv, (S5010C7*)(S5010C6*), ABISELECT(16,8), "S5010C1");
    check_base_class_offset(lv, (S5010C6*), ABISELECT(16,8), "S5010C1");
    test_class_info(&lv, &cd_S5010C1);
    dp->~S5010C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5010C1(Test_S5010C1, "S5010C1", ABISELECT(88,64));

#else // __cplusplus

extern void _ZN7S5010C1C1Ev();
extern void _ZN7S5010C1D1Ev();
Name_Map name_map_S5010C1[] = {
  NSPAIR(_ZN7S5010C1C1Ev),
  NSPAIR(_ZN7S5010C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5010C3;
extern VTBL_ENTRY _ZTI7S5010C3[];
extern  VTBL_ENTRY _ZTV7S5010C3[];
extern Class_Descriptor cd_S5010C2;
extern VTBL_ENTRY _ZTI7S5010C2[];
extern  VTBL_ENTRY _ZTV7S5010C2[];
extern Class_Descriptor cd_S5010C5;
extern VTBL_ENTRY _ZTI7S5010C5[];
extern  VTBL_ENTRY _ZTV7S5010C5[];
extern Class_Descriptor cd_S5010C4;
extern VTBL_ENTRY _ZTI7S5010C4[];
extern  VTBL_ENTRY _ZTV7S5010C4[];
extern Class_Descriptor cd_S5010C7;
extern VTBL_ENTRY _ZTI7S5010C7[];
extern  VTBL_ENTRY _ZTV7S5010C7[];
extern Class_Descriptor cd_S5010C6;
extern VTBL_ENTRY _ZTI7S5010C6[];
extern  VTBL_ENTRY _ZTV7S5010C6[];
static Base_Class bases_S5010C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5010C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5010C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S5010C5,    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
    3, //immediately_derived
  0, 0},
  {&cd_S5010C4,    ABISELECT(8,4), //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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5010C7,    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
    5, //immediately_derived
  0, 0},
  {&cd_S5010C6,    ABISELECT(16,8), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5010C1[];
extern void _ZN7S5010C1D1Ev();
extern void _ZN7S5010C1D0Ev();
extern void _ZN7S5010C32v3Ev();
extern void _ZN7S5010C12v1Ev();
extern void _ZN7S5010C12v2Ev();
extern void ABISELECT(_ZThn8_N7S5010C1D1Ev,_ZThn4_N7S5010C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S5010C1D0Ev,_ZThn4_N7S5010C1D0Ev)();
extern void _ZN7S5010C52v4Ev();
extern void ABISELECT(_ZThn16_N7S5010C1D1Ev,_ZThn8_N7S5010C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S5010C1D0Ev,_ZThn8_N7S5010C1D0Ev)();
extern void _ZN7S5010C72v5Ev();
extern void _ZN7S5010C72v6Ev();
extern void _ZN7S5010C72v7Ev();
extern void _ZN7S5010C62v8Ev();
extern void _ZN7S5010C62v9Ev();
extern void _ZN7S5010C63v10Ev();
static  VTBL_ENTRY vtc_S5010C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5010C1[0]),
  (VTBL_ENTRY)&_ZN7S5010C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5010C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5010C32v3Ev,
  (VTBL_ENTRY)&_ZN7S5010C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5010C12v2Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S5010C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S5010C1D1Ev,_ZThn4_N7S5010C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S5010C1D0Ev,_ZThn4_N7S5010C1D0Ev),
  (VTBL_ENTRY)&_ZN7S5010C52v4Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S5010C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S5010C1D1Ev,_ZThn8_N7S5010C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S5010C1D0Ev,_ZThn8_N7S5010C1D0Ev),
  (VTBL_ENTRY)&_ZN7S5010C72v5Ev,
  (VTBL_ENTRY)&_ZN7S5010C72v6Ev,
  (VTBL_ENTRY)&_ZN7S5010C72v7Ev,
  (VTBL_ENTRY)&_ZN7S5010C62v8Ev,
  (VTBL_ENTRY)&_ZN7S5010C62v9Ev,
  (VTBL_ENTRY)&_ZN7S5010C63v10Ev,
};
extern VTBL_ENTRY _ZTI7S5010C1[];
extern  VTBL_ENTRY _ZTV7S5010C1[];
Class_Descriptor cd_S5010C1 = {  "S5010C1", // class name
  bases_S5010C1, 6,
  &(vtc_S5010C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,64), // object size
  NSPAIRA(_ZTI7S5010C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5010C1),22, //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  S2277C4  {
  virtual  ~S2277C4(); // _ZN7S2277C4D1Ev
  virtual void  v4(); // _ZN7S2277C42v4Ev
  virtual void  v5(); // _ZN7S2277C42v5Ev
  virtual void  v6(); // _ZN7S2277C42v6Ev
  S2277C4(); // tgen
};
//SIG(-1 S2277C4) C1{ vd v1 v2 v3}


 S2277C4 ::~S2277C4(){ note_dtor("S2277C4", this);}
void  S2277C4 ::v4(){vfunc_called(this, "_ZN7S2277C42v4Ev");}
void  S2277C4 ::v5(){vfunc_called(this, "_ZN7S2277C42v5Ev");}
void  S2277C4 ::v6(){vfunc_called(this, "_ZN7S2277C42v6Ev");}
S2277C4 ::S2277C4(){ note_ctor("S2277C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2277C4C1Ev();
extern void _ZN7S2277C4D1Ev();
Name_Map name_map_S2277C4[] = {
  NSPAIR(_ZN7S2277C4C1Ev),
  NSPAIR(_ZN7S2277C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2277C4[];
extern void _ZN7S2277C4D1Ev();
extern void _ZN7S2277C4D0Ev();
extern void _ZN7S2277C42v4Ev();
extern void _ZN7S2277C42v5Ev();
extern void _ZN7S2277C42v6Ev();
static  VTBL_ENTRY vtc_S2277C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2277C4[0]),
  (VTBL_ENTRY)&_ZN7S2277C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2277C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2277C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2277C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2277C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S2277C4[];
extern  VTBL_ENTRY _ZTV7S2277C4[];
Class_Descriptor cd_S2277C4 = {  "S2277C4", // class name
  0,0,//no base classes
  &(vtc_S2277C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2277C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2277C4),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  S2277C3  : S2277C4 {
  ::S5166C36 s2277c3f0;
  ::S2355C13_nt s2277c3f1;
  char s2277c3f2;
  virtual  ~S2277C3(); // _ZN7S2277C3D1Ev
  virtual void  v7(); // _ZN7S2277C32v7Ev
  virtual void  v8(); // _ZN7S2277C32v8Ev
  virtual void  v9(); // _ZN7S2277C32v9Ev
  S2277C3(); // tgen
};
//SIG(-1 S2277C3) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2277C3 ::~S2277C3(){ note_dtor("S2277C3", this);}
void  S2277C3 ::v7(){vfunc_called(this, "_ZN7S2277C32v7Ev");}
void  S2277C3 ::v8(){vfunc_called(this, "_ZN7S2277C32v8Ev");}
void  S2277C3 ::v9(){vfunc_called(this, "_ZN7S2277C32v9Ev");}
S2277C3 ::S2277C3(){ note_ctor("S2277C3", this);} // tgen

static void Test_S2277C3()
{
  extern Class_Descriptor cd_S2277C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2277C3, buf);
    S2277C3 *dp, &lv = *(dp=new (buf) S2277C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2277C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2277C3)");
    check_base_class_offset(lv, (S2277C4*), 0, "S2277C3");
    check_field_offset(lv, s2277c3f0, ABISELECT(8,4), "S2277C3.s2277c3f0");
    check_field_offset(lv, s2277c3f1, ABISELECT(32,20), "S2277C3.s2277c3f1");
    check_field_offset(lv, s2277c3f2, ABISELECT(64,52), "S2277C3.s2277c3f2");
    test_class_info(&lv, &cd_S2277C3);
    dp->~S2277C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2277C3(Test_S2277C3, "S2277C3", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2277C3C1Ev();
extern void _ZN7S2277C3D1Ev();
Name_Map name_map_S2277C3[] = {
  NSPAIR(_ZN7S2277C3C1Ev),
  NSPAIR(_ZN7S2277C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2277C4;
extern VTBL_ENTRY _ZTI7S2277C4[];
extern  VTBL_ENTRY _ZTV7S2277C4[];
static Base_Class bases_S2277C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2277C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2277C3[];
extern void _ZN7S2277C3D1Ev();
extern void _ZN7S2277C3D0Ev();
extern void _ZN7S2277C42v4Ev();
extern void _ZN7S2277C42v5Ev();
extern void _ZN7S2277C42v6Ev();
extern void _ZN7S2277C32v7Ev();
extern void _ZN7S2277C32v8Ev();
extern void _ZN7S2277C32v9Ev();
static  VTBL_ENTRY vtc_S2277C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2277C3[0]),
  (VTBL_ENTRY)&_ZN7S2277C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2277C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2277C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2277C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2277C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2277C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2277C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2277C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S2277C3[];
extern  VTBL_ENTRY _ZTV7S2277C3[];
Class_Descriptor cd_S2277C3 = {  "S2277C3", // class name
  bases_S2277C3, 1,
  &(vtc_S2277C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2277C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2277C3),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  S2277C2  : S2277C3 {
  virtual  ~S2277C2(); // _ZN7S2277C2D1Ev
  virtual void  v10(); // _ZN7S2277C23v10Ev
  virtual void  v11(); // _ZN7S2277C23v11Ev
  virtual void  v12(); // _ZN7S2277C23v12Ev
  S2277C2(); // tgen
};
//SIG(-1 S2277C2) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd v1 v2 v3}


 S2277C2 ::~S2277C2(){ note_dtor("S2277C2", this);}
void  S2277C2 ::v10(){vfunc_called(this, "_ZN7S2277C23v10Ev");}
void  S2277C2 ::v11(){vfunc_called(this, "_ZN7S2277C23v11Ev");}
void  S2277C2 ::v12(){vfunc_called(this, "_ZN7S2277C23v12Ev");}
S2277C2 ::S2277C2(){ note_ctor("S2277C2", this);} // tgen

static void Test_S2277C2()
{
  extern Class_Descriptor cd_S2277C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2277C2, buf);
    S2277C2 *dp, &lv = *(dp=new (buf) S2277C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2277C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2277C2)");
    check_base_class_offset(lv, (S2277C4*)(S2277C3*), 0, "S2277C2");
    check_base_class_offset(lv, (S2277C3*), 0, "S2277C2");
    test_class_info(&lv, &cd_S2277C2);
    dp->~S2277C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2277C2(Test_S2277C2, "S2277C2", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2277C2C1Ev();
extern void _ZN7S2277C2D1Ev();
Name_Map name_map_S2277C2[] = {
  NSPAIR(_ZN7S2277C2C1Ev),
  NSPAIR(_ZN7S2277C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2277C4;
extern VTBL_ENTRY _ZTI7S2277C4[];
extern  VTBL_ENTRY _ZTV7S2277C4[];
extern Class_Descriptor cd_S2277C3;
extern VTBL_ENTRY _ZTI7S2277C3[];
extern  VTBL_ENTRY _ZTV7S2277C3[];
static Base_Class bases_S2277C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2277C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2277C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2277C2[];
extern void _ZN7S2277C2D1Ev();
extern void _ZN7S2277C2D0Ev();
extern void _ZN7S2277C42v4Ev();
extern void _ZN7S2277C42v5Ev();
extern void _ZN7S2277C42v6Ev();
extern void _ZN7S2277C32v7Ev();
extern void _ZN7S2277C32v8Ev();
extern void _ZN7S2277C32v9Ev();
extern void _ZN7S2277C23v10Ev();
extern void _ZN7S2277C23v11Ev();
extern void _ZN7S2277C23v12Ev();
static  VTBL_ENTRY vtc_S2277C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2277C2[0]),
  (VTBL_ENTRY)&_ZN7S2277C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2277C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2277C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2277C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2277C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2277C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2277C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2277C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2277C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2277C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2277C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S2277C2[];
extern  VTBL_ENTRY _ZTV7S2277C2[];
Class_Descriptor cd_S2277C2 = {  "S2277C2", // class name
  bases_S2277C2, 2,
  &(vtc_S2277C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2277C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2277C2),13, //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  S2277C1  : S2277C2 {
  void *s2277c1f0[3];
  int s2277c1f1;
  virtual  ~S2277C1(); // _ZN7S2277C1D1Ev
  virtual void  v1(); // _ZN7S2277C12v1Ev
  virtual void  v2(); // _ZN7S2277C12v2Ev
  virtual void  v3(); // _ZN7S2277C12v3Ev
  S2277C1(); // tgen
};
//SIG(1 S2277C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6} vd v7 v8 v9 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FL[4]} Fc} vd v10 v11 v12} vd v1 v2 v3 Fp[3] Fi}


 S2277C1 ::~S2277C1(){ note_dtor("S2277C1", this);}
void  S2277C1 ::v1(){vfunc_called(this, "_ZN7S2277C12v1Ev");}
void  S2277C1 ::v2(){vfunc_called(this, "_ZN7S2277C12v2Ev");}
void  S2277C1 ::v3(){vfunc_called(this, "_ZN7S2277C12v3Ev");}
S2277C1 ::S2277C1(){ note_ctor("S2277C1", this);} // tgen

static void Test_S2277C1()
{
  extern Class_Descriptor cd_S2277C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S2277C1, buf);
    S2277C1 *dp, &lv = *(dp=new (buf) S2277C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S2277C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2277C1)");
    check_base_class_offset(lv, (S2277C4*)(S2277C3*)(S2277C2*), 0, "S2277C1");
    check_base_class_offset(lv, (S2277C3*)(S2277C2*), 0, "S2277C1");
    check_base_class_offset(lv, (S2277C2*), 0, "S2277C1");
    check_field_offset(lv, s2277c1f0, ABISELECT(72,56), "S2277C1.s2277c1f0");
    check_field_offset(lv, s2277c1f1, ABISELECT(96,68), "S2277C1.s2277c1f1");
    test_class_info(&lv, &cd_S2277C1);
    dp->~S2277C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2277C1(Test_S2277C1, "S2277C1", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN7S2277C1C1Ev();
extern void _ZN7S2277C1D1Ev();
Name_Map name_map_S2277C1[] = {
  NSPAIR(_ZN7S2277C1C1Ev),
  NSPAIR(_ZN7S2277C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2277C4;
extern VTBL_ENTRY _ZTI7S2277C4[];
extern  VTBL_ENTRY _ZTV7S2277C4[];
extern Class_Descriptor cd_S2277C3;
extern VTBL_ENTRY _ZTI7S2277C3[];
extern  VTBL_ENTRY _ZTV7S2277C3[];
extern Class_Descriptor cd_S2277C2;
extern VTBL_ENTRY _ZTI7S2277C2[];
extern  VTBL_ENTRY _ZTV7S2277C2[];
static Base_Class bases_S2277C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2277C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2277C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2277C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2277C1[];
extern void _ZN7S2277C1D1Ev();
extern void _ZN7S2277C1D0Ev();
extern void _ZN7S2277C42v4Ev();
extern void _ZN7S2277C42v5Ev();
extern void _ZN7S2277C42v6Ev();
extern void _ZN7S2277C32v7Ev();
extern void _ZN7S2277C32v8Ev();
extern void _ZN7S2277C32v9Ev();
extern void _ZN7S2277C23v10Ev();
extern void _ZN7S2277C23v11Ev();
extern void _ZN7S2277C23v12Ev();
extern void _ZN7S2277C12v1Ev();
extern void _ZN7S2277C12v2Ev();
extern void _ZN7S2277C12v3Ev();
static  VTBL_ENTRY vtc_S2277C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2277C1[0]),
  (VTBL_ENTRY)&_ZN7S2277C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2277C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2277C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2277C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2277C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2277C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2277C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2277C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2277C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2277C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2277C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2277C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2277C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2277C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S2277C1[];
extern  VTBL_ENTRY _ZTV7S2277C1[];
Class_Descriptor cd_S2277C1 = {  "S2277C1", // class name
  bases_S2277C1, 3,
  &(vtc_S2277C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI7S2277C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2277C1),16, //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  S9231C2  {
  ::S8053C10_nt s9231c2f0;
  int s9231c2f1[2];
  char s9231c2f2;
  virtual  ~S9231C2(); // _ZN7S9231C2D1Ev
  virtual void  v3(); // _ZN7S9231C22v3Ev
  virtual void  v4(); // _ZN7S9231C22v4Ev
  virtual void  v5(); // _ZN7S9231C22v5Ev
  S9231C2(); // tgen
};
//SIG(-1 S9231C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9231C2 ::~S9231C2(){ note_dtor("S9231C2", this);}
void  S9231C2 ::v3(){vfunc_called(this, "_ZN7S9231C22v3Ev");}
void  S9231C2 ::v4(){vfunc_called(this, "_ZN7S9231C22v4Ev");}
void  S9231C2 ::v5(){vfunc_called(this, "_ZN7S9231C22v5Ev");}
S9231C2 ::S9231C2(){ note_ctor("S9231C2", this);} // tgen

static void Test_S9231C2()
{
  extern Class_Descriptor cd_S9231C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9231C2, buf);
    S9231C2 *dp, &lv = *(dp=new (buf) S9231C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9231C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9231C2)");
    check_field_offset(lv, s9231c2f0, ABISELECT(8,4), "S9231C2.s9231c2f0");
    check_field_offset(lv, s9231c2f1, ABISELECT(24,16), "S9231C2.s9231c2f1");
    check_field_offset(lv, s9231c2f2, ABISELECT(32,24), "S9231C2.s9231c2f2");
    test_class_info(&lv, &cd_S9231C2);
    dp->~S9231C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9231C2(Test_S9231C2, "S9231C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9231C2C1Ev();
extern void _ZN7S9231C2D1Ev();
Name_Map name_map_S9231C2[] = {
  NSPAIR(_ZN7S9231C2C1Ev),
  NSPAIR(_ZN7S9231C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9231C2[];
extern void _ZN7S9231C2D1Ev();
extern void _ZN7S9231C2D0Ev();
extern void _ZN7S9231C22v3Ev();
extern void _ZN7S9231C22v4Ev();
extern void _ZN7S9231C22v5Ev();
static  VTBL_ENTRY vtc_S9231C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9231C2[0]),
  (VTBL_ENTRY)&_ZN7S9231C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9231C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9231C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9231C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9231C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9231C2[];
extern  VTBL_ENTRY _ZTV7S9231C2[];
Class_Descriptor cd_S9231C2 = {  "S9231C2", // class name
  0,0,//no base classes
  &(vtc_S9231C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9231C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9231C2),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  S9231C1  : S9231C2 {
  void *s9231c1f0;
  int s9231c1f1;
  ::S4426C6_nt s9231c1f2;
  ::S4426C8 s9231c1f3;
  virtual void  v1(); // _ZN7S9231C12v1Ev
  virtual void  v2(); // _ZN7S9231C12v2Ev
  ~S9231C1(); // tgen
  S9231C1(); // tgen
};
//SIG(1 S9231C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp Fi FC5{ m FC6{ FL[4]}} FC7{ BC8{ m Fp FC9{ Fi[4]}} vd v6 Fi}}


void  S9231C1 ::v1(){vfunc_called(this, "_ZN7S9231C12v1Ev");}
void  S9231C1 ::v2(){vfunc_called(this, "_ZN7S9231C12v2Ev");}
S9231C1 ::~S9231C1(){ note_dtor("S9231C1", this);} // tgen
S9231C1 ::S9231C1(){ note_ctor("S9231C1", this);} // tgen

static void Test_S9231C1()
{
  extern Class_Descriptor cd_S9231C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,25)];
    init_test(&cd_S9231C1, buf);
    S9231C1 *dp, &lv = *(dp=new (buf) S9231C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,96), "sizeof(S9231C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9231C1)");
    check_base_class_offset(lv, (S9231C2*), 0, "S9231C1");
    check_field_offset(lv, s9231c1f0, ABISELECT(40,28), "S9231C1.s9231c1f0");
    check_field_offset(lv, s9231c1f1, ABISELECT(48,32), "S9231C1.s9231c1f1");
    check_field_offset(lv, s9231c1f2, ABISELECT(56,36), "S9231C1.s9231c1f2");
    check_field_offset(lv, s9231c1f3, ABISELECT(88,68), "S9231C1.s9231c1f3");
    test_class_info(&lv, &cd_S9231C1);
    dp->~S9231C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9231C1(Test_S9231C1, "S9231C1", ABISELECT(128,96));

#else // __cplusplus

extern void _ZN7S9231C1C1Ev();
extern void _ZN7S9231C1D1Ev();
Name_Map name_map_S9231C1[] = {
  NSPAIR(_ZN7S9231C1C1Ev),
  NSPAIR(_ZN7S9231C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9231C2;
extern VTBL_ENTRY _ZTI7S9231C2[];
extern  VTBL_ENTRY _ZTV7S9231C2[];
static Base_Class bases_S9231C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9231C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9231C1[];
extern void _ZN7S9231C1D1Ev();
extern void _ZN7S9231C1D0Ev();
extern void _ZN7S9231C22v3Ev();
extern void _ZN7S9231C22v4Ev();
extern void _ZN7S9231C22v5Ev();
extern void _ZN7S9231C12v1Ev();
extern void _ZN7S9231C12v2Ev();
static  VTBL_ENTRY vtc_S9231C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9231C1[0]),
  (VTBL_ENTRY)&_ZN7S9231C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9231C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9231C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9231C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9231C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9231C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9231C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9231C1[];
extern  VTBL_ENTRY _ZTV7S9231C1[];
Class_Descriptor cd_S9231C1 = {  "S9231C1", // class name
  bases_S9231C1, 1,
  &(vtc_S9231C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,96), // object size
  NSPAIRA(_ZTI7S9231C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9231C1),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  S2278C4  {
  virtual  ~S2278C4(); // _ZN7S2278C4D1Ev
  virtual void  v4(); // _ZN7S2278C42v4Ev
  virtual void  v5(); // _ZN7S2278C42v5Ev
  virtual void  v6(); // _ZN7S2278C42v6Ev
  S2278C4(); // tgen
};
//SIG(-1 S2278C4) C1{ vd v1 v2 v3}


 S2278C4 ::~S2278C4(){ note_dtor("S2278C4", this);}
void  S2278C4 ::v4(){vfunc_called(this, "_ZN7S2278C42v4Ev");}
void  S2278C4 ::v5(){vfunc_called(this, "_ZN7S2278C42v5Ev");}
void  S2278C4 ::v6(){vfunc_called(this, "_ZN7S2278C42v6Ev");}
S2278C4 ::S2278C4(){ note_ctor("S2278C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2278C4C1Ev();
extern void _ZN7S2278C4D1Ev();
Name_Map name_map_S2278C4[] = {
  NSPAIR(_ZN7S2278C4C1Ev),
  NSPAIR(_ZN7S2278C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2278C4[];
extern void _ZN7S2278C4D1Ev();
extern void _ZN7S2278C4D0Ev();
extern void _ZN7S2278C42v4Ev();
extern void _ZN7S2278C42v5Ev();
extern void _ZN7S2278C42v6Ev();
static  VTBL_ENTRY vtc_S2278C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2278C4[0]),
  (VTBL_ENTRY)&_ZN7S2278C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2278C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2278C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2278C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2278C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S2278C4[];
extern  VTBL_ENTRY _ZTV7S2278C4[];
Class_Descriptor cd_S2278C4 = {  "S2278C4", // class name
  0,0,//no base classes
  &(vtc_S2278C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2278C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2278C4),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  S2278C3  : S2278C4 {
  ::S5166C36 s2278c3f0;
  ::S2355C13_nt s2278c3f1;
  char s2278c3f2;
  virtual  ~S2278C3(); // _ZN7S2278C3D1Ev
  virtual void  v7(); // _ZN7S2278C32v7Ev
  virtual void  v8(); // _ZN7S2278C32v8Ev
  virtual void  v9(); // _ZN7S2278C32v9Ev
  S2278C3(); // tgen
};
//SIG(-1 S2278C3) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2278C3 ::~S2278C3(){ note_dtor("S2278C3", this);}
void  S2278C3 ::v7(){vfunc_called(this, "_ZN7S2278C32v7Ev");}
void  S2278C3 ::v8(){vfunc_called(this, "_ZN7S2278C32v8Ev");}
void  S2278C3 ::v9(){vfunc_called(this, "_ZN7S2278C32v9Ev");}
S2278C3 ::S2278C3(){ note_ctor("S2278C3", this);} // tgen

static void Test_S2278C3()
{
  extern Class_Descriptor cd_S2278C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2278C3, buf);
    S2278C3 *dp, &lv = *(dp=new (buf) S2278C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2278C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2278C3)");
    check_base_class_offset(lv, (S2278C4*), 0, "S2278C3");
    check_field_offset(lv, s2278c3f0, ABISELECT(8,4), "S2278C3.s2278c3f0");
    check_field_offset(lv, s2278c3f1, ABISELECT(32,20), "S2278C3.s2278c3f1");
    check_field_offset(lv, s2278c3f2, ABISELECT(64,52), "S2278C3.s2278c3f2");
    test_class_info(&lv, &cd_S2278C3);
    dp->~S2278C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2278C3(Test_S2278C3, "S2278C3", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2278C3C1Ev();
extern void _ZN7S2278C3D1Ev();
Name_Map name_map_S2278C3[] = {
  NSPAIR(_ZN7S2278C3C1Ev),
  NSPAIR(_ZN7S2278C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2278C4;
extern VTBL_ENTRY _ZTI7S2278C4[];
extern  VTBL_ENTRY _ZTV7S2278C4[];
static Base_Class bases_S2278C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2278C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2278C3[];
extern void _ZN7S2278C3D1Ev();
extern void _ZN7S2278C3D0Ev();
extern void _ZN7S2278C42v4Ev();
extern void _ZN7S2278C42v5Ev();
extern void _ZN7S2278C42v6Ev();
extern void _ZN7S2278C32v7Ev();
extern void _ZN7S2278C32v8Ev();
extern void _ZN7S2278C32v9Ev();
static  VTBL_ENTRY vtc_S2278C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2278C3[0]),
  (VTBL_ENTRY)&_ZN7S2278C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2278C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2278C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2278C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2278C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2278C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2278C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2278C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S2278C3[];
extern  VTBL_ENTRY _ZTV7S2278C3[];
Class_Descriptor cd_S2278C3 = {  "S2278C3", // class name
  bases_S2278C3, 1,
  &(vtc_S2278C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2278C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2278C3),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  S2278C2  : S2278C3 {
  virtual  ~S2278C2(); // _ZN7S2278C2D1Ev
  virtual void  v10(); // _ZN7S2278C23v10Ev
  virtual void  v11(); // _ZN7S2278C23v11Ev
  virtual void  v12(); // _ZN7S2278C23v12Ev
  S2278C2(); // tgen
};
//SIG(-1 S2278C2) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd v1 v2 v3}


 S2278C2 ::~S2278C2(){ note_dtor("S2278C2", this);}
void  S2278C2 ::v10(){vfunc_called(this, "_ZN7S2278C23v10Ev");}
void  S2278C2 ::v11(){vfunc_called(this, "_ZN7S2278C23v11Ev");}
void  S2278C2 ::v12(){vfunc_called(this, "_ZN7S2278C23v12Ev");}
S2278C2 ::S2278C2(){ note_ctor("S2278C2", this);} // tgen

static void Test_S2278C2()
{
  extern Class_Descriptor cd_S2278C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2278C2, buf);
    S2278C2 *dp, &lv = *(dp=new (buf) S2278C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2278C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2278C2)");
    check_base_class_offset(lv, (S2278C4*)(S2278C3*), 0, "S2278C2");
    check_base_class_offset(lv, (S2278C3*), 0, "S2278C2");
    test_class_info(&lv, &cd_S2278C2);
    dp->~S2278C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2278C2(Test_S2278C2, "S2278C2", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2278C2C1Ev();
extern void _ZN7S2278C2D1Ev();
Name_Map name_map_S2278C2[] = {
  NSPAIR(_ZN7S2278C2C1Ev),
  NSPAIR(_ZN7S2278C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2278C4;
extern VTBL_ENTRY _ZTI7S2278C4[];
extern  VTBL_ENTRY _ZTV7S2278C4[];
extern Class_Descriptor cd_S2278C3;
extern VTBL_ENTRY _ZTI7S2278C3[];
extern  VTBL_ENTRY _ZTV7S2278C3[];
static Base_Class bases_S2278C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2278C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2278C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2278C2[];
extern void _ZN7S2278C2D1Ev();
extern void _ZN7S2278C2D0Ev();
extern void _ZN7S2278C42v4Ev();
extern void _ZN7S2278C42v5Ev();
extern void _ZN7S2278C42v6Ev();
extern void _ZN7S2278C32v7Ev();
extern void _ZN7S2278C32v8Ev();
extern void _ZN7S2278C32v9Ev();
extern void _ZN7S2278C23v10Ev();
extern void _ZN7S2278C23v11Ev();
extern void _ZN7S2278C23v12Ev();
static  VTBL_ENTRY vtc_S2278C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2278C2[0]),
  (VTBL_ENTRY)&_ZN7S2278C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2278C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2278C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2278C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2278C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2278C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2278C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2278C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2278C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2278C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2278C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S2278C2[];
extern  VTBL_ENTRY _ZTV7S2278C2[];
Class_Descriptor cd_S2278C2 = {  "S2278C2", // class name
  bases_S2278C2, 2,
  &(vtc_S2278C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2278C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2278C2),13, //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  S2278C1  : S2278C2 {
  void *s2278c1f0[3];
  virtual  ~S2278C1(); // _ZN7S2278C1D1Ev
  virtual void  v1(); // _ZN7S2278C12v1Ev
  virtual void  v2(); // _ZN7S2278C12v2Ev
  virtual void  v3(); // _ZN7S2278C12v3Ev
  S2278C1(); // tgen
};
//SIG(1 S2278C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6} vd v7 v8 v9 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FL[4]} Fc} vd v10 v11 v12} vd v1 v2 v3 Fp[3]}


 S2278C1 ::~S2278C1(){ note_dtor("S2278C1", this);}
void  S2278C1 ::v1(){vfunc_called(this, "_ZN7S2278C12v1Ev");}
void  S2278C1 ::v2(){vfunc_called(this, "_ZN7S2278C12v2Ev");}
void  S2278C1 ::v3(){vfunc_called(this, "_ZN7S2278C12v3Ev");}
S2278C1 ::S2278C1(){ note_ctor("S2278C1", this);} // tgen

static void Test_S2278C1()
{
  extern Class_Descriptor cd_S2278C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,18)];
    init_test(&cd_S2278C1, buf);
    S2278C1 *dp, &lv = *(dp=new (buf) S2278C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S2278C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2278C1)");
    check_base_class_offset(lv, (S2278C4*)(S2278C3*)(S2278C2*), 0, "S2278C1");
    check_base_class_offset(lv, (S2278C3*)(S2278C2*), 0, "S2278C1");
    check_base_class_offset(lv, (S2278C2*), 0, "S2278C1");
    check_field_offset(lv, s2278c1f0, ABISELECT(72,56), "S2278C1.s2278c1f0");
    test_class_info(&lv, &cd_S2278C1);
    dp->~S2278C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2278C1(Test_S2278C1, "S2278C1", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN7S2278C1C1Ev();
extern void _ZN7S2278C1D1Ev();
Name_Map name_map_S2278C1[] = {
  NSPAIR(_ZN7S2278C1C1Ev),
  NSPAIR(_ZN7S2278C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2278C4;
extern VTBL_ENTRY _ZTI7S2278C4[];
extern  VTBL_ENTRY _ZTV7S2278C4[];
extern Class_Descriptor cd_S2278C3;
extern VTBL_ENTRY _ZTI7S2278C3[];
extern  VTBL_ENTRY _ZTV7S2278C3[];
extern Class_Descriptor cd_S2278C2;
extern VTBL_ENTRY _ZTI7S2278C2[];
extern  VTBL_ENTRY _ZTV7S2278C2[];
static Base_Class bases_S2278C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2278C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2278C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2278C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2278C1[];
extern void _ZN7S2278C1D1Ev();
extern void _ZN7S2278C1D0Ev();
extern void _ZN7S2278C42v4Ev();
extern void _ZN7S2278C42v5Ev();
extern void _ZN7S2278C42v6Ev();
extern void _ZN7S2278C32v7Ev();
extern void _ZN7S2278C32v8Ev();
extern void _ZN7S2278C32v9Ev();
extern void _ZN7S2278C23v10Ev();
extern void _ZN7S2278C23v11Ev();
extern void _ZN7S2278C23v12Ev();
extern void _ZN7S2278C12v1Ev();
extern void _ZN7S2278C12v2Ev();
extern void _ZN7S2278C12v3Ev();
static  VTBL_ENTRY vtc_S2278C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2278C1[0]),
  (VTBL_ENTRY)&_ZN7S2278C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2278C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2278C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2278C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2278C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2278C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2278C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2278C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2278C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2278C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2278C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2278C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2278C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2278C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S2278C1[];
extern  VTBL_ENTRY _ZTV7S2278C1[];
Class_Descriptor cd_S2278C1 = {  "S2278C1", // class name
  bases_S2278C1, 3,
  &(vtc_S2278C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI7S2278C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2278C1),16, //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  S4182C3  {
  virtual  ~S4182C3(); // _ZN7S4182C3D1Ev
  virtual void  v1(); // _ZN7S4182C32v1Ev
  virtual void  v2(); // _ZN7S4182C32v2Ev
  virtual void  v3(); // _ZN7S4182C32v3Ev
  S4182C3(); // tgen
};
//SIG(-1 S4182C3) C1{ vd v1 v2 v3}


 S4182C3 ::~S4182C3(){ note_dtor("S4182C3", this);}
void  S4182C3 ::v1(){vfunc_called(this, "_ZN7S4182C32v1Ev");}
void  S4182C3 ::v2(){vfunc_called(this, "_ZN7S4182C32v2Ev");}
void  S4182C3 ::v3(){vfunc_called(this, "_ZN7S4182C32v3Ev");}
S4182C3 ::S4182C3(){ note_ctor("S4182C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4182C3C1Ev();
extern void _ZN7S4182C3D1Ev();
Name_Map name_map_S4182C3[] = {
  NSPAIR(_ZN7S4182C3C1Ev),
  NSPAIR(_ZN7S4182C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4182C3[];
extern void _ZN7S4182C3D1Ev();
extern void _ZN7S4182C3D0Ev();
extern void _ZN7S4182C32v1Ev();
extern void _ZN7S4182C32v2Ev();
extern void _ZN7S4182C32v3Ev();
static  VTBL_ENTRY vtc_S4182C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4182C3[0]),
  (VTBL_ENTRY)&_ZN7S4182C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4182C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4182C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4182C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4182C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4182C3[];
extern  VTBL_ENTRY _ZTV7S4182C3[];
Class_Descriptor cd_S4182C3 = {  "S4182C3", // class name
  0,0,//no base classes
  &(vtc_S4182C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4182C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4182C3),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  S4182C2  : S4182C3 {
  ::S5166C36 s4182c2f0;
  ::S2355C13_nt s4182c2f1;
  char s4182c2f2;
  virtual  ~S4182C2(); // _ZN7S4182C2D1Ev
  virtual void  v4(); // _ZN7S4182C22v4Ev
  virtual void  v5(); // _ZN7S4182C22v5Ev
  virtual void  v6(); // _ZN7S4182C22v6Ev
  S4182C2(); // tgen
};
//SIG(-1 S4182C2) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S4182C2 ::~S4182C2(){ note_dtor("S4182C2", this);}
void  S4182C2 ::v4(){vfunc_called(this, "_ZN7S4182C22v4Ev");}
void  S4182C2 ::v5(){vfunc_called(this, "_ZN7S4182C22v5Ev");}
void  S4182C2 ::v6(){vfunc_called(this, "_ZN7S4182C22v6Ev");}
S4182C2 ::S4182C2(){ note_ctor("S4182C2", this);} // tgen

static void Test_S4182C2()
{
  extern Class_Descriptor cd_S4182C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S4182C2, buf);
    S4182C2 *dp, &lv = *(dp=new (buf) S4182C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S4182C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4182C2)");
    check_base_class_offset(lv, (S4182C3*), 0, "S4182C2");
    check_field_offset(lv, s4182c2f0, ABISELECT(8,4), "S4182C2.s4182c2f0");
    check_field_offset(lv, s4182c2f1, ABISELECT(32,20), "S4182C2.s4182c2f1");
    check_field_offset(lv, s4182c2f2, ABISELECT(64,52), "S4182C2.s4182c2f2");
    test_class_info(&lv, &cd_S4182C2);
    dp->~S4182C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4182C2(Test_S4182C2, "S4182C2", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S4182C2C1Ev();
extern void _ZN7S4182C2D1Ev();
Name_Map name_map_S4182C2[] = {
  NSPAIR(_ZN7S4182C2C1Ev),
  NSPAIR(_ZN7S4182C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4182C3;
extern VTBL_ENTRY _ZTI7S4182C3[];
extern  VTBL_ENTRY _ZTV7S4182C3[];
static Base_Class bases_S4182C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4182C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4182C2[];
extern void _ZN7S4182C2D1Ev();
extern void _ZN7S4182C2D0Ev();
extern void _ZN7S4182C32v1Ev();
extern void _ZN7S4182C32v2Ev();
extern void _ZN7S4182C32v3Ev();
extern void _ZN7S4182C22v4Ev();
extern void _ZN7S4182C22v5Ev();
extern void _ZN7S4182C22v6Ev();
static  VTBL_ENTRY vtc_S4182C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4182C2[0]),
  (VTBL_ENTRY)&_ZN7S4182C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4182C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4182C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4182C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4182C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4182C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4182C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4182C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4182C2[];
extern  VTBL_ENTRY _ZTV7S4182C2[];
Class_Descriptor cd_S4182C2 = {  "S4182C2", // class name
  bases_S4182C2, 1,
  &(vtc_S4182C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S4182C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4182C2),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  S4182C1  : S4182C2 {
  ::S5166C37 s4182c1f0;
  ::S5166C28_nt s4182c1f1;
  void *s4182c1f2;
  virtual  ~S4182C1(); // _ZN7S4182C1D1Ev
  S4182C1(); // tgen
};
//SIG(1 S4182C1) C1{ BC2{ BC3{ vd v1 v2 v3} vd v4 v5 v6 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd FC5 FC7{ m Fp Fi[2] FC8{ m}} Fp}


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

static void Test_S4182C1()
{
  extern Class_Descriptor cd_S4182C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,20)];
    init_test(&cd_S4182C1, buf);
    S4182C1 *dp, &lv = *(dp=new (buf) S4182C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,76), "sizeof(S4182C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4182C1)");
    check_base_class_offset(lv, (S4182C3*)(S4182C2*), 0, "S4182C1");
    check_base_class_offset(lv, (S4182C2*), 0, "S4182C1");
    check_field_offset(lv, s4182c1f0, ABISELECT(65,53), "S4182C1.s4182c1f0");
    check_field_offset(lv, s4182c1f1, ABISELECT(72,56), "S4182C1.s4182c1f1");
    check_field_offset(lv, s4182c1f2, ABISELECT(96,72), "S4182C1.s4182c1f2");
    test_class_info(&lv, &cd_S4182C1);
    dp->~S4182C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4182C1(Test_S4182C1, "S4182C1", ABISELECT(104,76));

#else // __cplusplus

extern void _ZN7S4182C1C1Ev();
extern void _ZN7S4182C1D1Ev();
Name_Map name_map_S4182C1[] = {
  NSPAIR(_ZN7S4182C1C1Ev),
  NSPAIR(_ZN7S4182C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4182C3;
extern VTBL_ENTRY _ZTI7S4182C3[];
extern  VTBL_ENTRY _ZTV7S4182C3[];
extern Class_Descriptor cd_S4182C2;
extern VTBL_ENTRY _ZTI7S4182C2[];
extern  VTBL_ENTRY _ZTV7S4182C2[];
static Base_Class bases_S4182C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4182C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4182C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4182C1[];
extern void _ZN7S4182C1D1Ev();
extern void _ZN7S4182C1D0Ev();
extern void _ZN7S4182C32v1Ev();
extern void _ZN7S4182C32v2Ev();
extern void _ZN7S4182C32v3Ev();
extern void _ZN7S4182C22v4Ev();
extern void _ZN7S4182C22v5Ev();
extern void _ZN7S4182C22v6Ev();
static  VTBL_ENTRY vtc_S4182C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4182C1[0]),
  (VTBL_ENTRY)&_ZN7S4182C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4182C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4182C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4182C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4182C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4182C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4182C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4182C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4182C1[];
extern  VTBL_ENTRY _ZTV7S4182C1[];
Class_Descriptor cd_S4182C1 = {  "S4182C1", // class name
  bases_S4182C1, 2,
  &(vtc_S4182C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,76), // object size
  NSPAIRA(_ZTI7S4182C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4182C1),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  S9232C2  {
  ::S8053C10_nt s9232c2f0;
  int s9232c2f1[2];
  char s9232c2f2;
  virtual  ~S9232C2(); // _ZN7S9232C2D1Ev
  virtual void  v3(); // _ZN7S9232C22v3Ev
  virtual void  v4(); // _ZN7S9232C22v4Ev
  virtual void  v5(); // _ZN7S9232C22v5Ev
  S9232C2(); // tgen
};
//SIG(-1 S9232C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9232C2 ::~S9232C2(){ note_dtor("S9232C2", this);}
void  S9232C2 ::v3(){vfunc_called(this, "_ZN7S9232C22v3Ev");}
void  S9232C2 ::v4(){vfunc_called(this, "_ZN7S9232C22v4Ev");}
void  S9232C2 ::v5(){vfunc_called(this, "_ZN7S9232C22v5Ev");}
S9232C2 ::S9232C2(){ note_ctor("S9232C2", this);} // tgen

static void Test_S9232C2()
{
  extern Class_Descriptor cd_S9232C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9232C2, buf);
    S9232C2 *dp, &lv = *(dp=new (buf) S9232C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9232C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9232C2)");
    check_field_offset(lv, s9232c2f0, ABISELECT(8,4), "S9232C2.s9232c2f0");
    check_field_offset(lv, s9232c2f1, ABISELECT(24,16), "S9232C2.s9232c2f1");
    check_field_offset(lv, s9232c2f2, ABISELECT(32,24), "S9232C2.s9232c2f2");
    test_class_info(&lv, &cd_S9232C2);
    dp->~S9232C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9232C2(Test_S9232C2, "S9232C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9232C2C1Ev();
extern void _ZN7S9232C2D1Ev();
Name_Map name_map_S9232C2[] = {
  NSPAIR(_ZN7S9232C2C1Ev),
  NSPAIR(_ZN7S9232C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9232C2[];
extern void _ZN7S9232C2D1Ev();
extern void _ZN7S9232C2D0Ev();
extern void _ZN7S9232C22v3Ev();
extern void _ZN7S9232C22v4Ev();
extern void _ZN7S9232C22v5Ev();
static  VTBL_ENTRY vtc_S9232C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9232C2[0]),
  (VTBL_ENTRY)&_ZN7S9232C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9232C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9232C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9232C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9232C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9232C2[];
extern  VTBL_ENTRY _ZTV7S9232C2[];
Class_Descriptor cd_S9232C2 = {  "S9232C2", // class name
  0,0,//no base classes
  &(vtc_S9232C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9232C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9232C2),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  S9232C1  : S9232C2 {
  void *s9232c1f0;
  int s9232c1f1;
  ::S2355C13_nt s9232c1f2;
  ::S4426C8 s9232c1f3;
  virtual void  v1(); // _ZN7S9232C12v1Ev
  virtual void  v2(); // _ZN7S9232C12v2Ev
  ~S9232C1(); // tgen
  S9232C1(); // tgen
};
//SIG(1 S9232C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp Fi FC5{ m FL[4]} FC6{ BC7{ m Fp FC8{ Fi[4]}} vd v6 Fi}}


void  S9232C1 ::v1(){vfunc_called(this, "_ZN7S9232C12v1Ev");}
void  S9232C1 ::v2(){vfunc_called(this, "_ZN7S9232C12v2Ev");}
S9232C1 ::~S9232C1(){ note_dtor("S9232C1", this);} // tgen
S9232C1 ::S9232C1(){ note_ctor("S9232C1", this);} // tgen

static void Test_S9232C1()
{
  extern Class_Descriptor cd_S9232C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,25)];
    init_test(&cd_S9232C1, buf);
    S9232C1 *dp, &lv = *(dp=new (buf) S9232C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,96), "sizeof(S9232C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9232C1)");
    check_base_class_offset(lv, (S9232C2*), 0, "S9232C1");
    check_field_offset(lv, s9232c1f0, ABISELECT(40,28), "S9232C1.s9232c1f0");
    check_field_offset(lv, s9232c1f1, ABISELECT(48,32), "S9232C1.s9232c1f1");
    check_field_offset(lv, s9232c1f2, ABISELECT(56,36), "S9232C1.s9232c1f2");
    check_field_offset(lv, s9232c1f3, ABISELECT(88,68), "S9232C1.s9232c1f3");
    test_class_info(&lv, &cd_S9232C1);
    dp->~S9232C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9232C1(Test_S9232C1, "S9232C1", ABISELECT(128,96));

#else // __cplusplus

extern void _ZN7S9232C1C1Ev();
extern void _ZN7S9232C1D1Ev();
Name_Map name_map_S9232C1[] = {
  NSPAIR(_ZN7S9232C1C1Ev),
  NSPAIR(_ZN7S9232C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9232C2;
extern VTBL_ENTRY _ZTI7S9232C2[];
extern  VTBL_ENTRY _ZTV7S9232C2[];
static Base_Class bases_S9232C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9232C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9232C1[];
extern void _ZN7S9232C1D1Ev();
extern void _ZN7S9232C1D0Ev();
extern void _ZN7S9232C22v3Ev();
extern void _ZN7S9232C22v4Ev();
extern void _ZN7S9232C22v5Ev();
extern void _ZN7S9232C12v1Ev();
extern void _ZN7S9232C12v2Ev();
static  VTBL_ENTRY vtc_S9232C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9232C1[0]),
  (VTBL_ENTRY)&_ZN7S9232C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9232C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9232C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9232C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9232C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9232C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9232C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9232C1[];
extern  VTBL_ENTRY _ZTV7S9232C1[];
Class_Descriptor cd_S9232C1 = {  "S9232C1", // class name
  bases_S9232C1, 1,
  &(vtc_S9232C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,96), // object size
  NSPAIRA(_ZTI7S9232C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9232C1),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  S2279C4  {
  virtual  ~S2279C4(); // _ZN7S2279C4D1Ev
  virtual void  v4(); // _ZN7S2279C42v4Ev
  virtual void  v5(); // _ZN7S2279C42v5Ev
  virtual void  v6(); // _ZN7S2279C42v6Ev
  S2279C4(); // tgen
};
//SIG(-1 S2279C4) C1{ vd v1 v2 v3}


 S2279C4 ::~S2279C4(){ note_dtor("S2279C4", this);}
void  S2279C4 ::v4(){vfunc_called(this, "_ZN7S2279C42v4Ev");}
void  S2279C4 ::v5(){vfunc_called(this, "_ZN7S2279C42v5Ev");}
void  S2279C4 ::v6(){vfunc_called(this, "_ZN7S2279C42v6Ev");}
S2279C4 ::S2279C4(){ note_ctor("S2279C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2279C4C1Ev();
extern void _ZN7S2279C4D1Ev();
Name_Map name_map_S2279C4[] = {
  NSPAIR(_ZN7S2279C4C1Ev),
  NSPAIR(_ZN7S2279C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2279C4[];
extern void _ZN7S2279C4D1Ev();
extern void _ZN7S2279C4D0Ev();
extern void _ZN7S2279C42v4Ev();
extern void _ZN7S2279C42v5Ev();
extern void _ZN7S2279C42v6Ev();
static  VTBL_ENTRY vtc_S2279C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2279C4[0]),
  (VTBL_ENTRY)&_ZN7S2279C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2279C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2279C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2279C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2279C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S2279C4[];
extern  VTBL_ENTRY _ZTV7S2279C4[];
Class_Descriptor cd_S2279C4 = {  "S2279C4", // class name
  0,0,//no base classes
  &(vtc_S2279C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2279C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2279C4),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  S2279C3  : S2279C4 {
  ::S5166C36 s2279c3f0;
  ::S2355C13_nt s2279c3f1;
  char s2279c3f2;
  virtual  ~S2279C3(); // _ZN7S2279C3D1Ev
  virtual void  v7(); // _ZN7S2279C32v7Ev
  virtual void  v8(); // _ZN7S2279C32v8Ev
  virtual void  v9(); // _ZN7S2279C32v9Ev
  S2279C3(); // tgen
};
//SIG(-1 S2279C3) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S2279C3 ::~S2279C3(){ note_dtor("S2279C3", this);}
void  S2279C3 ::v7(){vfunc_called(this, "_ZN7S2279C32v7Ev");}
void  S2279C3 ::v8(){vfunc_called(this, "_ZN7S2279C32v8Ev");}
void  S2279C3 ::v9(){vfunc_called(this, "_ZN7S2279C32v9Ev");}
S2279C3 ::S2279C3(){ note_ctor("S2279C3", this);} // tgen

static void Test_S2279C3()
{
  extern Class_Descriptor cd_S2279C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2279C3, buf);
    S2279C3 *dp, &lv = *(dp=new (buf) S2279C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2279C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2279C3)");
    check_base_class_offset(lv, (S2279C4*), 0, "S2279C3");
    check_field_offset(lv, s2279c3f0, ABISELECT(8,4), "S2279C3.s2279c3f0");
    check_field_offset(lv, s2279c3f1, ABISELECT(32,20), "S2279C3.s2279c3f1");
    check_field_offset(lv, s2279c3f2, ABISELECT(64,52), "S2279C3.s2279c3f2");
    test_class_info(&lv, &cd_S2279C3);
    dp->~S2279C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2279C3(Test_S2279C3, "S2279C3", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2279C3C1Ev();
extern void _ZN7S2279C3D1Ev();
Name_Map name_map_S2279C3[] = {
  NSPAIR(_ZN7S2279C3C1Ev),
  NSPAIR(_ZN7S2279C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2279C4;
extern VTBL_ENTRY _ZTI7S2279C4[];
extern  VTBL_ENTRY _ZTV7S2279C4[];
static Base_Class bases_S2279C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2279C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2279C3[];
extern void _ZN7S2279C3D1Ev();
extern void _ZN7S2279C3D0Ev();
extern void _ZN7S2279C42v4Ev();
extern void _ZN7S2279C42v5Ev();
extern void _ZN7S2279C42v6Ev();
extern void _ZN7S2279C32v7Ev();
extern void _ZN7S2279C32v8Ev();
extern void _ZN7S2279C32v9Ev();
static  VTBL_ENTRY vtc_S2279C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2279C3[0]),
  (VTBL_ENTRY)&_ZN7S2279C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2279C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2279C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2279C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2279C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2279C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2279C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2279C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S2279C3[];
extern  VTBL_ENTRY _ZTV7S2279C3[];
Class_Descriptor cd_S2279C3 = {  "S2279C3", // class name
  bases_S2279C3, 1,
  &(vtc_S2279C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2279C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2279C3),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  S2279C2  : S2279C3 {
  virtual  ~S2279C2(); // _ZN7S2279C2D1Ev
  virtual void  v10(); // _ZN7S2279C23v10Ev
  virtual void  v11(); // _ZN7S2279C23v11Ev
  virtual void  v12(); // _ZN7S2279C23v12Ev
  S2279C2(); // tgen
};
//SIG(-1 S2279C2) C1{ BC2{ BC3{ vd v4 v5 v6} vd v7 v8 v9 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd v1 v2 v3}


 S2279C2 ::~S2279C2(){ note_dtor("S2279C2", this);}
void  S2279C2 ::v10(){vfunc_called(this, "_ZN7S2279C23v10Ev");}
void  S2279C2 ::v11(){vfunc_called(this, "_ZN7S2279C23v11Ev");}
void  S2279C2 ::v12(){vfunc_called(this, "_ZN7S2279C23v12Ev");}
S2279C2 ::S2279C2(){ note_ctor("S2279C2", this);} // tgen

static void Test_S2279C2()
{
  extern Class_Descriptor cd_S2279C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2279C2, buf);
    S2279C2 *dp, &lv = *(dp=new (buf) S2279C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2279C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2279C2)");
    check_base_class_offset(lv, (S2279C4*)(S2279C3*), 0, "S2279C2");
    check_base_class_offset(lv, (S2279C3*), 0, "S2279C2");
    test_class_info(&lv, &cd_S2279C2);
    dp->~S2279C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2279C2(Test_S2279C2, "S2279C2", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2279C2C1Ev();
extern void _ZN7S2279C2D1Ev();
Name_Map name_map_S2279C2[] = {
  NSPAIR(_ZN7S2279C2C1Ev),
  NSPAIR(_ZN7S2279C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2279C4;
extern VTBL_ENTRY _ZTI7S2279C4[];
extern  VTBL_ENTRY _ZTV7S2279C4[];
extern Class_Descriptor cd_S2279C3;
extern VTBL_ENTRY _ZTI7S2279C3[];
extern  VTBL_ENTRY _ZTV7S2279C3[];
static Base_Class bases_S2279C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2279C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2279C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2279C2[];
extern void _ZN7S2279C2D1Ev();
extern void _ZN7S2279C2D0Ev();
extern void _ZN7S2279C42v4Ev();
extern void _ZN7S2279C42v5Ev();
extern void _ZN7S2279C42v6Ev();
extern void _ZN7S2279C32v7Ev();
extern void _ZN7S2279C32v8Ev();
extern void _ZN7S2279C32v9Ev();
extern void _ZN7S2279C23v10Ev();
extern void _ZN7S2279C23v11Ev();
extern void _ZN7S2279C23v12Ev();
static  VTBL_ENTRY vtc_S2279C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2279C2[0]),
  (VTBL_ENTRY)&_ZN7S2279C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2279C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2279C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2279C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2279C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2279C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2279C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2279C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2279C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2279C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2279C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S2279C2[];
extern  VTBL_ENTRY _ZTV7S2279C2[];
Class_Descriptor cd_S2279C2 = {  "S2279C2", // class name
  bases_S2279C2, 2,
  &(vtc_S2279C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2279C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2279C2),13, //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  S2279C1  : S2279C2 {
  virtual  ~S2279C1(); // _ZN7S2279C1D1Ev
  virtual void  v1(); // _ZN7S2279C12v1Ev
  virtual void  v2(); // _ZN7S2279C12v2Ev
  virtual void  v3(); // _ZN7S2279C12v3Ev
  S2279C1(); // tgen
};
//SIG(1 S2279C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6} vd v7 v8 v9 FC5{ m Fp Fi[2] FC6{ m}} FC7{ m FL[4]} Fc} vd v10 v11 v12} vd v1 v2 v3}


 S2279C1 ::~S2279C1(){ note_dtor("S2279C1", this);}
void  S2279C1 ::v1(){vfunc_called(this, "_ZN7S2279C12v1Ev");}
void  S2279C1 ::v2(){vfunc_called(this, "_ZN7S2279C12v2Ev");}
void  S2279C1 ::v3(){vfunc_called(this, "_ZN7S2279C12v3Ev");}
S2279C1 ::S2279C1(){ note_ctor("S2279C1", this);} // tgen

static void Test_S2279C1()
{
  extern Class_Descriptor cd_S2279C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S2279C1, buf);
    S2279C1 *dp, &lv = *(dp=new (buf) S2279C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S2279C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2279C1)");
    check_base_class_offset(lv, (S2279C4*)(S2279C3*)(S2279C2*), 0, "S2279C1");
    check_base_class_offset(lv, (S2279C3*)(S2279C2*), 0, "S2279C1");
    check_base_class_offset(lv, (S2279C2*), 0, "S2279C1");
    test_class_info(&lv, &cd_S2279C1);
    dp->~S2279C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2279C1(Test_S2279C1, "S2279C1", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S2279C1C1Ev();
extern void _ZN7S2279C1D1Ev();
Name_Map name_map_S2279C1[] = {
  NSPAIR(_ZN7S2279C1C1Ev),
  NSPAIR(_ZN7S2279C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2279C4;
extern VTBL_ENTRY _ZTI7S2279C4[];
extern  VTBL_ENTRY _ZTV7S2279C4[];
extern Class_Descriptor cd_S2279C3;
extern VTBL_ENTRY _ZTI7S2279C3[];
extern  VTBL_ENTRY _ZTV7S2279C3[];
extern Class_Descriptor cd_S2279C2;
extern VTBL_ENTRY _ZTI7S2279C2[];
extern  VTBL_ENTRY _ZTV7S2279C2[];
static Base_Class bases_S2279C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2279C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2279C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2279C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2279C1[];
extern void _ZN7S2279C1D1Ev();
extern void _ZN7S2279C1D0Ev();
extern void _ZN7S2279C42v4Ev();
extern void _ZN7S2279C42v5Ev();
extern void _ZN7S2279C42v6Ev();
extern void _ZN7S2279C32v7Ev();
extern void _ZN7S2279C32v8Ev();
extern void _ZN7S2279C32v9Ev();
extern void _ZN7S2279C23v10Ev();
extern void _ZN7S2279C23v11Ev();
extern void _ZN7S2279C23v12Ev();
extern void _ZN7S2279C12v1Ev();
extern void _ZN7S2279C12v2Ev();
extern void _ZN7S2279C12v3Ev();
static  VTBL_ENTRY vtc_S2279C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2279C1[0]),
  (VTBL_ENTRY)&_ZN7S2279C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2279C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2279C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2279C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2279C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2279C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2279C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2279C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2279C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2279C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2279C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2279C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2279C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2279C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S2279C1[];
extern  VTBL_ENTRY _ZTV7S2279C1[];
Class_Descriptor cd_S2279C1 = {  "S2279C1", // class name
  bases_S2279C1, 3,
  &(vtc_S2279C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S2279C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2279C1),16, //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  S5287C3  {
  virtual  ~S5287C3(); // _ZN7S5287C3D1Ev
  virtual void  v5(); // _ZN7S5287C32v5Ev
  virtual void  v6(); // _ZN7S5287C32v6Ev
  S5287C3(); // tgen
};
//SIG(-1 S5287C3) C1{ vd v1 v2}


 S5287C3 ::~S5287C3(){ note_dtor("S5287C3", this);}
void  S5287C3 ::v5(){vfunc_called(this, "_ZN7S5287C32v5Ev");}
void  S5287C3 ::v6(){vfunc_called(this, "_ZN7S5287C32v6Ev");}
S5287C3 ::S5287C3(){ note_ctor("S5287C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5287C3C1Ev();
extern void _ZN7S5287C3D1Ev();
Name_Map name_map_S5287C3[] = {
  NSPAIR(_ZN7S5287C3C1Ev),
  NSPAIR(_ZN7S5287C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5287C3[];
extern void _ZN7S5287C3D1Ev();
extern void _ZN7S5287C3D0Ev();
extern void _ZN7S5287C32v5Ev();
extern void _ZN7S5287C32v6Ev();
static  VTBL_ENTRY vtc_S5287C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5287C3[0]),
  (VTBL_ENTRY)&_ZN7S5287C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5287C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5287C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5287C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5287C3[];
extern  VTBL_ENTRY _ZTV7S5287C3[];
Class_Descriptor cd_S5287C3 = {  "S5287C3", // class name
  0,0,//no base classes
  &(vtc_S5287C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5287C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5287C3),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  S5287C2  : S5287C3 , S5166C37 {
  void *s5287c2f0[3];
  ::S5166C36 s5287c2f1;
  int s5287c2f2[3];
  virtual  ~S5287C2(); // _ZN7S5287C2D1Ev
  virtual void  v7(); // _ZN7S5287C22v7Ev
  virtual void  v8(); // _ZN7S5287C22v8Ev
  virtual void  v9(); // _ZN7S5287C22v9Ev
  virtual void  v10(); // _ZN7S5287C23v10Ev
  virtual void  v11(); // _ZN7S5287C23v11Ev
  virtual void  v12(); // _ZN7S5287C23v12Ev
  S5287C2(); // tgen
};
//SIG(-1 S5287C2) C1{ BC2{ vd v7 v8} BC3{ m} vd v1 v2 v3 v4 v5 v6 Fp[3] FC4{ m Fp Fi[2] FC3} Fi[3]}


 S5287C2 ::~S5287C2(){ note_dtor("S5287C2", this);}
void  S5287C2 ::v7(){vfunc_called(this, "_ZN7S5287C22v7Ev");}
void  S5287C2 ::v8(){vfunc_called(this, "_ZN7S5287C22v8Ev");}
void  S5287C2 ::v9(){vfunc_called(this, "_ZN7S5287C22v9Ev");}
void  S5287C2 ::v10(){vfunc_called(this, "_ZN7S5287C23v10Ev");}
void  S5287C2 ::v11(){vfunc_called(this, "_ZN7S5287C23v11Ev");}
void  S5287C2 ::v12(){vfunc_called(this, "_ZN7S5287C23v12Ev");}
S5287C2 ::S5287C2(){ note_ctor("S5287C2", this);} // tgen

static void Test_S5287C2()
{
  extern Class_Descriptor cd_S5287C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S5287C2, buf);
    S5287C2 *dp, &lv = *(dp=new (buf) S5287C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S5287C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5287C2)");
    check_base_class_offset(lv, (S5287C3*), 0, "S5287C2");
    check_base_class_offset(lv, (S5166C37*), 0, "S5287C2");
    check_field_offset(lv, s5287c2f0, ABISELECT(8,4), "S5287C2.s5287c2f0");
    check_field_offset(lv, s5287c2f1, ABISELECT(32,16), "S5287C2.s5287c2f1");
    check_field_offset(lv, s5287c2f2, ABISELECT(56,32), "S5287C2.s5287c2f2");
    test_class_info(&lv, &cd_S5287C2);
    dp->~S5287C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5287C2(Test_S5287C2, "S5287C2", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S5287C2C1Ev();
extern void _ZN7S5287C2D1Ev();
Name_Map name_map_S5287C2[] = {
  NSPAIR(_ZN7S5287C2C1Ev),
  NSPAIR(_ZN7S5287C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5287C3;
extern VTBL_ENTRY _ZTI7S5287C3[];
extern  VTBL_ENTRY _ZTV7S5287C3[];
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
static Base_Class bases_S5287C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5287C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S5287C2[];
extern void _ZN7S5287C2D1Ev();
extern void _ZN7S5287C2D0Ev();
extern void _ZN7S5287C32v5Ev();
extern void _ZN7S5287C32v6Ev();
extern void _ZN7S5287C22v7Ev();
extern void _ZN7S5287C22v8Ev();
extern void _ZN7S5287C22v9Ev();
extern void _ZN7S5287C23v10Ev();
extern void _ZN7S5287C23v11Ev();
extern void _ZN7S5287C23v12Ev();
static  VTBL_ENTRY vtc_S5287C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5287C2[0]),
  (VTBL_ENTRY)&_ZN7S5287C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5287C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5287C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5287C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5287C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5287C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5287C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5287C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5287C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5287C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S5287C2[];
extern  VTBL_ENTRY _ZTV7S5287C2[];
Class_Descriptor cd_S5287C2 = {  "S5287C2", // class name
  bases_S5287C2, 2,
  &(vtc_S5287C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S5287C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5287C2),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  S5287C1  : S5287C2 {
  char s5287c1f0;
  virtual  ~S5287C1(); // _ZN7S5287C1D1Ev
  virtual void  v1(); // _ZN7S5287C12v1Ev
  virtual void  v2(); // _ZN7S5287C12v2Ev
  virtual void  v3(); // _ZN7S5287C12v3Ev
  virtual void  v4(); // _ZN7S5287C12v4Ev
  S5287C1(); // tgen
};
//SIG(1 S5287C1) C1{ BC2{ BC3{ vd v5 v6} BC4{ m} vd v7 v8 v9 v10 v11 v12 Fp[3] FC5{ m Fp Fi[2] FC4} Fi[3]} vd v1 v2 v3 v4 Fc}


 S5287C1 ::~S5287C1(){ note_dtor("S5287C1", this);}
void  S5287C1 ::v1(){vfunc_called(this, "_ZN7S5287C12v1Ev");}
void  S5287C1 ::v2(){vfunc_called(this, "_ZN7S5287C12v2Ev");}
void  S5287C1 ::v3(){vfunc_called(this, "_ZN7S5287C12v3Ev");}
void  S5287C1 ::v4(){vfunc_called(this, "_ZN7S5287C12v4Ev");}
S5287C1 ::S5287C1(){ note_ctor("S5287C1", this);} // tgen

static void Test_S5287C1()
{
  extern Class_Descriptor cd_S5287C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S5287C1, buf);
    S5287C1 *dp, &lv = *(dp=new (buf) S5287C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S5287C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5287C1)");
    check_base_class_offset(lv, (S5287C3*)(S5287C2*), 0, "S5287C1");
    check_base_class_offset(lv, (S5166C37*)(S5287C2*), 0, "S5287C1");
    check_base_class_offset(lv, (S5287C2*), 0, "S5287C1");
    check_field_offset(lv, s5287c1f0, ABISELECT(68,44), "S5287C1.s5287c1f0");
    test_class_info(&lv, &cd_S5287C1);
    dp->~S5287C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5287C1(Test_S5287C1, "S5287C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S5287C1C1Ev();
extern void _ZN7S5287C1D1Ev();
Name_Map name_map_S5287C1[] = {
  NSPAIR(_ZN7S5287C1C1Ev),
  NSPAIR(_ZN7S5287C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5287C3;
extern VTBL_ENTRY _ZTI7S5287C3[];
extern  VTBL_ENTRY _ZTV7S5287C3[];
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5287C2;
extern VTBL_ENTRY _ZTI7S5287C2[];
extern  VTBL_ENTRY _ZTV7S5287C2[];
static Base_Class bases_S5287C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5287C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5287C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5287C1[];
extern void _ZN7S5287C1D1Ev();
extern void _ZN7S5287C1D0Ev();
extern void _ZN7S5287C32v5Ev();
extern void _ZN7S5287C32v6Ev();
extern void _ZN7S5287C22v7Ev();
extern void _ZN7S5287C22v8Ev();
extern void _ZN7S5287C22v9Ev();
extern void _ZN7S5287C23v10Ev();
extern void _ZN7S5287C23v11Ev();
extern void _ZN7S5287C23v12Ev();
extern void _ZN7S5287C12v1Ev();
extern void _ZN7S5287C12v2Ev();
extern void _ZN7S5287C12v3Ev();
extern void _ZN7S5287C12v4Ev();
static  VTBL_ENTRY vtc_S5287C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5287C1[0]),
  (VTBL_ENTRY)&_ZN7S5287C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5287C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5287C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5287C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5287C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5287C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5287C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5287C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5287C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5287C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5287C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5287C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5287C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5287C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S5287C1[];
extern  VTBL_ENTRY _ZTV7S5287C1[];
Class_Descriptor cd_S5287C1 = {  "S5287C1", // class name
  bases_S5287C1, 3,
  &(vtc_S5287C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S5287C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5287C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21030C3  : virtual S5166C37 , virtual S5166C27 {
  void *s21030c3f0;
  virtual  ~S21030C3(); // _ZN8S21030C3D2Ev
  S21030C3(); // tgen
};
//SIG(-1 S21030C3) C1{ VBC2{ m} VBC3{ m} vd Fp}


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

static void Test_S21030C3()
{
  extern Class_Descriptor cd_S21030C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S21030C3, buf);
    S21030C3 *dp, &lv = *(dp=new (buf) S21030C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21030C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21030C3)");
    check_base_class_offset(lv, (S5166C37*), 0, "S21030C3");
    check_base_class_offset(lv, (S5166C27*), 0, "S21030C3");
    check_field_offset(lv, s21030c3f0, ABISELECT(8,4), "S21030C3.s21030c3f0");
    test_class_info(&lv, &cd_S21030C3);
    dp->~S21030C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21030C3(Test_S21030C3, "S21030C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S21030C3C1Ev();
extern void _ZN8S21030C3D2Ev();
Name_Map name_map_S21030C3[] = {
  NSPAIR(_ZN8S21030C3C1Ev),
  NSPAIR(_ZN8S21030C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
static Base_Class bases_S21030C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S21030C3[];
extern void _ZN8S21030C3D1Ev();
extern void _ZN8S21030C3D0Ev();
static  VTBL_ENTRY vtc_S21030C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C3[0]),
  (VTBL_ENTRY)&_ZN8S21030C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C3D0Ev,
};
extern VTBL_ENTRY _ZTV8S21030C3[];
static  VTT_ENTRY vtt_S21030C3[] = {
  {&(_ZTV8S21030C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21030C3[];
extern  VTBL_ENTRY _ZTV8S21030C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C3[];
Class_Descriptor cd_S21030C3 = {  "S21030C3", // class name
  bases_S21030C3, 2,
  &(vtc_S21030C3[0]), // expected_vtbl_contents
  &(vtt_S21030C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S21030C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21030C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21030C3),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  S21030C2  : virtual S21030C3 {
  virtual  ~S21030C2(); // _ZN8S21030C2D2Ev
  S21030C2(); // tgen
};
//SIG(-1 S21030C2) C1{ VBC2{ VBC3{ m} VBC4{ m} vd Fp} vd}


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

static void Test_S21030C2()
{
  extern Class_Descriptor cd_S21030C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21030C2, buf);
    S21030C2 *dp, &lv = *(dp=new (buf) S21030C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21030C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21030C2)");
    check_base_class_offset(lv, (S5166C37*)(S21030C3*), 0, "S21030C2");
    check_base_class_offset(lv, (S5166C27*)(S21030C3*), 0, "S21030C2");
    check_base_class_offset(lv, (S21030C3*), ABISELECT(8,4), "S21030C2");
    test_class_info(&lv, &cd_S21030C2);
    dp->~S21030C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21030C2(Test_S21030C2, "S21030C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S21030C2C1Ev();
extern void _ZN8S21030C2D2Ev();
Name_Map name_map_S21030C2[] = {
  NSPAIR(_ZN8S21030C2C1Ev),
  NSPAIR(_ZN8S21030C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S21030C3;
extern VTBL_ENTRY _ZTI8S21030C3[];
extern  VTBL_ENTRY _ZTV8S21030C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C3[];
static Base_Class bases_S21030C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21030C3,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21030C2[];
extern void _ZN8S21030C2D1Ev();
extern void _ZN8S21030C2D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S21030C2D1Ev,_ZTv0_n20_N8S21030C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21030C2D1Ev,_ZThn4_N8S21030C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21030C2D0Ev,_ZTv0_n20_N8S21030C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21030C2D0Ev,_ZThn4_N8S21030C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21030C2[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C2[0]),
  (VTBL_ENTRY)&_ZN8S21030C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C2D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21030C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21030C2D1Ev,_ZTv0_n20_N8S21030C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21030C2D0Ev,_ZTv0_n20_N8S21030C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S21030C2[];
extern void _ZN8S21030C3D1Ev();
extern void _ZN8S21030C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21030C3__8S21030C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C3[0]),
  (VTBL_ENTRY)&_ZN8S21030C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C3D0Ev,
};
static  VTT_ENTRY vtt_S21030C2[] = {
  {&(_ZTV8S21030C2[5]),  5,14},
  {&(_ZTV8S21030C2[12]),  12,14},
  {&(_tg__ZTV8S21030C3__8S21030C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21030C2[];
extern  VTBL_ENTRY _ZTV8S21030C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C2[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21030C2D0Ev,_ZTv0_n20_N8S21030C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21030C2D0Ev,_ZThn4_N8S21030C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21030C2D1Ev,_ZTv0_n20_N8S21030C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21030C2D1Ev,_ZThn4_N8S21030C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21030C2 = {  "S21030C2", // class name
  bases_S21030C2, 3,
  &(vtc_S21030C2[0]), // expected_vtbl_contents
  &(vtt_S21030C2[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S21030C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21030C2),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21030C2),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names49,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21030C6  : virtual S5166C27 , virtual S21030C3 {
  int s21030c6f0;
  virtual  ~S21030C6(); // _ZN8S21030C6D2Ev
  S21030C6(); // tgen
};
//SIG(-1 S21030C6) C1{ VBC2{ m} VBC3{ VBC4{ m} VBC2 vd Fp} vd Fi}


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

static void Test_S21030C6()
{
  extern Class_Descriptor cd_S21030C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S21030C6, buf);
    S21030C6 *dp, &lv = *(dp=new (buf) S21030C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S21030C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21030C6)");
    check_base_class_offset(lv, (S5166C27*), 0, "S21030C6");
    check_base_class_offset(lv, (S5166C27*)(S21030C3*), 0, "S21030C6");
    check_base_class_offset(lv, (S5166C37*)(S21030C3*), 0, "S21030C6");
    check_base_class_offset(lv, (S21030C3*), ABISELECT(16,8), "S21030C6");
    check_field_offset(lv, s21030c6f0, ABISELECT(8,4), "S21030C6.s21030c6f0");
    test_class_info(&lv, &cd_S21030C6);
    dp->~S21030C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21030C6(Test_S21030C6, "S21030C6", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S21030C6C1Ev();
extern void _ZN8S21030C6D2Ev();
Name_Map name_map_S21030C6[] = {
  NSPAIR(_ZN8S21030C6C1Ev),
  NSPAIR(_ZN8S21030C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S21030C3;
extern VTBL_ENTRY _ZTI8S21030C3[];
extern  VTBL_ENTRY _ZTV8S21030C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C3[];
static Base_Class bases_S21030C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21030C3,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21030C6[];
extern void _ZN8S21030C6D1Ev();
extern void _ZN8S21030C6D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S21030C6D1Ev,_ZTv0_n20_N8S21030C6D1Ev)();
extern void ABISELECT(_ZThn16_N8S21030C6D1Ev,_ZThn8_N8S21030C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21030C6D0Ev,_ZTv0_n20_N8S21030C6D0Ev)();
extern void ABISELECT(_ZThn16_N8S21030C6D0Ev,_ZThn8_N8S21030C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21030C6[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C6[0]),
  (VTBL_ENTRY)&_ZN8S21030C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C6D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21030C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21030C6D1Ev,_ZTv0_n20_N8S21030C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21030C6D0Ev,_ZTv0_n20_N8S21030C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S21030C6[];
extern void _ZN8S21030C3D1Ev();
extern void _ZN8S21030C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21030C3__8S21030C6[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C3[0]),
  (VTBL_ENTRY)&_ZN8S21030C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C3D0Ev,
};
static  VTT_ENTRY vtt_S21030C6[] = {
  {&(_ZTV8S21030C6[5]),  5,14},
  {&(_ZTV8S21030C6[12]),  12,14},
  {&(_tg__ZTV8S21030C3__8S21030C6[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21030C6[];
extern  VTBL_ENTRY _ZTV8S21030C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C6[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21030C6D0Ev,_ZTv0_n20_N8S21030C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21030C6D0Ev,_ZThn8_N8S21030C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21030C6D1Ev,_ZTv0_n20_N8S21030C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21030C6D1Ev,_ZThn8_N8S21030C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21030C6 = {  "S21030C6", // class name
  bases_S21030C6, 3,
  &(vtc_S21030C6[0]), // expected_vtbl_contents
  &(vtt_S21030C6[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S21030C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21030C6),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21030C6),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21030C8  : S5166C27 , S21030C3 {
  ~S21030C8(); // tgen
  S21030C8(); // tgen
};
//SIG(-1 S21030C8) C1{ BC2{ m} BC3{ VBC4{ m} VBC2 vd Fp}}


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

static void Test_S21030C8()
{
  extern Class_Descriptor cd_S21030C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21030C8, buf);
    S21030C8 *dp, &lv = *(dp=new (buf) S21030C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21030C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21030C8)");
    /*is_ambiguous_... S21030C8::S5166C27 */ AMB_check_base_class_offset(lv, (S5166C27*), 0, "S21030C8");
    check_base_class_offset(lv, (S5166C37*)(S21030C3*), 0, "S21030C8");
    check_base_class_offset(lv, (S5166C27*)(S21030C3*), ABISELECT(16,8), "S21030C8");
    check_base_class_offset(lv, (S21030C3*), 0, "S21030C8");
    test_class_info(&lv, &cd_S21030C8);
    dp->~S21030C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21030C8(Test_S21030C8, "S21030C8", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S21030C8C1Ev();
extern void _ZN8S21030C8D1Ev();
Name_Map name_map_S21030C8[] = {
  NSPAIR(_ZN8S21030C8C1Ev),
  NSPAIR(_ZN8S21030C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S21030C3;
extern VTBL_ENTRY _ZTI8S21030C3[];
extern  VTBL_ENTRY _ZTV8S21030C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C3[];
static Base_Class bases_S21030C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5166C27,    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
    3, //immediately_derived
  0, 1},
  {&cd_S21030C3,    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
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21030C8[];
extern void _ZN8S21030C8D1Ev();
extern void _ZN8S21030C8D0Ev();
static  VTBL_ENTRY vtc_S21030C8[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C8[0]),
  (VTBL_ENTRY)&_ZN8S21030C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C8D0Ev,
};
extern VTBL_ENTRY _ZTV8S21030C8[];
extern void _ZN8S21030C3D1Ev();
extern void _ZN8S21030C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21030C3__8S21030C8[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C3[0]),
  (VTBL_ENTRY)&_ZN8S21030C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C3D0Ev,
};
static  VTT_ENTRY vtt_S21030C8[] = {
  {&(_ZTV8S21030C8[4]),  4,6},
  {&(_tg__ZTV8S21030C3__8S21030C8[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21030C8[];
extern  VTBL_ENTRY _ZTV8S21030C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C8[];
Class_Descriptor cd_S21030C8 = {  "S21030C8", // class name
  bases_S21030C8, 4,
  &(vtc_S21030C8[0]), // expected_vtbl_contents
  &(vtt_S21030C8[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S21030C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21030C8),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21030C8),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  S21030C7  : S21030C2 , S5166C37 , S5166C27 , S21030C8 {
  int s21030c7f0;
  ~S21030C7(); // tgen
  S21030C7(); // tgen
};
//SIG(-1 S21030C7) C1{ BC2{ VBC3{ VBC4{ m} VBC5{ m} vd Fp} vd} BC4 BC5 BC6{ BC5 BC3} Fi}


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

static void Test_S21030C7()
{
  extern Class_Descriptor cd_S21030C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S21030C7, buf);
    S21030C7 *dp, &lv = *(dp=new (buf) S21030C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S21030C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21030C7)");
    /*is_ambiguous_... S21030C7::S21030C3 */ AMB_check_base_class_offset(lv, (S5166C37*)(S21030C3*), ABISELECT(48,24), "S21030C7");
    check_base_class_offset(lv, (S5166C37*)(S21030C3*)(S21030C8*), ABISELECT(48,24), "S21030C7");
    /*is_ambiguous_... S21030C7::S21030C3 */ AMB_check_base_class_offset(lv, (S5166C27*)(S21030C3*), ABISELECT(48,24), "S21030C7");
    check_base_class_offset(lv, (S5166C27*)(S21030C3*)(S21030C8*), ABISELECT(48,24), "S21030C7");
    check_base_class_offset(lv, (S21030C3*)(S21030C2*), ABISELECT(32,16), "S21030C7");
    check_base_class_offset(lv, (S21030C2*), 0, "S21030C7");
    /*is_ambiguous_... S21030C7::S5166C37 */ AMB_check_base_class_offset(lv, (S5166C37*), 0, "S21030C7");
    /*is_ambiguous_... S21030C7::S5166C27 */ AMB_check_base_class_offset(lv, (S5166C27*), 0, "S21030C7");
    /*is_ambiguous_... S21030C8::S5166C27 */ AMB_check_base_class_offset(lv, (S5166C27*)(S21030C8*), ABISELECT(8,4), "S21030C7");
    check_base_class_offset(lv, (S21030C3*)(S21030C8*), ABISELECT(8,4), "S21030C7");
    check_base_class_offset(lv, (S21030C8*), ABISELECT(8,4), "S21030C7");
    check_field_offset(lv, s21030c7f0, ABISELECT(24,12), "S21030C7.s21030c7f0");
    test_class_info(&lv, &cd_S21030C7);
    dp->~S21030C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21030C7(Test_S21030C7, "S21030C7", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S21030C7C1Ev();
extern void _ZN8S21030C7D1Ev();
Name_Map name_map_S21030C7[] = {
  NSPAIR(_ZN8S21030C7C1Ev),
  NSPAIR(_ZN8S21030C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S21030C3;
extern VTBL_ENTRY _ZTI8S21030C3[];
extern  VTBL_ENTRY _ZTV8S21030C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C3[];
extern Class_Descriptor cd_S21030C2;
extern VTBL_ENTRY _ZTI8S21030C2[];
extern  VTBL_ENTRY _ZTV8S21030C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C2[];
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S21030C3;
extern VTBL_ENTRY _ZTI8S21030C3[];
extern  VTBL_ENTRY _ZTV8S21030C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C3[];
extern Class_Descriptor cd_S21030C8;
extern VTBL_ENTRY _ZTI8S21030C8[];
extern  VTBL_ENTRY _ZTV8S21030C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C8[];
static Base_Class bases_S21030C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    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
    2, //immediately_derived
  0, 1},
  {&cd_S5166C27,    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
    2, //immediately_derived
  0, 1},
  {&cd_S21030C3,    ABISELECT(32,16), //bcp->offset
    13, //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
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21030C2,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5166C27,    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
    8, //immediately_derived
  0, 0},
  {&cd_S21030C3,    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
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S21030C8,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21030C7[];
extern void _ZN8S21030C7D1Ev();
extern void _ZN8S21030C7D0Ev();
extern void ABISELECT(_ZThn8_N8S21030C7D1Ev,_ZThn4_N8S21030C7D1Ev)();
extern void ABISELECT(_ZThn8_N8S21030C7D0Ev,_ZThn4_N8S21030C7D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21030C7D1Ev,_ZTv0_n20_N8S21030C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S21030C7D1Ev,_ZThn16_N8S21030C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21030C7D0Ev,_ZTv0_n20_N8S21030C7D0Ev)();
extern void ABISELECT(_ZThn32_N8S21030C7D0Ev,_ZThn16_N8S21030C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21030C7[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C7[0]),
  (VTBL_ENTRY)&_ZN8S21030C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C7D0Ev,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21030C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S21030C7D1Ev,_ZThn4_N8S21030C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S21030C7D0Ev,_ZThn4_N8S21030C7D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21030C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21030C7D1Ev,_ZTv0_n20_N8S21030C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21030C7D0Ev,_ZTv0_n20_N8S21030C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S21030C7[];
extern void _ZN8S21030C2D1Ev();
extern void _ZN8S21030C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21030C2__8S21030C7[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C2[0]),
  (VTBL_ENTRY)&_ZN8S21030C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C2D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21030C2D1Ev,_ZTv0_n20_N8S21030C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S21030C2D1Ev,_ZThn16_N8S21030C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21030C2D0Ev,_ZTv0_n20_N8S21030C2D0Ev)();
extern void ABISELECT(_ZThn32_N8S21030C2D0Ev,_ZThn16_N8S21030C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21030C3__8S21030C2__8S21030C7[] = {
  ABISELECT(-32,-16),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21030C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21030C2D1Ev,_ZTv0_n20_N8S21030C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21030C2D0Ev,_ZTv0_n20_N8S21030C2D0Ev),
};
extern void _ZN8S21030C8D1Ev();
extern void _ZN8S21030C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21030C8__8S21030C7[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C8[0]),
  (VTBL_ENTRY)&_ZN8S21030C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C8D0Ev,
};
extern void _ZN8S21030C3D1Ev();
extern void _ZN8S21030C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21030C38S21030C8__A1__8S21030C7[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C3[0]),
  (VTBL_ENTRY)&_ZN8S21030C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C3D0Ev,
};
extern void _ZN8S21030C3D1Ev();
extern void _ZN8S21030C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21030C3__8S21030C7[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C3[0]),
  (VTBL_ENTRY)&_ZN8S21030C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C3D0Ev,
};
static  VTT_ENTRY vtt_S21030C7[] = {
  {&(_ZTV8S21030C7[5]),  5,20},
  {&(_tg__ZTV8S21030C2__8S21030C7[5]),  5,7},
  {&(_tg__ZTV8S21030C3__8S21030C2__8S21030C7[5]),  5,7},
  {&(_tg__ZTV8S21030C8__8S21030C7[4]),  4,6},
  {&(_tg__ZTV8S21030C38S21030C8__A1__8S21030C7[4]),  4,6},
  {&(_ZTV8S21030C7[18]),  18,20},
  {&(_ZTV8S21030C7[11]),  11,20},
  {&(_tg__ZTV8S21030C3__8S21030C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21030C7[];
extern  VTBL_ENTRY _ZTV8S21030C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C7[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21030C2D0Ev,_ZTv0_n20_N8S21030C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21030C2D0Ev,_ZThn16_N8S21030C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21030C2D1Ev,_ZTv0_n20_N8S21030C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21030C2D1Ev,_ZThn16_N8S21030C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21030C7D0Ev,_ZTv0_n20_N8S21030C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21030C7D0Ev,_ZThn16_N8S21030C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21030C7D1Ev,_ZTv0_n20_N8S21030C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21030C7D1Ev,_ZThn16_N8S21030C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21030C7 = {  "S21030C7", // class name
  bases_S21030C7, 9,
  &(vtc_S21030C7[0]), // expected_vtbl_contents
  &(vtt_S21030C7[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S21030C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21030C7),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21030C7),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21030C1  : virtual S21030C2 , virtual S21030C6 , virtual S21030C7 , S5166C23 {
  int s21030c1f0;
  virtual  ~S21030C1(); // _ZN8S21030C1D2Ev
  S21030C1(); // tgen
};
//SIG(1 S21030C1) C1{ VBC2{ VBC3{ VBC4{ m} VBC5{ m} vd Fp} vd} VBC6{ VBC5 VBC3 vd Fi} VBC7{ BC2 BC4 BC5 BC8{ BC5 BC3} Fi} BC9{ m} vd Fi}


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

static void Test_S21030C1()
{
  extern Class_Descriptor cd_S21030C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[11];
    init_test(&cd_S21030C1, buf);
    S21030C1 *dp, &lv = *(dp=new (buf) S21030C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S21030C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21030C1)");
    /*is_ambiguous_... S21030C1::S21030C3 */ AMB_check_base_class_offset(lv, (S5166C37*)(S21030C3*), 0, "S21030C1");
    check_base_class_offset(lv, (S5166C37*)(S21030C3*)(S21030C8*)(S21030C7*), 0, "S21030C1");
    /*is_ambiguous_... S21030C1::S21030C3 */ AMB_check_base_class_offset(lv, (S5166C27*)(S21030C3*), 0, "S21030C1");
    check_base_class_offset(lv, (S5166C27*)(S21030C6*), 0, "S21030C1");
    check_base_class_offset(lv, (S5166C27*)(S21030C3*)(S21030C8*)(S21030C7*), 0, "S21030C1");
    /*is_ambiguous_... S21030C1::S21030C2 */ AMB_check_base_class_offset(lv, (S21030C3*)(S21030C2*), ABISELECT(16,8), "S21030C1");
    check_base_class_offset(lv, (S21030C3*)(S21030C6*), ABISELECT(16,8), "S21030C1");
    check_base_class_offset(lv, (S21030C3*)(S21030C2*)(S21030C7*), ABISELECT(16,8), "S21030C1");
    /*is_ambiguous_... S21030C1::S21030C2 */ AMB_check_base_class_offset(lv, (S21030C2*), 0, "S21030C1");
    check_base_class_offset(lv, (S21030C6*), ABISELECT(32,16), "S21030C1");
    check_base_class_offset(lv, (S21030C2*)(S21030C7*), ABISELECT(48,24), "S21030C1");
    /*is_ambiguous_... S21030C7::S5166C37 */ AMB_check_base_class_offset(lv, (S5166C37*)(S21030C7*), ABISELECT(48,24), "S21030C1");
    /*is_ambiguous_... S21030C7::S5166C27 */ AMB_check_base_class_offset(lv, (S5166C27*)(S21030C7*), ABISELECT(48,24), "S21030C1");
    /*is_ambiguous_... S21030C8::S5166C27 */ AMB_check_base_class_offset(lv, (S5166C27*)(S21030C8*)(S21030C7*), ABISELECT(56,28), "S21030C1");
    check_base_class_offset(lv, (S21030C3*)(S21030C8*)(S21030C7*), ABISELECT(56,28), "S21030C1");
    check_base_class_offset(lv, (S21030C8*)(S21030C7*), ABISELECT(56,28), "S21030C1");
    check_base_class_offset(lv, (S21030C7*), ABISELECT(48,24), "S21030C1");
    check_base_class_offset(lv, (S5166C23*), 0, "S21030C1");
    check_field_offset(lv, s21030c1f0, ABISELECT(8,4), "S21030C1.s21030c1f0");
    test_class_info(&lv, &cd_S21030C1);
    dp->~S21030C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21030C1(Test_S21030C1, "S21030C1", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN8S21030C1C1Ev();
extern void _ZN8S21030C1D2Ev();
Name_Map name_map_S21030C1[] = {
  NSPAIR(_ZN8S21030C1C1Ev),
  NSPAIR(_ZN8S21030C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S21030C3;
extern VTBL_ENTRY _ZTI8S21030C3[];
extern  VTBL_ENTRY _ZTV8S21030C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C3[];
extern Class_Descriptor cd_S21030C2;
extern VTBL_ENTRY _ZTI8S21030C2[];
extern  VTBL_ENTRY _ZTV8S21030C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C2[];
extern Class_Descriptor cd_S21030C6;
extern VTBL_ENTRY _ZTI8S21030C6[];
extern  VTBL_ENTRY _ZTV8S21030C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C6[];
extern Class_Descriptor cd_S21030C2;
extern VTBL_ENTRY _ZTI8S21030C2[];
extern  VTBL_ENTRY _ZTV8S21030C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C2[];
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S21030C3;
extern VTBL_ENTRY _ZTI8S21030C3[];
extern  VTBL_ENTRY _ZTV8S21030C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C3[];
extern Class_Descriptor cd_S21030C8;
extern VTBL_ENTRY _ZTI8S21030C8[];
extern  VTBL_ENTRY _ZTV8S21030C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C8[];
extern Class_Descriptor cd_S21030C7;
extern VTBL_ENTRY _ZTI8S21030C7[];
extern  VTBL_ENTRY _ZTV8S21030C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C7[];
extern Class_Descriptor cd_S5166C23;
extern VTBL_ENTRY _ZTI8S5166C23[];
static Base_Class bases_S21030C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21030C3,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21030C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21030C6,    ABISELECT(32,16), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21030C2,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S5166C37,    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
    11, //immediately_derived
  0, 0},
  {&cd_S5166C27,    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
    11, //immediately_derived
  0, 0},
  {&cd_S5166C27,    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
    10, //immediately_derived
  0, 0},
  {&cd_S21030C3,    ABISELECT(56,28), //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
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S21030C8,    ABISELECT(56,28), //bcp->offset
    34, //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
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S21030C7,    ABISELECT(48,24), //bcp->offset
    26, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5166C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S21030C1[];
extern void ABISELECT(_ZTv0_n48_N8S21030C1D1Ev,_ZTv0_n24_N8S21030C1D1Ev)();
extern void _ZN8S21030C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21030C1D0Ev,_ZTv0_n24_N8S21030C1D0Ev)();
extern void _ZN8S21030C1D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21030C1D1Ev,_ZTv0_n20_N8S21030C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S21030C1D1Ev,_ZThn8_N8S21030C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21030C1D0Ev,_ZTv0_n20_N8S21030C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S21030C1D0Ev,_ZThn8_N8S21030C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21030C1D1Ev,_ZTv0_n24_N8S21030C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S21030C1D1Ev,_ZThn16_N8S21030C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21030C1D0Ev,_ZTv0_n24_N8S21030C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S21030C1D0Ev,_ZThn16_N8S21030C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21030C1D1Ev,_ZTv0_n24_N8S21030C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S21030C1D1Ev,_ZThn24_N8S21030C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21030C1D0Ev,_ZTv0_n24_N8S21030C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S21030C1D0Ev,_ZThn24_N8S21030C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n48_N8S21030C1D1Ev,_ZTvn4_n24_N8S21030C1D1Ev)();
extern void ABISELECT(_ZTvn8_n48_N8S21030C1D0Ev,_ZTvn4_n24_N8S21030C1D0Ev)();
static  VTBL_ENTRY vtc_S21030C1[] = {
  ABISELECT(48,24),
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21030C1D1Ev,_ZTv0_n24_N8S21030C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21030C1D0Ev,_ZTv0_n24_N8S21030C1D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21030C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21030C1D1Ev,_ZTv0_n20_N8S21030C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21030C1D0Ev,_ZTv0_n20_N8S21030C1D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21030C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21030C1D1Ev,_ZTv0_n24_N8S21030C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21030C1D0Ev,_ZTv0_n24_N8S21030C1D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S21030C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21030C1D1Ev,_ZTv0_n24_N8S21030C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21030C1D0Ev,_ZTv0_n24_N8S21030C1D0Ev),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S21030C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n48_N8S21030C1D1Ev,_ZTvn4_n24_N8S21030C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n48_N8S21030C1D0Ev,_ZTvn4_n24_N8S21030C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S21030C1[];
extern void _ZN8S21030C2D1Ev();
extern void _ZN8S21030C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21030C2__8S21030C1[] = {
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C2[0]),
  (VTBL_ENTRY)&_ZN8S21030C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C2D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21030C2D1Ev,_ZTv0_n20_N8S21030C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S21030C2D1Ev,_ZThn8_N8S21030C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21030C2D0Ev,_ZTv0_n20_N8S21030C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S21030C2D0Ev,_ZThn8_N8S21030C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21030C3__8S21030C2__8S21030C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21030C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21030C2D1Ev,_ZTv0_n20_N8S21030C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21030C2D0Ev,_ZTv0_n20_N8S21030C2D0Ev),
};
extern void _ZN8S21030C3D1Ev();
extern void _ZN8S21030C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21030C3__8S21030C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C3[0]),
  (VTBL_ENTRY)&_ZN8S21030C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C3D0Ev,
};
extern void _ZN8S21030C6D1Ev();
extern void _ZN8S21030C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21030C6__8S21030C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C6[0]),
  (VTBL_ENTRY)&_ZN8S21030C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C6D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21030C6D1Ev,_ZTv0_n20_N8S21030C6D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21030C6D0Ev,_ZTv0_n20_N8S21030C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21030C3__8S21030C6__8S21030C1[] = {
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21030C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21030C6D1Ev,_ZTv0_n20_N8S21030C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21030C6D0Ev,_ZTv0_n20_N8S21030C6D0Ev),
};
extern void _ZN8S21030C7D1Ev();
extern void _ZN8S21030C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21030C7__8S21030C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C7[0]),
  (VTBL_ENTRY)&_ZN8S21030C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C7D0Ev,
};
extern void _ZN8S21030C2D1Ev();
extern void _ZN8S21030C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21030C28S21030C7__A1__8S21030C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C2[0]),
  (VTBL_ENTRY)&_ZN8S21030C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C2D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21030C2D1Ev,_ZTv0_n20_N8S21030C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21030C2D0Ev,_ZTv0_n20_N8S21030C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21030C3__8S21030C28S21030C7__A1__8S21030C1[] = {
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S21030C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21030C2D1Ev,_ZTv0_n20_N8S21030C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21030C2D0Ev,_ZTv0_n20_N8S21030C2D0Ev),
};
extern void _ZN8S21030C8D1Ev();
extern void _ZN8S21030C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21030C88S21030C7__8S21030C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C8[0]),
  (VTBL_ENTRY)&_ZN8S21030C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C8D0Ev,
};
extern void _ZN8S21030C3D1Ev();
extern void _ZN8S21030C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21030C38S21030C88S21030C7__A1__8S21030C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S21030C3[0]),
  (VTBL_ENTRY)&_ZN8S21030C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21030C3D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21030C7D1Ev,_ZTv0_n20_N8S21030C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21030C7D0Ev,_ZTv0_n20_N8S21030C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21030C3__8S21030C7__8S21030C1[] = {
  ABISELECT(32,16),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S21030C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21030C7D1Ev,_ZTv0_n20_N8S21030C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21030C7D0Ev,_ZTv0_n20_N8S21030C7D0Ev),
};
extern void ABISELECT(_ZThn8_N8S21030C7D1Ev,_ZThn4_N8S21030C7D1Ev)();
extern void ABISELECT(_ZThn8_N8S21030C7D0Ev,_ZThn4_N8S21030C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21030C8__8S21030C7__8S21030C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21030C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S21030C7D1Ev,_ZThn4_N8S21030C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S21030C7D0Ev,_ZThn4_N8S21030C7D0Ev),
};
static  VTT_ENTRY vtt_S21030C1[] = {
  {&(_ZTV8S21030C1[9]),  9,40},
  {&(_ZTV8S21030C1[9]),  9,40},
  {&(_ZTV8S21030C1[16]),  16,40},
  {&(_ZTV8S21030C1[24]),  24,40},
  {&(_ZTV8S21030C1[32]),  32,40},
  {&(_ZTV8S21030C1[38]),  38,40},
  {&(_tg__ZTV8S21030C2__8S21030C1[5]),  5,7},
  {&(_tg__ZTV8S21030C3__8S21030C2__8S21030C1[5]),  5,7},
  {&(_tg__ZTV8S21030C3__8S21030C1[4]),  4,6},
  {&(_tg__ZTV8S21030C6__8S21030C1[5]),  5,7},
  {&(_tg__ZTV8S21030C3__8S21030C6__8S21030C1[5]),  5,7},
  {&(_tg__ZTV8S21030C7__8S21030C1[5]),  5,7},
  {&(_tg__ZTV8S21030C28S21030C7__A1__8S21030C1[5]),  5,7},
  {&(_tg__ZTV8S21030C3__8S21030C28S21030C7__A1__8S21030C1[5]),  5,7},
  {&(_tg__ZTV8S21030C88S21030C7__8S21030C1[4]),  4,6},
  {&(_tg__ZTV8S21030C38S21030C88S21030C7__A1__8S21030C1[4]),  4,6},
  {&(_tg__ZTV8S21030C3__8S21030C7__8S21030C1[5]),  5,7},
  {&(_tg__ZTV8S21030C8__8S21030C7__8S21030C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21030C1[];
extern  VTBL_ENTRY _ZTV8S21030C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21030C1[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21030C2D0Ev,_ZTv0_n20_N8S21030C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21030C2D0Ev,_ZThn8_N8S21030C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21030C2D1Ev,_ZTv0_n20_N8S21030C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21030C2D1Ev,_ZThn8_N8S21030C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21030C1D0Ev,_ZTv0_n20_N8S21030C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21030C1D0Ev,_ZThn8_N8S21030C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21030C1D1Ev,_ZTv0_n20_N8S21030C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21030C1D1Ev,_ZThn8_N8S21030C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21030C1D0Ev,_ZTv0_n24_N8S21030C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21030C1D0Ev,_ZThn24_N8S21030C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21030C1D0Ev,_ZThn16_N8S21030C1D0Ev),
  (VTBL_ENTRY)_ZN8S21030C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21030C1D1Ev,_ZTv0_n24_N8S21030C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S21030C1D1Ev,_ZThn24_N8S21030C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21030C1D1Ev,_ZThn16_N8S21030C1D1Ev),
  (VTBL_ENTRY)_ZN8S21030C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21030C1 = {  "S21030C1", // class name
  bases_S21030C1, 13,
  &(vtc_S21030C1[0]), // expected_vtbl_contents
  &(vtt_S21030C1[0]), // expected_vtt_contents
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI8S21030C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21030C1),40, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21030C1),18, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1159C5_nt  : S5166C37 {
  int s1159c5f0;
};
//SIG(-1 S1159C5_nt) C1{ BC2{ m} Fi}



//skip512 S1159C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
static Base_Class bases_S1159C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S1159C3  : S5166C37 {
  int s1159c3f0;
  ::S1159C5_nt s1159c3f1;
};
//SIG(-1 S1159C3) C1{ BC2{ m} Fi FC3{ BC2 Fi}}



static void Test_S1159C3()
{
  extern Class_Descriptor cd_S1159C3;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S1159C3, buf);
    S1159C3 &lv = *(new (buf) S1159C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S1159C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1159C3)");
    check_base_class_offset(lv, (S5166C37*), 0, "S1159C3");
    check_field_offset(lv, s1159c3f0, 0, "S1159C3.s1159c3f0");
    check_field_offset(lv, s1159c3f1, 4, "S1159C3.s1159c3f1");
    test_class_info(&lv, &cd_S1159C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1159C3(Test_S1159C3, "S1159C3", 8);

#else // __cplusplus

extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
static Base_Class bases_S1159C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1159C3 = {  "S1159C3", // class name
  bases_S1159C3, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1159C2  : S1159C3 {
  ::S2172C17 s1159c2f0;
  ::S2172C9_nt s1159c2f1;
  ::S5166C24 s1159c2f2;
};
//SIG(-1 S1159C2) C1{ BC2{ BC3{ m} Fi FC4{ BC3 Fi}} FC5{ m Fp} FC6{ m Fp} FC7{ BC8{ m Fp Fi FC9{ m} FC10{ m}}}}



static void Test_S1159C2()
{
  extern Class_Descriptor cd_S1159C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S1159C2, buf);
    S1159C2 &lv = *(new (buf) S1159C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S1159C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1159C2)");
    check_base_class_offset(lv, (S5166C37*)(S1159C3*), 0, "S1159C2");
    check_base_class_offset(lv, (S1159C3*), 0, "S1159C2");
    check_field_offset(lv, s1159c2f0, 8, "S1159C2.s1159c2f0");
    check_field_offset(lv, s1159c2f1, ABISELECT(16,12), "S1159C2.s1159c2f1");
    check_field_offset(lv, s1159c2f2, ABISELECT(24,16), "S1159C2.s1159c2f2");
    test_class_info(&lv, &cd_S1159C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1159C2(Test_S1159C2, "S1159C2", ABISELECT(40,28));

#else // __cplusplus

extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S1159C3;
static Base_Class bases_S1159C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1159C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1159C2 = {  "S1159C2", // class name
  bases_S1159C2, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,28), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1159C1  : S1159C2 {
  ::S2170C17 s1159c1f0;
  int s1159c1f1;
};
//SIG(1 S1159C1) C1{ BC2{ BC3{ BC4{ m} Fi FC5{ BC4 Fi}} FC6{ m Fp} FC7{ m Fp} FC8{ BC9{ m Fp Fi FC10{ m} FC11{ m}}}} FC12{ m Fp} Fi}



static void Test_S1159C1()
{
  extern Class_Descriptor cd_S1159C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S1159C1, buf);
    S1159C1 &lv = *(new (buf) S1159C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S1159C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1159C1)");
    check_base_class_offset(lv, (S5166C37*)(S1159C3*)(S1159C2*), 0, "S1159C1");
    check_base_class_offset(lv, (S1159C3*)(S1159C2*), 0, "S1159C1");
    check_base_class_offset(lv, (S1159C2*), 0, "S1159C1");
    check_field_offset(lv, s1159c1f0, ABISELECT(40,28), "S1159C1.s1159c1f0");
    check_field_offset(lv, s1159c1f1, ABISELECT(48,32), "S1159C1.s1159c1f1");
    test_class_info(&lv, &cd_S1159C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1159C1(Test_S1159C1, "S1159C1", ABISELECT(56,36));

#else // __cplusplus

extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S1159C3;
extern Class_Descriptor cd_S1159C2;
static Base_Class bases_S1159C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1159C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1159C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1159C1 = {  "S1159C1", // class name
  bases_S1159C1, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(56,36), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4369C3  {
  ::S8053C10_nt s4369c3f0;
  int s4369c3f1[2];
  char s4369c3f2;
  virtual  ~S4369C3(); // _ZN7S4369C3D1Ev
  virtual void  v2(); // _ZN7S4369C32v2Ev
  virtual void  v3(); // _ZN7S4369C32v3Ev
  virtual void  v4(); // _ZN7S4369C32v4Ev
  S4369C3(); // tgen
};
//SIG(-1 S4369C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4369C3 ::~S4369C3(){ note_dtor("S4369C3", this);}
void  S4369C3 ::v2(){vfunc_called(this, "_ZN7S4369C32v2Ev");}
void  S4369C3 ::v3(){vfunc_called(this, "_ZN7S4369C32v3Ev");}
void  S4369C3 ::v4(){vfunc_called(this, "_ZN7S4369C32v4Ev");}
S4369C3 ::S4369C3(){ note_ctor("S4369C3", this);} // tgen

static void Test_S4369C3()
{
  extern Class_Descriptor cd_S4369C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4369C3, buf);
    S4369C3 *dp, &lv = *(dp=new (buf) S4369C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4369C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4369C3)");
    check_field_offset(lv, s4369c3f0, ABISELECT(8,4), "S4369C3.s4369c3f0");
    check_field_offset(lv, s4369c3f1, ABISELECT(24,16), "S4369C3.s4369c3f1");
    check_field_offset(lv, s4369c3f2, ABISELECT(32,24), "S4369C3.s4369c3f2");
    test_class_info(&lv, &cd_S4369C3);
    dp->~S4369C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4369C3(Test_S4369C3, "S4369C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4369C3C1Ev();
extern void _ZN7S4369C3D1Ev();
Name_Map name_map_S4369C3[] = {
  NSPAIR(_ZN7S4369C3C1Ev),
  NSPAIR(_ZN7S4369C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4369C3[];
extern void _ZN7S4369C3D1Ev();
extern void _ZN7S4369C3D0Ev();
extern void _ZN7S4369C32v2Ev();
extern void _ZN7S4369C32v3Ev();
extern void _ZN7S4369C32v4Ev();
static  VTBL_ENTRY vtc_S4369C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4369C3[0]),
  (VTBL_ENTRY)&_ZN7S4369C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4369C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4369C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4369C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4369C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4369C3[];
extern  VTBL_ENTRY _ZTV7S4369C3[];
Class_Descriptor cd_S4369C3 = {  "S4369C3", // class name
  0,0,//no base classes
  &(vtc_S4369C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4369C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4369C3),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  S4369C2  : S4369C3 {
  void *s4369c2f0;
  virtual void  v5(); // _ZN7S4369C22v5Ev
  virtual void  v6(); // _ZN7S4369C22v6Ev
  ~S4369C2(); // tgen
  S4369C2(); // tgen
};
//SIG(-1 S4369C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4369C2 ::v5(){vfunc_called(this, "_ZN7S4369C22v5Ev");}
void  S4369C2 ::v6(){vfunc_called(this, "_ZN7S4369C22v6Ev");}
S4369C2 ::~S4369C2(){ note_dtor("S4369C2", this);} // tgen
S4369C2 ::S4369C2(){ note_ctor("S4369C2", this);} // tgen

static void Test_S4369C2()
{
  extern Class_Descriptor cd_S4369C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4369C2, buf);
    S4369C2 *dp, &lv = *(dp=new (buf) S4369C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4369C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4369C2)");
    check_base_class_offset(lv, (S4369C3*), 0, "S4369C2");
    check_field_offset(lv, s4369c2f0, ABISELECT(40,28), "S4369C2.s4369c2f0");
    test_class_info(&lv, &cd_S4369C2);
    dp->~S4369C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4369C2(Test_S4369C2, "S4369C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4369C2C1Ev();
extern void _ZN7S4369C2D1Ev();
Name_Map name_map_S4369C2[] = {
  NSPAIR(_ZN7S4369C2C1Ev),
  NSPAIR(_ZN7S4369C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4369C3;
extern VTBL_ENTRY _ZTI7S4369C3[];
extern  VTBL_ENTRY _ZTV7S4369C3[];
static Base_Class bases_S4369C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4369C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4369C2[];
extern void _ZN7S4369C2D1Ev();
extern void _ZN7S4369C2D0Ev();
extern void _ZN7S4369C32v2Ev();
extern void _ZN7S4369C32v3Ev();
extern void _ZN7S4369C32v4Ev();
extern void _ZN7S4369C22v5Ev();
extern void _ZN7S4369C22v6Ev();
static  VTBL_ENTRY vtc_S4369C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4369C2[0]),
  (VTBL_ENTRY)&_ZN7S4369C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4369C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4369C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4369C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4369C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4369C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4369C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4369C2[];
extern  VTBL_ENTRY _ZTV7S4369C2[];
Class_Descriptor cd_S4369C2 = {  "S4369C2", // class name
  bases_S4369C2, 1,
  &(vtc_S4369C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4369C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4369C2),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  S4369C6_nt  {
  char s4369c6f0[97];
};
//SIG(-1 S4369C6_nt) C1{ Fc[97]}



//skip512 S4369C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4369C1  : S4369C2 {
  ::S8053C10_nt s4369c1f0;
  ::S4369C6_nt s4369c1f1;
  ::S8053C10_nt s4369c1f2;
  ::S2172C17 s4369c1f3;
  void *s4369c1f4;
  virtual void  v1(); // _ZN7S4369C12v1Ev
  ~S4369C1(); // tgen
  S4369C1(); // tgen
};
//SIG(1 S4369C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC4 FC6{ Fc[97]} FC4 FC7{ m Fp} Fp}


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

static void Test_S4369C1()
{
  extern Class_Descriptor cd_S4369C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,42)];
    init_test(&cd_S4369C1, buf);
    S4369C1 *dp, &lv = *(dp=new (buf) S4369C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,164), "sizeof(S4369C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4369C1)");
    check_base_class_offset(lv, (S4369C3*)(S4369C2*), 0, "S4369C1");
    check_base_class_offset(lv, (S4369C2*), 0, "S4369C1");
    check_field_offset(lv, s4369c1f0, ABISELECT(48,32), "S4369C1.s4369c1f0");
    check_field_offset(lv, s4369c1f1, ABISELECT(64,44), "S4369C1.s4369c1f1");
    check_field_offset(lv, s4369c1f2, ABISELECT(168,144), "S4369C1.s4369c1f2");
    check_field_offset(lv, s4369c1f3, ABISELECT(184,156), "S4369C1.s4369c1f3");
    check_field_offset(lv, s4369c1f4, ABISELECT(192,160), "S4369C1.s4369c1f4");
    test_class_info(&lv, &cd_S4369C1);
    dp->~S4369C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4369C1(Test_S4369C1, "S4369C1", ABISELECT(200,164));

#else // __cplusplus

extern void _ZN7S4369C1C1Ev();
extern void _ZN7S4369C1D1Ev();
Name_Map name_map_S4369C1[] = {
  NSPAIR(_ZN7S4369C1C1Ev),
  NSPAIR(_ZN7S4369C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4369C3;
extern VTBL_ENTRY _ZTI7S4369C3[];
extern  VTBL_ENTRY _ZTV7S4369C3[];
extern Class_Descriptor cd_S4369C2;
extern VTBL_ENTRY _ZTI7S4369C2[];
extern  VTBL_ENTRY _ZTV7S4369C2[];
static Base_Class bases_S4369C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4369C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4369C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4369C1[];
extern void _ZN7S4369C1D1Ev();
extern void _ZN7S4369C1D0Ev();
extern void _ZN7S4369C32v2Ev();
extern void _ZN7S4369C32v3Ev();
extern void _ZN7S4369C32v4Ev();
extern void _ZN7S4369C22v5Ev();
extern void _ZN7S4369C22v6Ev();
extern void _ZN7S4369C12v1Ev();
static  VTBL_ENTRY vtc_S4369C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4369C1[0]),
  (VTBL_ENTRY)&_ZN7S4369C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4369C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4369C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4369C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4369C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4369C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4369C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4369C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4369C1[];
extern  VTBL_ENTRY _ZTV7S4369C1[];
Class_Descriptor cd_S4369C1 = {  "S4369C1", // class name
  bases_S4369C1, 2,
  &(vtc_S4369C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,164), // object size
  NSPAIRA(_ZTI7S4369C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4369C1),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  S1160C3  : S5166C37 {
  int s1160c3f0;
  ::S1159C5_nt s1160c3f1;
};
//SIG(-1 S1160C3) C1{ BC2{ m} Fi FC3{ BC2 Fi}}



static void Test_S1160C3()
{
  extern Class_Descriptor cd_S1160C3;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S1160C3, buf);
    S1160C3 &lv = *(new (buf) S1160C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S1160C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1160C3)");
    check_base_class_offset(lv, (S5166C37*), 0, "S1160C3");
    check_field_offset(lv, s1160c3f0, 0, "S1160C3.s1160c3f0");
    check_field_offset(lv, s1160c3f1, 4, "S1160C3.s1160c3f1");
    test_class_info(&lv, &cd_S1160C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1160C3(Test_S1160C3, "S1160C3", 8);

#else // __cplusplus

extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
static Base_Class bases_S1160C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1160C3 = {  "S1160C3", // class name
  bases_S1160C3, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1160C2  : S1160C3 {
  ::S2172C17 s1160c2f0;
  ::S2172C9_nt s1160c2f1;
  ::S5166C24 s1160c2f2;
};
//SIG(-1 S1160C2) C1{ BC2{ BC3{ m} Fi FC4{ BC3 Fi}} FC5{ m Fp} FC6{ m Fp} FC7{ BC8{ m Fp Fi FC9{ m} FC10{ m}}}}



static void Test_S1160C2()
{
  extern Class_Descriptor cd_S1160C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S1160C2, buf);
    S1160C2 &lv = *(new (buf) S1160C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S1160C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1160C2)");
    check_base_class_offset(lv, (S5166C37*)(S1160C3*), 0, "S1160C2");
    check_base_class_offset(lv, (S1160C3*), 0, "S1160C2");
    check_field_offset(lv, s1160c2f0, 8, "S1160C2.s1160c2f0");
    check_field_offset(lv, s1160c2f1, ABISELECT(16,12), "S1160C2.s1160c2f1");
    check_field_offset(lv, s1160c2f2, ABISELECT(24,16), "S1160C2.s1160c2f2");
    test_class_info(&lv, &cd_S1160C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1160C2(Test_S1160C2, "S1160C2", ABISELECT(40,28));

#else // __cplusplus

extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S1160C3;
static Base_Class bases_S1160C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1160C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1160C2 = {  "S1160C2", // class name
  bases_S1160C2, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,28), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1160C1  : S1160C2 {
  ::S2170C17 s1160c1f0;
};
//SIG(1 S1160C1) C1{ BC2{ BC3{ BC4{ m} Fi FC5{ BC4 Fi}} FC6{ m Fp} FC7{ m Fp} FC8{ BC9{ m Fp Fi FC10{ m} FC11{ m}}}} FC12{ m Fp}}



static void Test_S1160C1()
{
  extern Class_Descriptor cd_S1160C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S1160C1, buf);
    S1160C1 &lv = *(new (buf) S1160C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S1160C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1160C1)");
    check_base_class_offset(lv, (S5166C37*)(S1160C3*)(S1160C2*), 0, "S1160C1");
    check_base_class_offset(lv, (S1160C3*)(S1160C2*), 0, "S1160C1");
    check_base_class_offset(lv, (S1160C2*), 0, "S1160C1");
    check_field_offset(lv, s1160c1f0, ABISELECT(40,28), "S1160C1.s1160c1f0");
    test_class_info(&lv, &cd_S1160C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1160C1(Test_S1160C1, "S1160C1", ABISELECT(48,32));

#else // __cplusplus

extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S1160C3;
extern Class_Descriptor cd_S1160C2;
static Base_Class bases_S1160C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1160C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1160C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S1160C1 = {  "S1160C1", // class name
  bases_S1160C1, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(48,32), // 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  S6895C2  {
  void *s6895c2f0;
  short s6895c2f1;
  __tsi64 s6895c2f2;
  virtual void  v5(); // _ZN7S6895C22v5Ev
  virtual void  v6(); // _ZN7S6895C22v6Ev
  virtual void  v7(); // _ZN7S6895C22v7Ev
  virtual void  v8(); // _ZN7S6895C22v8Ev
  ~S6895C2(); // tgen
  S6895C2(); // tgen
};
//SIG(-1 S6895C2) C1{ v1 v2 v3 v4 Fp Fs FL}


void  S6895C2 ::v5(){vfunc_called(this, "_ZN7S6895C22v5Ev");}
void  S6895C2 ::v6(){vfunc_called(this, "_ZN7S6895C22v6Ev");}
void  S6895C2 ::v7(){vfunc_called(this, "_ZN7S6895C22v7Ev");}
void  S6895C2 ::v8(){vfunc_called(this, "_ZN7S6895C22v8Ev");}
S6895C2 ::~S6895C2(){ note_dtor("S6895C2", this);} // tgen
S6895C2 ::S6895C2(){ note_ctor("S6895C2", this);} // tgen

static void Test_S6895C2()
{
  extern Class_Descriptor cd_S6895C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S6895C2, buf);
    S6895C2 *dp, &lv = *(dp=new (buf) S6895C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S6895C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6895C2)");
    check_field_offset(lv, s6895c2f0, ABISELECT(8,4), "S6895C2.s6895c2f0");
    check_field_offset(lv, s6895c2f1, ABISELECT(16,8), "S6895C2.s6895c2f1");
    check_field_offset(lv, s6895c2f2, ABISELECT(24,12), "S6895C2.s6895c2f2");
    test_class_info(&lv, &cd_S6895C2);
    dp->~S6895C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6895C2(Test_S6895C2, "S6895C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S6895C2C1Ev();
extern void _ZN7S6895C2D1Ev();
Name_Map name_map_S6895C2[] = {
  NSPAIR(_ZN7S6895C2C1Ev),
  NSPAIR(_ZN7S6895C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6895C2[];
extern void _ZN7S6895C22v5Ev();
extern void _ZN7S6895C22v6Ev();
extern void _ZN7S6895C22v7Ev();
extern void _ZN7S6895C22v8Ev();
static  VTBL_ENTRY vtc_S6895C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6895C2[0]),
  (VTBL_ENTRY)&_ZN7S6895C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6895C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6895C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6895C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S6895C2[];
extern  VTBL_ENTRY _ZTV7S6895C2[];
Class_Descriptor cd_S6895C2 = {  "S6895C2", // class name
  0,0,//no base classes
  &(vtc_S6895C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S6895C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6895C2),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  S6895C4  {
  long s6895c4f0;
  char s6895c4f1[3];
  void  mf6895c4(); // _ZN7S6895C48mf6895c4Ev
};
//SIG(1 S6895C4) U1{ m Fl Fc[3]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S6895C3  {
  int s6895c3f0;
  ::S6895C4 s6895c3f1[2];
  virtual  ~S6895C3(); // _ZN7S6895C3D1Ev
  virtual void  v9(); // _ZN7S6895C32v9Ev
  virtual void  v10(); // _ZN7S6895C33v10Ev
  virtual void  v11(); // _ZN7S6895C33v11Ev
  virtual void  v12(); // _ZN7S6895C33v12Ev
  virtual void  v13(); // _ZN7S6895C33v13Ev
  S6895C3(); // tgen
};
//SIG(-1 S6895C3) C1{ vd v1 v2 v3 v4 v5 Fi FU2{ m Fl Fc[3]}[2]}


 S6895C3 ::~S6895C3(){ note_dtor("S6895C3", this);}
void  S6895C3 ::v9(){vfunc_called(this, "_ZN7S6895C32v9Ev");}
void  S6895C3 ::v10(){vfunc_called(this, "_ZN7S6895C33v10Ev");}
void  S6895C3 ::v11(){vfunc_called(this, "_ZN7S6895C33v11Ev");}
void  S6895C3 ::v12(){vfunc_called(this, "_ZN7S6895C33v12Ev");}
void  S6895C3 ::v13(){vfunc_called(this, "_ZN7S6895C33v13Ev");}
S6895C3 ::S6895C3(){ note_ctor("S6895C3", this);} // tgen

static void Test_S6895C3()
{
  extern Class_Descriptor cd_S6895C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S6895C3, buf);
    S6895C3 *dp, &lv = *(dp=new (buf) S6895C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S6895C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6895C3)");
    check_field_offset(lv, s6895c3f0, ABISELECT(8,4), "S6895C3.s6895c3f0");
    check_field_offset(lv, s6895c3f1, ABISELECT(16,8), "S6895C3.s6895c3f1");
    test_class_info(&lv, &cd_S6895C3);
    dp->~S6895C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6895C3(Test_S6895C3, "S6895C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S6895C3C1Ev();
extern void _ZN7S6895C3D1Ev();
Name_Map name_map_S6895C3[] = {
  NSPAIR(_ZN7S6895C3C1Ev),
  NSPAIR(_ZN7S6895C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6895C3[];
extern void _ZN7S6895C3D1Ev();
extern void _ZN7S6895C3D0Ev();
extern void _ZN7S6895C32v9Ev();
extern void _ZN7S6895C33v10Ev();
extern void _ZN7S6895C33v11Ev();
extern void _ZN7S6895C33v12Ev();
extern void _ZN7S6895C33v13Ev();
static  VTBL_ENTRY vtc_S6895C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6895C3[0]),
  (VTBL_ENTRY)&_ZN7S6895C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6895C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6895C32v9Ev,
  (VTBL_ENTRY)&_ZN7S6895C33v10Ev,
  (VTBL_ENTRY)&_ZN7S6895C33v11Ev,
  (VTBL_ENTRY)&_ZN7S6895C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6895C33v13Ev,
};
extern VTBL_ENTRY _ZTI7S6895C3[];
extern  VTBL_ENTRY _ZTV7S6895C3[];
Class_Descriptor cd_S6895C3 = {  "S6895C3", // class name
  0,0,//no base classes
  &(vtc_S6895C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S6895C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6895C3),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  S6895C1  : S6895C2 , S6895C3 {
  virtual  ~S6895C1(); // _ZN7S6895C1D1Ev
  virtual void  v1(); // _ZN7S6895C12v1Ev
  virtual void  v2(); // _ZN7S6895C12v2Ev
  virtual void  v3(); // _ZN7S6895C12v3Ev
  virtual void  v4(); // _ZN7S6895C12v4Ev
  S6895C1(); // tgen
};
//SIG(1 S6895C1) C1{ BC2{ v5 v6 v7 v8 Fp Fs FL} BC3{ vd v9 v10 v11 v12 v13 Fi FU4{ m Fl Fc[3]}[2]} vd v1 v2 v3 v4}


 S6895C1 ::~S6895C1(){ note_dtor("S6895C1", this);}
void  S6895C1 ::v1(){vfunc_called(this, "_ZN7S6895C12v1Ev");}
void  S6895C1 ::v2(){vfunc_called(this, "_ZN7S6895C12v2Ev");}
void  S6895C1 ::v3(){vfunc_called(this, "_ZN7S6895C12v3Ev");}
void  S6895C1 ::v4(){vfunc_called(this, "_ZN7S6895C12v4Ev");}
S6895C1 ::S6895C1(){ note_ctor("S6895C1", this);} // tgen

static void Test_S6895C1()
{
  extern Class_Descriptor cd_S6895C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S6895C1, buf);
    S6895C1 *dp, &lv = *(dp=new (buf) S6895C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S6895C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6895C1)");
    check_base_class_offset(lv, (S6895C2*), 0, "S6895C1");
    check_base_class_offset(lv, (S6895C3*), ABISELECT(32,20), "S6895C1");
    test_class_info(&lv, &cd_S6895C1);
    dp->~S6895C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6895C1(Test_S6895C1, "S6895C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S6895C1C1Ev();
extern void _ZN7S6895C1D1Ev();
Name_Map name_map_S6895C1[] = {
  NSPAIR(_ZN7S6895C1C1Ev),
  NSPAIR(_ZN7S6895C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6895C2;
extern VTBL_ENTRY _ZTI7S6895C2[];
extern  VTBL_ENTRY _ZTV7S6895C2[];
extern Class_Descriptor cd_S6895C3;
extern VTBL_ENTRY _ZTI7S6895C3[];
extern  VTBL_ENTRY _ZTV7S6895C3[];
static Base_Class bases_S6895C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6895C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S6895C3,    ABISELECT(32,20), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6895C1[];
extern void _ZN7S6895C22v5Ev();
extern void _ZN7S6895C22v6Ev();
extern void _ZN7S6895C22v7Ev();
extern void _ZN7S6895C22v8Ev();
extern void _ZN7S6895C1D1Ev();
extern void _ZN7S6895C1D0Ev();
extern void _ZN7S6895C12v1Ev();
extern void _ZN7S6895C12v2Ev();
extern void _ZN7S6895C12v3Ev();
extern void _ZN7S6895C12v4Ev();
extern void ABISELECT(_ZThn32_N7S6895C1D1Ev,_ZThn20_N7S6895C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S6895C1D0Ev,_ZThn20_N7S6895C1D0Ev)();
extern void _ZN7S6895C32v9Ev();
extern void _ZN7S6895C33v10Ev();
extern void _ZN7S6895C33v11Ev();
extern void _ZN7S6895C33v12Ev();
extern void _ZN7S6895C33v13Ev();
static  VTBL_ENTRY vtc_S6895C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6895C1[0]),
  (VTBL_ENTRY)&_ZN7S6895C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6895C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6895C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6895C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6895C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6895C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6895C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6895C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6895C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6895C12v4Ev,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S6895C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S6895C1D1Ev,_ZThn20_N7S6895C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S6895C1D0Ev,_ZThn20_N7S6895C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6895C32v9Ev,
  (VTBL_ENTRY)&_ZN7S6895C33v10Ev,
  (VTBL_ENTRY)&_ZN7S6895C33v11Ev,
  (VTBL_ENTRY)&_ZN7S6895C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6895C33v13Ev,
};
extern VTBL_ENTRY _ZTI7S6895C1[];
extern  VTBL_ENTRY _ZTV7S6895C1[];
Class_Descriptor cd_S6895C1 = {  "S6895C1", // class name
  bases_S6895C1, 2,
  &(vtc_S6895C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S6895C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6895C1),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1815C3  : S16496C4_nt {
  virtual void  v5(); // _ZN7S1815C32v5Ev
  virtual void  v6(); // _ZN7S1815C32v6Ev
  virtual void  v7(); // _ZN7S1815C32v7Ev
  virtual void  v8(); // _ZN7S1815C32v8Ev
  virtual void  v9(); // _ZN7S1815C32v9Ev
  virtual void  v10(); // _ZN7S1815C33v10Ev
  virtual void  v11(); // _ZN7S1815C33v11Ev
  virtual void  v12(); // _ZN7S1815C33v12Ev
  virtual void  v13(); // _ZN7S1815C33v13Ev
  virtual void  v14(); // _ZN7S1815C33v14Ev
  virtual void  v15(); // _ZN7S1815C33v15Ev
  virtual void  v16(); // _ZN7S1815C33v16Ev
  virtual void  v17(); // _ZN7S1815C33v17Ev
  ~S1815C3(); // tgen
  S1815C3(); // tgen
};
//SIG(-1 S1815C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13}


void  S1815C3 ::v5(){vfunc_called(this, "_ZN7S1815C32v5Ev");}
void  S1815C3 ::v6(){vfunc_called(this, "_ZN7S1815C32v6Ev");}
void  S1815C3 ::v7(){vfunc_called(this, "_ZN7S1815C32v7Ev");}
void  S1815C3 ::v8(){vfunc_called(this, "_ZN7S1815C32v8Ev");}
void  S1815C3 ::v9(){vfunc_called(this, "_ZN7S1815C32v9Ev");}
void  S1815C3 ::v10(){vfunc_called(this, "_ZN7S1815C33v10Ev");}
void  S1815C3 ::v11(){vfunc_called(this, "_ZN7S1815C33v11Ev");}
void  S1815C3 ::v12(){vfunc_called(this, "_ZN7S1815C33v12Ev");}
void  S1815C3 ::v13(){vfunc_called(this, "_ZN7S1815C33v13Ev");}
void  S1815C3 ::v14(){vfunc_called(this, "_ZN7S1815C33v14Ev");}
void  S1815C3 ::v15(){vfunc_called(this, "_ZN7S1815C33v15Ev");}
void  S1815C3 ::v16(){vfunc_called(this, "_ZN7S1815C33v16Ev");}
void  S1815C3 ::v17(){vfunc_called(this, "_ZN7S1815C33v17Ev");}
S1815C3 ::~S1815C3(){ note_dtor("S1815C3", this);} // tgen
S1815C3 ::S1815C3(){ note_ctor("S1815C3", this);} // tgen

static void Test_S1815C3()
{
  extern Class_Descriptor cd_S1815C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1815C3, buf);
    S1815C3 *dp, &lv = *(dp=new (buf) S1815C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1815C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1815C3)");
    check_base_class_offset(lv, (S16496C4_nt*), 0, "S1815C3");
    test_class_info(&lv, &cd_S1815C3);
    dp->~S1815C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1815C3(Test_S1815C3, "S1815C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1815C3C1Ev();
extern void _ZN7S1815C3D1Ev();
Name_Map name_map_S1815C3[] = {
  NSPAIR(_ZN7S1815C3C1Ev),
  NSPAIR(_ZN7S1815C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
static Base_Class bases_S1815C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1815C3[];
extern void _ZN7S1815C3D1Ev();
extern void _ZN7S1815C3D0Ev();
extern void _ZN7S1815C32v5Ev();
extern void _ZN7S1815C32v6Ev();
extern void _ZN7S1815C32v7Ev();
extern void _ZN7S1815C32v8Ev();
extern void _ZN7S1815C32v9Ev();
extern void _ZN7S1815C33v10Ev();
extern void _ZN7S1815C33v11Ev();
extern void _ZN7S1815C33v12Ev();
extern void _ZN7S1815C33v13Ev();
extern void _ZN7S1815C33v14Ev();
extern void _ZN7S1815C33v15Ev();
extern void _ZN7S1815C33v16Ev();
extern void _ZN7S1815C33v17Ev();
static  VTBL_ENTRY vtc_S1815C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1815C3[0]),
  (VTBL_ENTRY)&_ZN7S1815C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1815C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1815C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1815C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1815C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1815C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1815C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v17Ev,
};
extern VTBL_ENTRY _ZTI7S1815C3[];
extern  VTBL_ENTRY _ZTV7S1815C3[];
Class_Descriptor cd_S1815C3 = {  "S1815C3", // class name
  bases_S1815C3, 1,
  &(vtc_S1815C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1815C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1815C3),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1815C2  : S1815C3 {
  virtual void  v18(); // _ZN7S1815C23v18Ev
  ~S1815C2(); // tgen
  S1815C2(); // tgen
};
//SIG(-1 S1815C2) C1{ BC2{ BC3{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14} v1}


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

static void Test_S1815C2()
{
  extern Class_Descriptor cd_S1815C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1815C2, buf);
    S1815C2 *dp, &lv = *(dp=new (buf) S1815C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1815C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1815C2)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1815C3*), 0, "S1815C2");
    check_base_class_offset(lv, (S1815C3*), 0, "S1815C2");
    test_class_info(&lv, &cd_S1815C2);
    dp->~S1815C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1815C2(Test_S1815C2, "S1815C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1815C2C1Ev();
extern void _ZN7S1815C2D1Ev();
Name_Map name_map_S1815C2[] = {
  NSPAIR(_ZN7S1815C2C1Ev),
  NSPAIR(_ZN7S1815C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1815C3;
extern VTBL_ENTRY _ZTI7S1815C3[];
extern  VTBL_ENTRY _ZTV7S1815C3[];
static Base_Class bases_S1815C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1815C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1815C2[];
extern void _ZN7S1815C2D1Ev();
extern void _ZN7S1815C2D0Ev();
extern void _ZN7S1815C32v5Ev();
extern void _ZN7S1815C32v6Ev();
extern void _ZN7S1815C32v7Ev();
extern void _ZN7S1815C32v8Ev();
extern void _ZN7S1815C32v9Ev();
extern void _ZN7S1815C33v10Ev();
extern void _ZN7S1815C33v11Ev();
extern void _ZN7S1815C33v12Ev();
extern void _ZN7S1815C33v13Ev();
extern void _ZN7S1815C33v14Ev();
extern void _ZN7S1815C33v15Ev();
extern void _ZN7S1815C33v16Ev();
extern void _ZN7S1815C33v17Ev();
extern void _ZN7S1815C23v18Ev();
static  VTBL_ENTRY vtc_S1815C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1815C2[0]),
  (VTBL_ENTRY)&_ZN7S1815C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1815C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1815C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1815C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1815C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1815C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1815C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1815C23v18Ev,
};
extern VTBL_ENTRY _ZTI7S1815C2[];
extern  VTBL_ENTRY _ZTV7S1815C2[];
Class_Descriptor cd_S1815C2 = {  "S1815C2", // class name
  bases_S1815C2, 2,
  &(vtc_S1815C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1815C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1815C2),18, //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  S1815C1  : S1815C2 {
  virtual void  v1(); // _ZN7S1815C12v1Ev
  virtual void  v2(); // _ZN7S1815C12v2Ev
  virtual void  v3(); // _ZN7S1815C12v3Ev
  virtual void  v4(); // _ZN7S1815C12v4Ev
  ~S1815C1(); // tgen
  S1815C1(); // tgen
};
//SIG(1 S1815C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17} v18} v1 v2 v3 v4}


void  S1815C1 ::v1(){vfunc_called(this, "_ZN7S1815C12v1Ev");}
void  S1815C1 ::v2(){vfunc_called(this, "_ZN7S1815C12v2Ev");}
void  S1815C1 ::v3(){vfunc_called(this, "_ZN7S1815C12v3Ev");}
void  S1815C1 ::v4(){vfunc_called(this, "_ZN7S1815C12v4Ev");}
S1815C1 ::~S1815C1(){ note_dtor("S1815C1", this);} // tgen
S1815C1 ::S1815C1(){ note_ctor("S1815C1", this);} // tgen

static void Test_S1815C1()
{
  extern Class_Descriptor cd_S1815C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1815C1, buf);
    S1815C1 *dp, &lv = *(dp=new (buf) S1815C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1815C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1815C1)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1815C3*)(S1815C2*), 0, "S1815C1");
    check_base_class_offset(lv, (S1815C3*)(S1815C2*), 0, "S1815C1");
    check_base_class_offset(lv, (S1815C2*), 0, "S1815C1");
    test_class_info(&lv, &cd_S1815C1);
    dp->~S1815C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1815C1(Test_S1815C1, "S1815C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1815C1C1Ev();
extern void _ZN7S1815C1D1Ev();
Name_Map name_map_S1815C1[] = {
  NSPAIR(_ZN7S1815C1C1Ev),
  NSPAIR(_ZN7S1815C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1815C3;
extern VTBL_ENTRY _ZTI7S1815C3[];
extern  VTBL_ENTRY _ZTV7S1815C3[];
extern Class_Descriptor cd_S1815C2;
extern VTBL_ENTRY _ZTI7S1815C2[];
extern  VTBL_ENTRY _ZTV7S1815C2[];
static Base_Class bases_S1815C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1815C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1815C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1815C1[];
extern void _ZN7S1815C1D1Ev();
extern void _ZN7S1815C1D0Ev();
extern void _ZN7S1815C32v5Ev();
extern void _ZN7S1815C32v6Ev();
extern void _ZN7S1815C32v7Ev();
extern void _ZN7S1815C32v8Ev();
extern void _ZN7S1815C32v9Ev();
extern void _ZN7S1815C33v10Ev();
extern void _ZN7S1815C33v11Ev();
extern void _ZN7S1815C33v12Ev();
extern void _ZN7S1815C33v13Ev();
extern void _ZN7S1815C33v14Ev();
extern void _ZN7S1815C33v15Ev();
extern void _ZN7S1815C33v16Ev();
extern void _ZN7S1815C33v17Ev();
extern void _ZN7S1815C23v18Ev();
extern void _ZN7S1815C12v1Ev();
extern void _ZN7S1815C12v2Ev();
extern void _ZN7S1815C12v3Ev();
extern void _ZN7S1815C12v4Ev();
static  VTBL_ENTRY vtc_S1815C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1815C1[0]),
  (VTBL_ENTRY)&_ZN7S1815C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1815C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1815C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1815C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1815C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1815C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1815C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1815C33v17Ev,
  (VTBL_ENTRY)&_ZN7S1815C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1815C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1815C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1815C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1815C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1815C1[];
extern  VTBL_ENTRY _ZTV7S1815C1[];
Class_Descriptor cd_S1815C1 = {  "S1815C1", // class name
  bases_S1815C1, 3,
  &(vtc_S1815C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1815C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1815C1),22, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17944C5_nt  {
  void *s17944c5f0;
  int s17944c5f1;
  void  mf17944c5(); // _ZN11S17944C5_nt9mf17944c5Ev
};
//SIG(-1 S17944C5_nt) C1{ m Fp Fi}


void  S17944C5_nt ::mf17944c5(){}

//skip512 S17944C5_nt

#else // __cplusplus

Class_Descriptor cd_S17944C5_nt = {  "S17944C5_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  S17944C4_nt  : S17944C5_nt {
};
//SIG(-1 S17944C4_nt) C1{ BC2{ m Fp Fi}}



//skip512 S17944C4_nt

#else // __cplusplus

extern Class_Descriptor cd_S17944C5_nt;
static Base_Class bases_S17944C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17944C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S17944C3_nt  {
  int s17944c3f0;
  ::S17944C4_nt s17944c3f1;
  void  mf17944c3(); // _ZN11S17944C3_nt9mf17944c3Ev
};
//SIG(-1 S17944C3_nt) C1{ m Fi FC2{ BC3{ m Fp Fi}}}


void  S17944C3_nt ::mf17944c3(){}

//skip512 S17944C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17944C2  {
  char s17944c2f0;
  ::S17944C3_nt s17944c2f1;
  ::S17944C3_nt s17944c2f2;
  ::S17944C3_nt s17944c2f3;
  ::S17944C3_nt s17944c2f4;
  void  mf17944c2(); // _ZN8S17944C29mf17944c2Ev
};
//SIG(-1 S17944C2) C1{ m Fc FC2{ m Fi FC3{ BC4{ m Fp Fi}}} FC2 FC2 FC2}


void  S17944C2 ::mf17944c2(){}

static void Test_S17944C2()
{
  {
    init_simple_test("S17944C2");
    S17944C2 lv;
    check2(sizeof(lv), ABISELECT(104,52), "sizeof(S17944C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17944C2)");
    check_field_offset(lv, s17944c2f0, 0, "S17944C2.s17944c2f0");
    check_field_offset(lv, s17944c2f1, ABISELECT(8,4), "S17944C2.s17944c2f1");
    check_field_offset(lv, s17944c2f2, ABISELECT(32,16), "S17944C2.s17944c2f2");
    check_field_offset(lv, s17944c2f3, ABISELECT(56,28), "S17944C2.s17944c2f3");
    check_field_offset(lv, s17944c2f4, ABISELECT(80,40), "S17944C2.s17944c2f4");
  }
}
static Arrange_To_Call_Me vS17944C2(Test_S17944C2, "S17944C2", ABISELECT(104,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17944C1  {
  void *s17944c1f0[2];
  ::S17944C2 s17944c1f1;
  char s17944c1f2[2];
  void  mf17944c1(); // _ZN8S17944C19mf17944c1Ev
};
//SIG(1 S17944C1) C1{ m Fp[2] FC2{ m Fc FC3{ m Fi FC4{ BC5{ m Fp Fi}}} FC3 FC3 FC3} Fc[2]}


void  S17944C1 ::mf17944c1(){}

static void Test_S17944C1()
{
  {
    init_simple_test("S17944C1");
    S17944C1 lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S17944C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17944C1)");
    check_field_offset(lv, s17944c1f0, 0, "S17944C1.s17944c1f0");
    check_field_offset(lv, s17944c1f1, ABISELECT(16,8), "S17944C1.s17944c1f1");
    check_field_offset(lv, s17944c1f2, ABISELECT(120,60), "S17944C1.s17944c1f2");
  }
}
static Arrange_To_Call_Me vS17944C1(Test_S17944C1, "S17944C1", ABISELECT(128,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19624C2  : S19917C5 {
  int s19624c2f0;
  void *s19624c2f1[4];
  long double s19624c2f2[5];
  void *s19624c2f3[2];
  ::S19917C5 s19624c2f4;
  long s19624c2f5[3];
  virtual  ~S19624C2(); // _ZN8S19624C2D1Ev
  virtual void  v1(); // _ZN8S19624C22v1Ev
  virtual void  v2(); // _ZN8S19624C22v2Ev
  S19624C2(); // tgen
};
//SIG(-1 S19624C2) C1{ BC2{ vd m Fp FD Fi Fp} vd v1 v2 Fi Fp[4] FD[5] Fp[2] FC2 Fl[3]}


 S19624C2 ::~S19624C2(){ note_dtor("S19624C2", this);}
void  S19624C2 ::v1(){vfunc_called(this, "_ZN8S19624C22v1Ev");}
void  S19624C2 ::v2(){vfunc_called(this, "_ZN8S19624C22v2Ev");}
S19624C2 ::S19624C2(){ note_ctor("S19624C2", this);} // tgen

static void Test_S19624C2()
{
  extern Class_Descriptor cd_S19624C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,40)];
    init_test(&cd_S19624C2, buf);
    S19624C2 *dp, &lv = *(dp=new (buf) S19624C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,156), "sizeof(S19624C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19624C2)");
    check_base_class_offset(lv, (S19917C5*), 0, "S19624C2");
    check_field_offset(lv, s19624c2f0, ABISELECT(48,28), "S19624C2.s19624c2f0");
    check_field_offset(lv, s19624c2f1, ABISELECT(56,32), "S19624C2.s19624c2f1");
    check_field_offset(lv, s19624c2f2, ABISELECT(96,48), "S19624C2.s19624c2f2");
    check_field_offset(lv, s19624c2f3, ABISELECT(176,108), "S19624C2.s19624c2f3");
    check_field_offset(lv, s19624c2f4, ABISELECT(192,116), "S19624C2.s19624c2f4");
    check_field_offset(lv, s19624c2f5, ABISELECT(240,144), "S19624C2.s19624c2f5");
    test_class_info(&lv, &cd_S19624C2);
    dp->~S19624C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19624C2(Test_S19624C2, "S19624C2", ABISELECT(272,156));

#else // __cplusplus

extern void _ZN8S19624C2C1Ev();
extern void _ZN8S19624C2D1Ev();
Name_Map name_map_S19624C2[] = {
  NSPAIR(_ZN8S19624C2C1Ev),
  NSPAIR(_ZN8S19624C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
static Base_Class bases_S19624C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S19624C2[];
extern void _ZN8S19624C2D1Ev();
extern void _ZN8S19624C2D0Ev();
extern void _ZN8S19624C22v1Ev();
extern void _ZN8S19624C22v2Ev();
static  VTBL_ENTRY vtc_S19624C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19624C2[0]),
  (VTBL_ENTRY)&_ZN8S19624C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19624C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19624C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19624C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S19624C2[];
extern  VTBL_ENTRY _ZTV8S19624C2[];
Class_Descriptor cd_S19624C2 = {  "S19624C2", // class name
  bases_S19624C2, 1,
  &(vtc_S19624C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,156), // object size
  NSPAIRA(_ZTI8S19624C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19624C2),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  S19624C1  : virtual S19624C2 {
  int s19624c1f0;
  void *s19624c1f1;
  __tsi64 s19624c1f2;
  int s19624c1f3;
  __tsi64 s19624c1f4;
  virtual  ~S19624C1(); // _ZN8S19624C1D2Ev
  S19624C1(); // tgen
};
//SIG(1 S19624C1) C1{ VBC2{ BC3{ vd m Fp FD Fi Fp} vd v1 v2 Fi Fp[4] FD[5] Fp[2] FC3 Fl[3]} vd Fi Fp FL Fi FL}


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

static void Test_S19624C1()
{
  extern Class_Descriptor cd_S19624C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,48)];
    init_test(&cd_S19624C1, buf);
    S19624C1 *dp, &lv = *(dp=new (buf) S19624C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,188), "sizeof(S19624C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19624C1)");
    check_base_class_offset(lv, (S19917C5*)(S19624C2*), ABISELECT(48,32), "S19624C1");
    check_base_class_offset(lv, (S19624C2*), ABISELECT(48,32), "S19624C1");
    check_field_offset(lv, s19624c1f0, ABISELECT(8,4), "S19624C1.s19624c1f0");
    check_field_offset(lv, s19624c1f1, ABISELECT(16,8), "S19624C1.s19624c1f1");
    check_field_offset(lv, s19624c1f2, ABISELECT(24,12), "S19624C1.s19624c1f2");
    check_field_offset(lv, s19624c1f3, ABISELECT(32,20), "S19624C1.s19624c1f3");
    check_field_offset(lv, s19624c1f4, ABISELECT(40,24), "S19624C1.s19624c1f4");
    test_class_info(&lv, &cd_S19624C1);
    dp->~S19624C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19624C1(Test_S19624C1, "S19624C1", ABISELECT(320,188));

#else // __cplusplus

extern void _ZN8S19624C1C1Ev();
extern void _ZN8S19624C1D2Ev();
Name_Map name_map_S19624C1[] = {
  NSPAIR(_ZN8S19624C1C1Ev),
  NSPAIR(_ZN8S19624C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19917C5;
extern VTBL_ENTRY _ZTI8S19917C5[];
extern  VTBL_ENTRY _ZTV8S19917C5[];
extern Class_Descriptor cd_S19624C2;
extern VTBL_ENTRY _ZTI8S19624C2[];
extern  VTBL_ENTRY _ZTV8S19624C2[];
static Base_Class bases_S19624C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19917C5,    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
    1, //immediately_derived
  0, 0},
  {&cd_S19624C2,    ABISELECT(48,32), //bcp->offset
    5, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19624C1[];
extern void _ZN8S19624C1D1Ev();
extern void _ZN8S19624C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19624C1D1Ev,_ZTv0_n12_N8S19624C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S19624C1D1Ev,_ZThn32_N8S19624C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19624C1D0Ev,_ZTv0_n12_N8S19624C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S19624C1D0Ev,_ZThn32_N8S19624C1D0Ev)() __attribute__((weak));
extern void _ZN8S19624C22v1Ev();
extern void _ZN8S19624C22v2Ev();
static  VTBL_ENTRY vtc_S19624C1[] = {
  ABISELECT(48,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19624C1[0]),
  (VTBL_ENTRY)&_ZN8S19624C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19624C1D0Ev,
  0,
  0,
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19624C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19624C1D1Ev,_ZTv0_n12_N8S19624C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19624C1D0Ev,_ZTv0_n12_N8S19624C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19624C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19624C22v2Ev,
};
extern VTBL_ENTRY _ZTV8S19624C1[];
static  VTT_ENTRY vtt_S19624C1[] = {
  {&(_ZTV8S19624C1[3]),  3,14},
  {&(_ZTV8S19624C1[10]),  10,14},
};
extern VTBL_ENTRY _ZTI8S19624C1[];
extern  VTBL_ENTRY _ZTV8S19624C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19624C1[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19624C1D0Ev,_ZTv0_n12_N8S19624C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19624C1D0Ev,_ZThn32_N8S19624C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19624C1D1Ev,_ZTv0_n12_N8S19624C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19624C1D1Ev,_ZThn32_N8S19624C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19624C1 = {  "S19624C1", // class name
  bases_S19624C1, 2,
  &(vtc_S19624C1[0]), // expected_vtbl_contents
  &(vtt_S19624C1[0]), // expected_vtt_contents
  ABISELECT(320,188), // object size
  NSPAIRA(_ZTI8S19624C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19624C1),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19624C1),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names53,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8284C7_nt  {
  void *s8284c7f0[2];
};
//SIG(-1 S8284C7_nt) C1{ Fp[2]}



//skip512 S8284C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8284C9  {
  void *s8284c9f0[2];
};
//SIG(-1 S8284C9) C1{ Fp[2]}



static void Test_S8284C9()
{
  {
    init_simple_test("S8284C9");
    S8284C9 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S8284C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8284C9)");
    check_field_offset(lv, s8284c9f0, 0, "S8284C9.s8284c9f0");
  }
}
static Arrange_To_Call_Me vS8284C9(Test_S8284C9, "S8284C9", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8284C1  : S807C5_nt {
  char s8284c1f0;
  ::S4426C6_nt s8284c1f1;
  ::S16304C3 s8284c1f2;
  ::S8284C7_nt s8284c1f3;
  ::S8284C7_nt s8284c1f4;
  ::S8284C9 s8284c1f5;
  void *s8284c1f6;
  virtual  ~S8284C1(); // _ZN7S8284C1D1Ev
  S8284C1(); // tgen
};
//SIG(1 S8284C1) C1{ BC2{ vd m} vd Fc FC3{ m FC4{ FL[4]}} FC5{ m FC6{ Fi[4]}} FC7{ Fp[2]} FC7 FC8{ Fp[2]} Fp}


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

static void Test_S8284C1()
{
  extern Class_Descriptor cd_S8284C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,22)];
    init_test(&cd_S8284C1, buf);
    S8284C1 *dp, &lv = *(dp=new (buf) S8284C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,84), "sizeof(S8284C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8284C1)");
    check_base_class_offset(lv, (S807C5_nt*), 0, "S8284C1");
    check_field_offset(lv, s8284c1f0, ABISELECT(8,4), "S8284C1.s8284c1f0");
    check_field_offset(lv, s8284c1f1, ABISELECT(16,8), "S8284C1.s8284c1f1");
    check_field_offset(lv, s8284c1f2, ABISELECT(48,40), "S8284C1.s8284c1f2");
    check_field_offset(lv, s8284c1f3, ABISELECT(64,56), "S8284C1.s8284c1f3");
    check_field_offset(lv, s8284c1f4, ABISELECT(80,64), "S8284C1.s8284c1f4");
    check_field_offset(lv, s8284c1f5, ABISELECT(96,72), "S8284C1.s8284c1f5");
    check_field_offset(lv, s8284c1f6, ABISELECT(112,80), "S8284C1.s8284c1f6");
    test_class_info(&lv, &cd_S8284C1);
    dp->~S8284C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8284C1(Test_S8284C1, "S8284C1", ABISELECT(120,84));

#else // __cplusplus

extern void _ZN7S8284C1C1Ev();
extern void _ZN7S8284C1D1Ev();
Name_Map name_map_S8284C1[] = {
  NSPAIR(_ZN7S8284C1C1Ev),
  NSPAIR(_ZN7S8284C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
static Base_Class bases_S8284C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S807C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S8284C1[];
extern void _ZN7S8284C1D1Ev();
extern void _ZN7S8284C1D0Ev();
static  VTBL_ENTRY vtc_S8284C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8284C1[0]),
  (VTBL_ENTRY)&_ZN7S8284C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8284C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8284C1[];
extern  VTBL_ENTRY _ZTV7S8284C1[];
Class_Descriptor cd_S8284C1 = {  "S8284C1", // class name
  bases_S8284C1, 1,
  &(vtc_S8284C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,84), // object size
  NSPAIRA(_ZTI7S8284C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8284C1),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  S8283C9  {
  void *s8283c9f0[2];
};
//SIG(-1 S8283C9) C1{ Fp[2]}



static void Test_S8283C9()
{
  {
    init_simple_test("S8283C9");
    S8283C9 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S8283C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8283C9)");
    check_field_offset(lv, s8283c9f0, 0, "S8283C9.s8283c9f0");
  }
}
static Arrange_To_Call_Me vS8283C9(Test_S8283C9, "S8283C9", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8283C1  : S807C5_nt {
  char s8283c1f0;
  ::S2172C10_nt s8283c1f1;
  ::S16304C3 s8283c1f2;
  ::S8284C9 s8283c1f3;
  ::S8284C7_nt s8283c1f4;
  ::S8283C9 s8283c1f5;
  void *s8283c1f6;
  virtual  ~S8283C1(); // _ZN7S8283C1D1Ev
  S8283C1(); // tgen
};
//SIG(1 S8283C1) C1{ BC2{ vd m} vd Fc FC3{ m FC4{ Fl[4]}} FC5{ m FC6{ Fi[4]}} FC7{ Fp[2]} FC8{ Fp[2]} FC9{ Fp[2]} Fp}


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

static void Test_S8283C1()
{
  extern Class_Descriptor cd_S8283C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,18)];
    init_test(&cd_S8283C1, buf);
    S8283C1 *dp, &lv = *(dp=new (buf) S8283C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,68), "sizeof(S8283C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8283C1)");
    check_base_class_offset(lv, (S807C5_nt*), 0, "S8283C1");
    check_field_offset(lv, s8283c1f0, ABISELECT(8,4), "S8283C1.s8283c1f0");
    check_field_offset(lv, s8283c1f1, ABISELECT(16,8), "S8283C1.s8283c1f1");
    check_field_offset(lv, s8283c1f2, ABISELECT(48,24), "S8283C1.s8283c1f2");
    check_field_offset(lv, s8283c1f3, ABISELECT(64,40), "S8283C1.s8283c1f3");
    check_field_offset(lv, s8283c1f4, ABISELECT(80,48), "S8283C1.s8283c1f4");
    check_field_offset(lv, s8283c1f5, ABISELECT(96,56), "S8283C1.s8283c1f5");
    check_field_offset(lv, s8283c1f6, ABISELECT(112,64), "S8283C1.s8283c1f6");
    test_class_info(&lv, &cd_S8283C1);
    dp->~S8283C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8283C1(Test_S8283C1, "S8283C1", ABISELECT(120,68));

#else // __cplusplus

extern void _ZN7S8283C1C1Ev();
extern void _ZN7S8283C1D1Ev();
Name_Map name_map_S8283C1[] = {
  NSPAIR(_ZN7S8283C1C1Ev),
  NSPAIR(_ZN7S8283C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
static Base_Class bases_S8283C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S807C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S8283C1[];
extern void _ZN7S8283C1D1Ev();
extern void _ZN7S8283C1D0Ev();
static  VTBL_ENTRY vtc_S8283C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8283C1[0]),
  (VTBL_ENTRY)&_ZN7S8283C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8283C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8283C1[];
extern  VTBL_ENTRY _ZTV7S8283C1[];
Class_Descriptor cd_S8283C1 = {  "S8283C1", // class name
  bases_S8283C1, 1,
  &(vtc_S8283C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,68), // object size
  NSPAIRA(_ZTI7S8283C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8283C1),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  S1804C3  : S16496C4_nt {
  virtual void  v4(); // _ZN7S1804C32v4Ev
  virtual void  v5(); // _ZN7S1804C32v5Ev
  virtual void  v6(); // _ZN7S1804C32v6Ev
  virtual void  v7(); // _ZN7S1804C32v7Ev
  virtual void  v8(); // _ZN7S1804C32v8Ev
  virtual void  v9(); // _ZN7S1804C32v9Ev
  virtual void  v10(); // _ZN7S1804C33v10Ev
  virtual void  v11(); // _ZN7S1804C33v11Ev
  virtual void  v12(); // _ZN7S1804C33v12Ev
  virtual void  v13(); // _ZN7S1804C33v13Ev
  virtual void  v14(); // _ZN7S1804C33v14Ev
  virtual void  v15(); // _ZN7S1804C33v15Ev
  virtual void  v16(); // _ZN7S1804C33v16Ev
  ~S1804C3(); // tgen
  S1804C3(); // tgen
};
//SIG(-1 S1804C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13}


void  S1804C3 ::v4(){vfunc_called(this, "_ZN7S1804C32v4Ev");}
void  S1804C3 ::v5(){vfunc_called(this, "_ZN7S1804C32v5Ev");}
void  S1804C3 ::v6(){vfunc_called(this, "_ZN7S1804C32v6Ev");}
void  S1804C3 ::v7(){vfunc_called(this, "_ZN7S1804C32v7Ev");}
void  S1804C3 ::v8(){vfunc_called(this, "_ZN7S1804C32v8Ev");}
void  S1804C3 ::v9(){vfunc_called(this, "_ZN7S1804C32v9Ev");}
void  S1804C3 ::v10(){vfunc_called(this, "_ZN7S1804C33v10Ev");}
void  S1804C3 ::v11(){vfunc_called(this, "_ZN7S1804C33v11Ev");}
void  S1804C3 ::v12(){vfunc_called(this, "_ZN7S1804C33v12Ev");}
void  S1804C3 ::v13(){vfunc_called(this, "_ZN7S1804C33v13Ev");}
void  S1804C3 ::v14(){vfunc_called(this, "_ZN7S1804C33v14Ev");}
void  S1804C3 ::v15(){vfunc_called(this, "_ZN7S1804C33v15Ev");}
void  S1804C3 ::v16(){vfunc_called(this, "_ZN7S1804C33v16Ev");}
S1804C3 ::~S1804C3(){ note_dtor("S1804C3", this);} // tgen
S1804C3 ::S1804C3(){ note_ctor("S1804C3", this);} // tgen

static void Test_S1804C3()
{
  extern Class_Descriptor cd_S1804C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1804C3, buf);
    S1804C3 *dp, &lv = *(dp=new (buf) S1804C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1804C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1804C3)");
    check_base_class_offset(lv, (S16496C4_nt*), 0, "S1804C3");
    test_class_info(&lv, &cd_S1804C3);
    dp->~S1804C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1804C3(Test_S1804C3, "S1804C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1804C3C1Ev();
extern void _ZN7S1804C3D1Ev();
Name_Map name_map_S1804C3[] = {
  NSPAIR(_ZN7S1804C3C1Ev),
  NSPAIR(_ZN7S1804C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
static Base_Class bases_S1804C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1804C3[];
extern void _ZN7S1804C3D1Ev();
extern void _ZN7S1804C3D0Ev();
extern void _ZN7S1804C32v4Ev();
extern void _ZN7S1804C32v5Ev();
extern void _ZN7S1804C32v6Ev();
extern void _ZN7S1804C32v7Ev();
extern void _ZN7S1804C32v8Ev();
extern void _ZN7S1804C32v9Ev();
extern void _ZN7S1804C33v10Ev();
extern void _ZN7S1804C33v11Ev();
extern void _ZN7S1804C33v12Ev();
extern void _ZN7S1804C33v13Ev();
extern void _ZN7S1804C33v14Ev();
extern void _ZN7S1804C33v15Ev();
extern void _ZN7S1804C33v16Ev();
static  VTBL_ENTRY vtc_S1804C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1804C3[0]),
  (VTBL_ENTRY)&_ZN7S1804C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1804C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1804C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1804C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1804C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1804C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1804C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1804C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v16Ev,
};
extern VTBL_ENTRY _ZTI7S1804C3[];
extern  VTBL_ENTRY _ZTV7S1804C3[];
Class_Descriptor cd_S1804C3 = {  "S1804C3", // class name
  bases_S1804C3, 1,
  &(vtc_S1804C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1804C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1804C3),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1804C2  : S1804C3 {
  virtual void  v17(); // _ZN7S1804C23v17Ev
  ~S1804C2(); // tgen
  S1804C2(); // tgen
};
//SIG(-1 S1804C2) C1{ BC2{ BC3{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14} v1}


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

static void Test_S1804C2()
{
  extern Class_Descriptor cd_S1804C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1804C2, buf);
    S1804C2 *dp, &lv = *(dp=new (buf) S1804C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1804C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1804C2)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1804C3*), 0, "S1804C2");
    check_base_class_offset(lv, (S1804C3*), 0, "S1804C2");
    test_class_info(&lv, &cd_S1804C2);
    dp->~S1804C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1804C2(Test_S1804C2, "S1804C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1804C2C1Ev();
extern void _ZN7S1804C2D1Ev();
Name_Map name_map_S1804C2[] = {
  NSPAIR(_ZN7S1804C2C1Ev),
  NSPAIR(_ZN7S1804C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1804C3;
extern VTBL_ENTRY _ZTI7S1804C3[];
extern  VTBL_ENTRY _ZTV7S1804C3[];
static Base_Class bases_S1804C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1804C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1804C2[];
extern void _ZN7S1804C2D1Ev();
extern void _ZN7S1804C2D0Ev();
extern void _ZN7S1804C32v4Ev();
extern void _ZN7S1804C32v5Ev();
extern void _ZN7S1804C32v6Ev();
extern void _ZN7S1804C32v7Ev();
extern void _ZN7S1804C32v8Ev();
extern void _ZN7S1804C32v9Ev();
extern void _ZN7S1804C33v10Ev();
extern void _ZN7S1804C33v11Ev();
extern void _ZN7S1804C33v12Ev();
extern void _ZN7S1804C33v13Ev();
extern void _ZN7S1804C33v14Ev();
extern void _ZN7S1804C33v15Ev();
extern void _ZN7S1804C33v16Ev();
extern void _ZN7S1804C23v17Ev();
static  VTBL_ENTRY vtc_S1804C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1804C2[0]),
  (VTBL_ENTRY)&_ZN7S1804C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1804C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1804C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1804C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1804C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1804C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1804C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1804C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1804C23v17Ev,
};
extern VTBL_ENTRY _ZTI7S1804C2[];
extern  VTBL_ENTRY _ZTV7S1804C2[];
Class_Descriptor cd_S1804C2 = {  "S1804C2", // class name
  bases_S1804C2, 2,
  &(vtc_S1804C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1804C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1804C2),18, //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  S1804C1  : S1804C2 {
  virtual void  v1(); // _ZN7S1804C12v1Ev
  virtual void  v2(); // _ZN7S1804C12v2Ev
  virtual void  v3(); // _ZN7S1804C12v3Ev
  ~S1804C1(); // tgen
  S1804C1(); // tgen
};
//SIG(1 S1804C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16} v17} v1 v2 v3}


void  S1804C1 ::v1(){vfunc_called(this, "_ZN7S1804C12v1Ev");}
void  S1804C1 ::v2(){vfunc_called(this, "_ZN7S1804C12v2Ev");}
void  S1804C1 ::v3(){vfunc_called(this, "_ZN7S1804C12v3Ev");}
S1804C1 ::~S1804C1(){ note_dtor("S1804C1", this);} // tgen
S1804C1 ::S1804C1(){ note_ctor("S1804C1", this);} // tgen

static void Test_S1804C1()
{
  extern Class_Descriptor cd_S1804C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1804C1, buf);
    S1804C1 *dp, &lv = *(dp=new (buf) S1804C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1804C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1804C1)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1804C3*)(S1804C2*), 0, "S1804C1");
    check_base_class_offset(lv, (S1804C3*)(S1804C2*), 0, "S1804C1");
    check_base_class_offset(lv, (S1804C2*), 0, "S1804C1");
    test_class_info(&lv, &cd_S1804C1);
    dp->~S1804C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1804C1(Test_S1804C1, "S1804C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1804C1C1Ev();
extern void _ZN7S1804C1D1Ev();
Name_Map name_map_S1804C1[] = {
  NSPAIR(_ZN7S1804C1C1Ev),
  NSPAIR(_ZN7S1804C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1804C3;
extern VTBL_ENTRY _ZTI7S1804C3[];
extern  VTBL_ENTRY _ZTV7S1804C3[];
extern Class_Descriptor cd_S1804C2;
extern VTBL_ENTRY _ZTI7S1804C2[];
extern  VTBL_ENTRY _ZTV7S1804C2[];
static Base_Class bases_S1804C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1804C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1804C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1804C1[];
extern void _ZN7S1804C1D1Ev();
extern void _ZN7S1804C1D0Ev();
extern void _ZN7S1804C32v4Ev();
extern void _ZN7S1804C32v5Ev();
extern void _ZN7S1804C32v6Ev();
extern void _ZN7S1804C32v7Ev();
extern void _ZN7S1804C32v8Ev();
extern void _ZN7S1804C32v9Ev();
extern void _ZN7S1804C33v10Ev();
extern void _ZN7S1804C33v11Ev();
extern void _ZN7S1804C33v12Ev();
extern void _ZN7S1804C33v13Ev();
extern void _ZN7S1804C33v14Ev();
extern void _ZN7S1804C33v15Ev();
extern void _ZN7S1804C33v16Ev();
extern void _ZN7S1804C23v17Ev();
extern void _ZN7S1804C12v1Ev();
extern void _ZN7S1804C12v2Ev();
extern void _ZN7S1804C12v3Ev();
static  VTBL_ENTRY vtc_S1804C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1804C1[0]),
  (VTBL_ENTRY)&_ZN7S1804C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1804C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1804C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1804C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1804C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1804C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1804C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1804C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1804C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1804C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1804C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1804C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1804C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1804C1[];
extern  VTBL_ENTRY _ZTV7S1804C1[];
Class_Descriptor cd_S1804C1 = {  "S1804C1", // class name
  bases_S1804C1, 3,
  &(vtc_S1804C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1804C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1804C1),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8317C1  : S807C5_nt {
  ::S4426C6_nt s8317c1f0;
  ::S16304C3 s8317c1f1;
  ::S8284C9 s8317c1f2;
  ::S8284C7_nt s8317c1f3;
  ::S8283C9 s8317c1f4;
  void *s8317c1f5;
  char s8317c1f6;
  virtual  ~S8317C1(); // _ZN7S8317C1D1Ev
  S8317C1(); // tgen
};
//SIG(1 S8317C1) C1{ BC2{ vd m} vd FC3{ m FC4{ FL[4]}} FC5{ m FC6{ Fi[4]}} FC7{ Fp[2]} FC8{ Fp[2]} FC9{ Fp[2]} Fp Fc}


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

static void Test_S8317C1()
{
  extern Class_Descriptor cd_S8317C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,22)];
    init_test(&cd_S8317C1, buf);
    S8317C1 *dp, &lv = *(dp=new (buf) S8317C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,84), "sizeof(S8317C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8317C1)");
    check_base_class_offset(lv, (S807C5_nt*), 0, "S8317C1");
    check_field_offset(lv, s8317c1f0, ABISELECT(8,4), "S8317C1.s8317c1f0");
    check_field_offset(lv, s8317c1f1, ABISELECT(40,36), "S8317C1.s8317c1f1");
    check_field_offset(lv, s8317c1f2, ABISELECT(56,52), "S8317C1.s8317c1f2");
    check_field_offset(lv, s8317c1f3, ABISELECT(72,60), "S8317C1.s8317c1f3");
    check_field_offset(lv, s8317c1f4, ABISELECT(88,68), "S8317C1.s8317c1f4");
    check_field_offset(lv, s8317c1f5, ABISELECT(104,76), "S8317C1.s8317c1f5");
    check_field_offset(lv, s8317c1f6, ABISELECT(112,80), "S8317C1.s8317c1f6");
    test_class_info(&lv, &cd_S8317C1);
    dp->~S8317C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8317C1(Test_S8317C1, "S8317C1", ABISELECT(120,84));

#else // __cplusplus

extern void _ZN7S8317C1C1Ev();
extern void _ZN7S8317C1D1Ev();
Name_Map name_map_S8317C1[] = {
  NSPAIR(_ZN7S8317C1C1Ev),
  NSPAIR(_ZN7S8317C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
static Base_Class bases_S8317C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S807C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S8317C1[];
extern void _ZN7S8317C1D1Ev();
extern void _ZN7S8317C1D0Ev();
static  VTBL_ENTRY vtc_S8317C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8317C1[0]),
  (VTBL_ENTRY)&_ZN7S8317C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8317C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8317C1[];
extern  VTBL_ENTRY _ZTV7S8317C1[];
Class_Descriptor cd_S8317C1 = {  "S8317C1", // class name
  bases_S8317C1, 1,
  &(vtc_S8317C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,84), // object size
  NSPAIRA(_ZTI7S8317C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8317C1),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  S4184C3  {
  virtual  ~S4184C3(); // _ZN7S4184C3D1Ev
  virtual void  v1(); // _ZN7S4184C32v1Ev
  virtual void  v2(); // _ZN7S4184C32v2Ev
  virtual void  v3(); // _ZN7S4184C32v3Ev
  S4184C3(); // tgen
};
//SIG(-1 S4184C3) C1{ vd v1 v2 v3}


 S4184C3 ::~S4184C3(){ note_dtor("S4184C3", this);}
void  S4184C3 ::v1(){vfunc_called(this, "_ZN7S4184C32v1Ev");}
void  S4184C3 ::v2(){vfunc_called(this, "_ZN7S4184C32v2Ev");}
void  S4184C3 ::v3(){vfunc_called(this, "_ZN7S4184C32v3Ev");}
S4184C3 ::S4184C3(){ note_ctor("S4184C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4184C3C1Ev();
extern void _ZN7S4184C3D1Ev();
Name_Map name_map_S4184C3[] = {
  NSPAIR(_ZN7S4184C3C1Ev),
  NSPAIR(_ZN7S4184C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4184C3[];
extern void _ZN7S4184C3D1Ev();
extern void _ZN7S4184C3D0Ev();
extern void _ZN7S4184C32v1Ev();
extern void _ZN7S4184C32v2Ev();
extern void _ZN7S4184C32v3Ev();
static  VTBL_ENTRY vtc_S4184C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4184C3[0]),
  (VTBL_ENTRY)&_ZN7S4184C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4184C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4184C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4184C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4184C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4184C3[];
extern  VTBL_ENTRY _ZTV7S4184C3[];
Class_Descriptor cd_S4184C3 = {  "S4184C3", // class name
  0,0,//no base classes
  &(vtc_S4184C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4184C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4184C3),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  S4184C2  : S4184C3 {
  ::S5166C36 s4184c2f0;
  ::S2355C13_nt s4184c2f1;
  char s4184c2f2;
  virtual  ~S4184C2(); // _ZN7S4184C2D1Ev
  virtual void  v4(); // _ZN7S4184C22v4Ev
  virtual void  v5(); // _ZN7S4184C22v5Ev
  virtual void  v6(); // _ZN7S4184C22v6Ev
  S4184C2(); // tgen
};
//SIG(-1 S4184C2) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S4184C2 ::~S4184C2(){ note_dtor("S4184C2", this);}
void  S4184C2 ::v4(){vfunc_called(this, "_ZN7S4184C22v4Ev");}
void  S4184C2 ::v5(){vfunc_called(this, "_ZN7S4184C22v5Ev");}
void  S4184C2 ::v6(){vfunc_called(this, "_ZN7S4184C22v6Ev");}
S4184C2 ::S4184C2(){ note_ctor("S4184C2", this);} // tgen

static void Test_S4184C2()
{
  extern Class_Descriptor cd_S4184C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S4184C2, buf);
    S4184C2 *dp, &lv = *(dp=new (buf) S4184C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S4184C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4184C2)");
    check_base_class_offset(lv, (S4184C3*), 0, "S4184C2");
    check_field_offset(lv, s4184c2f0, ABISELECT(8,4), "S4184C2.s4184c2f0");
    check_field_offset(lv, s4184c2f1, ABISELECT(32,20), "S4184C2.s4184c2f1");
    check_field_offset(lv, s4184c2f2, ABISELECT(64,52), "S4184C2.s4184c2f2");
    test_class_info(&lv, &cd_S4184C2);
    dp->~S4184C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4184C2(Test_S4184C2, "S4184C2", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S4184C2C1Ev();
extern void _ZN7S4184C2D1Ev();
Name_Map name_map_S4184C2[] = {
  NSPAIR(_ZN7S4184C2C1Ev),
  NSPAIR(_ZN7S4184C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4184C3;
extern VTBL_ENTRY _ZTI7S4184C3[];
extern  VTBL_ENTRY _ZTV7S4184C3[];
static Base_Class bases_S4184C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4184C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4184C2[];
extern void _ZN7S4184C2D1Ev();
extern void _ZN7S4184C2D0Ev();
extern void _ZN7S4184C32v1Ev();
extern void _ZN7S4184C32v2Ev();
extern void _ZN7S4184C32v3Ev();
extern void _ZN7S4184C22v4Ev();
extern void _ZN7S4184C22v5Ev();
extern void _ZN7S4184C22v6Ev();
static  VTBL_ENTRY vtc_S4184C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4184C2[0]),
  (VTBL_ENTRY)&_ZN7S4184C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4184C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4184C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4184C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4184C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4184C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4184C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4184C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4184C2[];
extern  VTBL_ENTRY _ZTV7S4184C2[];
Class_Descriptor cd_S4184C2 = {  "S4184C2", // class name
  bases_S4184C2, 1,
  &(vtc_S4184C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S4184C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4184C2),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  S4184C1  : S4184C2 {
  void *s4184c1f0;
  char s4184c1f1[2];
  virtual  ~S4184C1(); // _ZN7S4184C1D1Ev
  S4184C1(); // tgen
};
//SIG(1 S4184C1) C1{ BC2{ BC3{ vd v1 v2 v3} vd v4 v5 v6 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd Fp Fc[2]}


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

static void Test_S4184C1()
{
  extern Class_Descriptor cd_S4184C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,17)];
    init_test(&cd_S4184C1, buf);
    S4184C1 *dp, &lv = *(dp=new (buf) S4184C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S4184C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4184C1)");
    check_base_class_offset(lv, (S4184C3*)(S4184C2*), 0, "S4184C1");
    check_base_class_offset(lv, (S4184C2*), 0, "S4184C1");
    check_field_offset(lv, s4184c1f0, ABISELECT(72,56), "S4184C1.s4184c1f0");
    check_field_offset(lv, s4184c1f1, ABISELECT(80,60), "S4184C1.s4184c1f1");
    test_class_info(&lv, &cd_S4184C1);
    dp->~S4184C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4184C1(Test_S4184C1, "S4184C1", ABISELECT(88,64));

#else // __cplusplus

extern void _ZN7S4184C1C1Ev();
extern void _ZN7S4184C1D1Ev();
Name_Map name_map_S4184C1[] = {
  NSPAIR(_ZN7S4184C1C1Ev),
  NSPAIR(_ZN7S4184C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4184C3;
extern VTBL_ENTRY _ZTI7S4184C3[];
extern  VTBL_ENTRY _ZTV7S4184C3[];
extern Class_Descriptor cd_S4184C2;
extern VTBL_ENTRY _ZTI7S4184C2[];
extern  VTBL_ENTRY _ZTV7S4184C2[];
static Base_Class bases_S4184C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4184C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4184C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4184C1[];
extern void _ZN7S4184C1D1Ev();
extern void _ZN7S4184C1D0Ev();
extern void _ZN7S4184C32v1Ev();
extern void _ZN7S4184C32v2Ev();
extern void _ZN7S4184C32v3Ev();
extern void _ZN7S4184C22v4Ev();
extern void _ZN7S4184C22v5Ev();
extern void _ZN7S4184C22v6Ev();
static  VTBL_ENTRY vtc_S4184C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4184C1[0]),
  (VTBL_ENTRY)&_ZN7S4184C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4184C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4184C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4184C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4184C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4184C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4184C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4184C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4184C1[];
extern  VTBL_ENTRY _ZTV7S4184C1[];
Class_Descriptor cd_S4184C1 = {  "S4184C1", // class name
  bases_S4184C1, 2,
  &(vtc_S4184C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,64), // object size
  NSPAIRA(_ZTI7S4184C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4184C1),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  S21242C1  {
  char s21242c1f0;
  ::S4426C6_nt s21242c1f1;
  ::S16304C3 s21242c1f2;
  ::S8284C9 s21242c1f3;
  ::S8284C7_nt s21242c1f4;
  ::S8283C9 s21242c1f5;
  void *s21242c1f6;
  void  mf21242c1(); // _ZN8S21242C19mf21242c1Ev
  virtual  ~S21242C1(); // _ZN8S21242C1D1Ev
  S21242C1(); // tgen
};
//SIG(1 S21242C1) C1{ vd m Fc FC2{ m FC3{ FL[4]}} FC4{ m FC5{ Fi[4]}} FC6{ Fp[2]} FC7{ Fp[2]} FC8{ Fp[2]} Fp}


void  S21242C1 ::mf21242c1(){}
 S21242C1 ::~S21242C1(){ note_dtor("S21242C1", this);}
S21242C1 ::S21242C1(){ note_ctor("S21242C1", this);} // tgen

static void Test_S21242C1()
{
  extern Class_Descriptor cd_S21242C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,22)];
    init_test(&cd_S21242C1, buf);
    S21242C1 *dp, &lv = *(dp=new (buf) S21242C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,84), "sizeof(S21242C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21242C1)");
    check_field_offset(lv, s21242c1f0, ABISELECT(8,4), "S21242C1.s21242c1f0");
    check_field_offset(lv, s21242c1f1, ABISELECT(16,8), "S21242C1.s21242c1f1");
    check_field_offset(lv, s21242c1f2, ABISELECT(48,40), "S21242C1.s21242c1f2");
    check_field_offset(lv, s21242c1f3, ABISELECT(64,56), "S21242C1.s21242c1f3");
    check_field_offset(lv, s21242c1f4, ABISELECT(80,64), "S21242C1.s21242c1f4");
    check_field_offset(lv, s21242c1f5, ABISELECT(96,72), "S21242C1.s21242c1f5");
    check_field_offset(lv, s21242c1f6, ABISELECT(112,80), "S21242C1.s21242c1f6");
    test_class_info(&lv, &cd_S21242C1);
    dp->~S21242C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21242C1(Test_S21242C1, "S21242C1", ABISELECT(120,84));

#else // __cplusplus

extern void _ZN8S21242C1C1Ev();
extern void _ZN8S21242C1D1Ev();
Name_Map name_map_S21242C1[] = {
  NSPAIR(_ZN8S21242C1C1Ev),
  NSPAIR(_ZN8S21242C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21242C1[];
extern void _ZN8S21242C1D1Ev();
extern void _ZN8S21242C1D0Ev();
static  VTBL_ENTRY vtc_S21242C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21242C1[0]),
  (VTBL_ENTRY)&_ZN8S21242C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21242C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21242C1[];
extern  VTBL_ENTRY _ZTV8S21242C1[];
Class_Descriptor cd_S21242C1 = {  "S21242C1", // class name
  0,0,//no base classes
  &(vtc_S21242C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,84), // object size
  NSPAIRA(_ZTI8S21242C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21242C1),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  S21241C1  {
  char s21241c1f0;
  ::S2172C10_nt s21241c1f1;
  ::S16304C3 s21241c1f2;
  ::S8284C9 s21241c1f3;
  ::S8284C7_nt s21241c1f4;
  ::S8283C9 s21241c1f5;
  void *s21241c1f6;
  void  mf21241c1(); // _ZN8S21241C19mf21241c1Ev
  virtual  ~S21241C1(); // _ZN8S21241C1D1Ev
  S21241C1(); // tgen
};
//SIG(1 S21241C1) C1{ vd m Fc FC2{ m FC3{ Fl[4]}} FC4{ m FC5{ Fi[4]}} FC6{ Fp[2]} FC7{ Fp[2]} FC8{ Fp[2]} Fp}


void  S21241C1 ::mf21241c1(){}
 S21241C1 ::~S21241C1(){ note_dtor("S21241C1", this);}
S21241C1 ::S21241C1(){ note_ctor("S21241C1", this);} // tgen

static void Test_S21241C1()
{
  extern Class_Descriptor cd_S21241C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,18)];
    init_test(&cd_S21241C1, buf);
    S21241C1 *dp, &lv = *(dp=new (buf) S21241C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,68), "sizeof(S21241C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21241C1)");
    check_field_offset(lv, s21241c1f0, ABISELECT(8,4), "S21241C1.s21241c1f0");
    check_field_offset(lv, s21241c1f1, ABISELECT(16,8), "S21241C1.s21241c1f1");
    check_field_offset(lv, s21241c1f2, ABISELECT(48,24), "S21241C1.s21241c1f2");
    check_field_offset(lv, s21241c1f3, ABISELECT(64,40), "S21241C1.s21241c1f3");
    check_field_offset(lv, s21241c1f4, ABISELECT(80,48), "S21241C1.s21241c1f4");
    check_field_offset(lv, s21241c1f5, ABISELECT(96,56), "S21241C1.s21241c1f5");
    check_field_offset(lv, s21241c1f6, ABISELECT(112,64), "S21241C1.s21241c1f6");
    test_class_info(&lv, &cd_S21241C1);
    dp->~S21241C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21241C1(Test_S21241C1, "S21241C1", ABISELECT(120,68));

#else // __cplusplus

extern void _ZN8S21241C1C1Ev();
extern void _ZN8S21241C1D1Ev();
Name_Map name_map_S21241C1[] = {
  NSPAIR(_ZN8S21241C1C1Ev),
  NSPAIR(_ZN8S21241C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21241C1[];
extern void _ZN8S21241C1D1Ev();
extern void _ZN8S21241C1D0Ev();
static  VTBL_ENTRY vtc_S21241C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21241C1[0]),
  (VTBL_ENTRY)&_ZN8S21241C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21241C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21241C1[];
extern  VTBL_ENTRY _ZTV8S21241C1[];
Class_Descriptor cd_S21241C1 = {  "S21241C1", // class name
  0,0,//no base classes
  &(vtc_S21241C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,68), // object size
  NSPAIRA(_ZTI8S21241C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21241C1),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  S4185C3  {
  virtual  ~S4185C3(); // _ZN7S4185C3D1Ev
  virtual void  v1(); // _ZN7S4185C32v1Ev
  virtual void  v2(); // _ZN7S4185C32v2Ev
  virtual void  v3(); // _ZN7S4185C32v3Ev
  S4185C3(); // tgen
};
//SIG(-1 S4185C3) C1{ vd v1 v2 v3}


 S4185C3 ::~S4185C3(){ note_dtor("S4185C3", this);}
void  S4185C3 ::v1(){vfunc_called(this, "_ZN7S4185C32v1Ev");}
void  S4185C3 ::v2(){vfunc_called(this, "_ZN7S4185C32v2Ev");}
void  S4185C3 ::v3(){vfunc_called(this, "_ZN7S4185C32v3Ev");}
S4185C3 ::S4185C3(){ note_ctor("S4185C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4185C3C1Ev();
extern void _ZN7S4185C3D1Ev();
Name_Map name_map_S4185C3[] = {
  NSPAIR(_ZN7S4185C3C1Ev),
  NSPAIR(_ZN7S4185C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4185C3[];
extern void _ZN7S4185C3D1Ev();
extern void _ZN7S4185C3D0Ev();
extern void _ZN7S4185C32v1Ev();
extern void _ZN7S4185C32v2Ev();
extern void _ZN7S4185C32v3Ev();
static  VTBL_ENTRY vtc_S4185C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4185C3[0]),
  (VTBL_ENTRY)&_ZN7S4185C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4185C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4185C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4185C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4185C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4185C3[];
extern  VTBL_ENTRY _ZTV7S4185C3[];
Class_Descriptor cd_S4185C3 = {  "S4185C3", // class name
  0,0,//no base classes
  &(vtc_S4185C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4185C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4185C3),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  S4185C2  : S4185C3 {
  ::S5166C36 s4185c2f0;
  ::S2355C13_nt s4185c2f1;
  char s4185c2f2;
  virtual  ~S4185C2(); // _ZN7S4185C2D1Ev
  virtual void  v4(); // _ZN7S4185C22v4Ev
  virtual void  v5(); // _ZN7S4185C22v5Ev
  virtual void  v6(); // _ZN7S4185C22v6Ev
  S4185C2(); // tgen
};
//SIG(-1 S4185C2) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FL[4]} Fc}


 S4185C2 ::~S4185C2(){ note_dtor("S4185C2", this);}
void  S4185C2 ::v4(){vfunc_called(this, "_ZN7S4185C22v4Ev");}
void  S4185C2 ::v5(){vfunc_called(this, "_ZN7S4185C22v5Ev");}
void  S4185C2 ::v6(){vfunc_called(this, "_ZN7S4185C22v6Ev");}
S4185C2 ::S4185C2(){ note_ctor("S4185C2", this);} // tgen

static void Test_S4185C2()
{
  extern Class_Descriptor cd_S4185C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S4185C2, buf);
    S4185C2 *dp, &lv = *(dp=new (buf) S4185C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S4185C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4185C2)");
    check_base_class_offset(lv, (S4185C3*), 0, "S4185C2");
    check_field_offset(lv, s4185c2f0, ABISELECT(8,4), "S4185C2.s4185c2f0");
    check_field_offset(lv, s4185c2f1, ABISELECT(32,20), "S4185C2.s4185c2f1");
    check_field_offset(lv, s4185c2f2, ABISELECT(64,52), "S4185C2.s4185c2f2");
    test_class_info(&lv, &cd_S4185C2);
    dp->~S4185C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4185C2(Test_S4185C2, "S4185C2", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S4185C2C1Ev();
extern void _ZN7S4185C2D1Ev();
Name_Map name_map_S4185C2[] = {
  NSPAIR(_ZN7S4185C2C1Ev),
  NSPAIR(_ZN7S4185C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4185C3;
extern VTBL_ENTRY _ZTI7S4185C3[];
extern  VTBL_ENTRY _ZTV7S4185C3[];
static Base_Class bases_S4185C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4185C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4185C2[];
extern void _ZN7S4185C2D1Ev();
extern void _ZN7S4185C2D0Ev();
extern void _ZN7S4185C32v1Ev();
extern void _ZN7S4185C32v2Ev();
extern void _ZN7S4185C32v3Ev();
extern void _ZN7S4185C22v4Ev();
extern void _ZN7S4185C22v5Ev();
extern void _ZN7S4185C22v6Ev();
static  VTBL_ENTRY vtc_S4185C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4185C2[0]),
  (VTBL_ENTRY)&_ZN7S4185C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4185C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4185C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4185C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4185C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4185C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4185C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4185C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4185C2[];
extern  VTBL_ENTRY _ZTV7S4185C2[];
Class_Descriptor cd_S4185C2 = {  "S4185C2", // class name
  bases_S4185C2, 1,
  &(vtc_S4185C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S4185C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4185C2),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  S4185C1  : S4185C2 {
  void *s4185c1f0;
  virtual  ~S4185C1(); // _ZN7S4185C1D1Ev
  S4185C1(); // tgen
};
//SIG(1 S4185C1) C1{ BC2{ BC3{ vd v1 v2 v3} vd v4 v5 v6 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FL[4]} Fc} vd Fp}


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

static void Test_S4185C1()
{
  extern Class_Descriptor cd_S4185C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S4185C1, buf);
    S4185C1 *dp, &lv = *(dp=new (buf) S4185C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S4185C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4185C1)");
    check_base_class_offset(lv, (S4185C3*)(S4185C2*), 0, "S4185C1");
    check_base_class_offset(lv, (S4185C2*), 0, "S4185C1");
    check_field_offset(lv, s4185c1f0, ABISELECT(72,56), "S4185C1.s4185c1f0");
    test_class_info(&lv, &cd_S4185C1);
    dp->~S4185C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4185C1(Test_S4185C1, "S4185C1", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN7S4185C1C1Ev();
extern void _ZN7S4185C1D1Ev();
Name_Map name_map_S4185C1[] = {
  NSPAIR(_ZN7S4185C1C1Ev),
  NSPAIR(_ZN7S4185C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4185C3;
extern VTBL_ENTRY _ZTI7S4185C3[];
extern  VTBL_ENTRY _ZTV7S4185C3[];
extern Class_Descriptor cd_S4185C2;
extern VTBL_ENTRY _ZTI7S4185C2[];
extern  VTBL_ENTRY _ZTV7S4185C2[];
static Base_Class bases_S4185C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4185C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4185C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4185C1[];
extern void _ZN7S4185C1D1Ev();
extern void _ZN7S4185C1D0Ev();
extern void _ZN7S4185C32v1Ev();
extern void _ZN7S4185C32v2Ev();
extern void _ZN7S4185C32v3Ev();
extern void _ZN7S4185C22v4Ev();
extern void _ZN7S4185C22v5Ev();
extern void _ZN7S4185C22v6Ev();
static  VTBL_ENTRY vtc_S4185C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4185C1[0]),
  (VTBL_ENTRY)&_ZN7S4185C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4185C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4185C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4185C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4185C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4185C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4185C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4185C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4185C1[];
extern  VTBL_ENTRY _ZTV7S4185C1[];
Class_Descriptor cd_S4185C1 = {  "S4185C1", // class name
  bases_S4185C1, 2,
  &(vtc_S4185C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI7S4185C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4185C1),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  S1783C3  : S16496C4_nt {
  virtual void  v2(); // _ZN7S1783C32v2Ev
  virtual void  v3(); // _ZN7S1783C32v3Ev
  virtual void  v4(); // _ZN7S1783C32v4Ev
  virtual void  v5(); // _ZN7S1783C32v5Ev
  virtual void  v6(); // _ZN7S1783C32v6Ev
  virtual void  v7(); // _ZN7S1783C32v7Ev
  virtual void  v8(); // _ZN7S1783C32v8Ev
  virtual void  v9(); // _ZN7S1783C32v9Ev
  virtual void  v10(); // _ZN7S1783C33v10Ev
  virtual void  v11(); // _ZN7S1783C33v11Ev
  virtual void  v12(); // _ZN7S1783C33v12Ev
  virtual void  v13(); // _ZN7S1783C33v13Ev
  virtual void  v14(); // _ZN7S1783C33v14Ev
  ~S1783C3(); // tgen
  S1783C3(); // tgen
};
//SIG(-1 S1783C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13}


void  S1783C3 ::v2(){vfunc_called(this, "_ZN7S1783C32v2Ev");}
void  S1783C3 ::v3(){vfunc_called(this, "_ZN7S1783C32v3Ev");}
void  S1783C3 ::v4(){vfunc_called(this, "_ZN7S1783C32v4Ev");}
void  S1783C3 ::v5(){vfunc_called(this, "_ZN7S1783C32v5Ev");}
void  S1783C3 ::v6(){vfunc_called(this, "_ZN7S1783C32v6Ev");}
void  S1783C3 ::v7(){vfunc_called(this, "_ZN7S1783C32v7Ev");}
void  S1783C3 ::v8(){vfunc_called(this, "_ZN7S1783C32v8Ev");}
void  S1783C3 ::v9(){vfunc_called(this, "_ZN7S1783C32v9Ev");}
void  S1783C3 ::v10(){vfunc_called(this, "_ZN7S1783C33v10Ev");}
void  S1783C3 ::v11(){vfunc_called(this, "_ZN7S1783C33v11Ev");}
void  S1783C3 ::v12(){vfunc_called(this, "_ZN7S1783C33v12Ev");}
void  S1783C3 ::v13(){vfunc_called(this, "_ZN7S1783C33v13Ev");}
void  S1783C3 ::v14(){vfunc_called(this, "_ZN7S1783C33v14Ev");}
S1783C3 ::~S1783C3(){ note_dtor("S1783C3", this);} // tgen
S1783C3 ::S1783C3(){ note_ctor("S1783C3", this);} // tgen

static void Test_S1783C3()
{
  extern Class_Descriptor cd_S1783C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1783C3, buf);
    S1783C3 *dp, &lv = *(dp=new (buf) S1783C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1783C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1783C3)");
    check_base_class_offset(lv, (S16496C4_nt*), 0, "S1783C3");
    test_class_info(&lv, &cd_S1783C3);
    dp->~S1783C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1783C3(Test_S1783C3, "S1783C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1783C3C1Ev();
extern void _ZN7S1783C3D1Ev();
Name_Map name_map_S1783C3[] = {
  NSPAIR(_ZN7S1783C3C1Ev),
  NSPAIR(_ZN7S1783C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
static Base_Class bases_S1783C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1783C3[];
extern void _ZN7S1783C3D1Ev();
extern void _ZN7S1783C3D0Ev();
extern void _ZN7S1783C32v2Ev();
extern void _ZN7S1783C32v3Ev();
extern void _ZN7S1783C32v4Ev();
extern void _ZN7S1783C32v5Ev();
extern void _ZN7S1783C32v6Ev();
extern void _ZN7S1783C32v7Ev();
extern void _ZN7S1783C32v8Ev();
extern void _ZN7S1783C32v9Ev();
extern void _ZN7S1783C33v10Ev();
extern void _ZN7S1783C33v11Ev();
extern void _ZN7S1783C33v12Ev();
extern void _ZN7S1783C33v13Ev();
extern void _ZN7S1783C33v14Ev();
static  VTBL_ENTRY vtc_S1783C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1783C3[0]),
  (VTBL_ENTRY)&_ZN7S1783C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1783C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1783C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1783C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1783C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1783C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1783C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S1783C3[];
extern  VTBL_ENTRY _ZTV7S1783C3[];
Class_Descriptor cd_S1783C3 = {  "S1783C3", // class name
  bases_S1783C3, 1,
  &(vtc_S1783C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1783C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1783C3),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1783C2  : S1783C3 {
  virtual void  v15(); // _ZN7S1783C23v15Ev
  ~S1783C2(); // tgen
  S1783C2(); // tgen
};
//SIG(-1 S1783C2) C1{ BC2{ BC3{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14} v1}


void  S1783C2 ::v15(){vfunc_called(this, "_ZN7S1783C23v15Ev");}
S1783C2 ::~S1783C2(){ note_dtor("S1783C2", this);} // tgen
S1783C2 ::S1783C2(){ note_ctor("S1783C2", this);} // tgen

static void Test_S1783C2()
{
  extern Class_Descriptor cd_S1783C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1783C2, buf);
    S1783C2 *dp, &lv = *(dp=new (buf) S1783C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1783C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1783C2)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1783C3*), 0, "S1783C2");
    check_base_class_offset(lv, (S1783C3*), 0, "S1783C2");
    test_class_info(&lv, &cd_S1783C2);
    dp->~S1783C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1783C2(Test_S1783C2, "S1783C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1783C2C1Ev();
extern void _ZN7S1783C2D1Ev();
Name_Map name_map_S1783C2[] = {
  NSPAIR(_ZN7S1783C2C1Ev),
  NSPAIR(_ZN7S1783C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1783C3;
extern VTBL_ENTRY _ZTI7S1783C3[];
extern  VTBL_ENTRY _ZTV7S1783C3[];
static Base_Class bases_S1783C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1783C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1783C2[];
extern void _ZN7S1783C2D1Ev();
extern void _ZN7S1783C2D0Ev();
extern void _ZN7S1783C32v2Ev();
extern void _ZN7S1783C32v3Ev();
extern void _ZN7S1783C32v4Ev();
extern void _ZN7S1783C32v5Ev();
extern void _ZN7S1783C32v6Ev();
extern void _ZN7S1783C32v7Ev();
extern void _ZN7S1783C32v8Ev();
extern void _ZN7S1783C32v9Ev();
extern void _ZN7S1783C33v10Ev();
extern void _ZN7S1783C33v11Ev();
extern void _ZN7S1783C33v12Ev();
extern void _ZN7S1783C33v13Ev();
extern void _ZN7S1783C33v14Ev();
extern void _ZN7S1783C23v15Ev();
static  VTBL_ENTRY vtc_S1783C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1783C2[0]),
  (VTBL_ENTRY)&_ZN7S1783C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1783C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1783C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1783C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1783C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1783C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1783C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1783C23v15Ev,
};
extern VTBL_ENTRY _ZTI7S1783C2[];
extern  VTBL_ENTRY _ZTV7S1783C2[];
Class_Descriptor cd_S1783C2 = {  "S1783C2", // class name
  bases_S1783C2, 2,
  &(vtc_S1783C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1783C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1783C2),18, //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  S1783C1  : S1783C2 {
  virtual void  v1(); // _ZN7S1783C12v1Ev
  ~S1783C1(); // tgen
  S1783C1(); // tgen
};
//SIG(1 S1783C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14} v15} v1}


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

static void Test_S1783C1()
{
  extern Class_Descriptor cd_S1783C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1783C1, buf);
    S1783C1 *dp, &lv = *(dp=new (buf) S1783C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1783C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1783C1)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1783C3*)(S1783C2*), 0, "S1783C1");
    check_base_class_offset(lv, (S1783C3*)(S1783C2*), 0, "S1783C1");
    check_base_class_offset(lv, (S1783C2*), 0, "S1783C1");
    test_class_info(&lv, &cd_S1783C1);
    dp->~S1783C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1783C1(Test_S1783C1, "S1783C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1783C1C1Ev();
extern void _ZN7S1783C1D1Ev();
Name_Map name_map_S1783C1[] = {
  NSPAIR(_ZN7S1783C1C1Ev),
  NSPAIR(_ZN7S1783C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1783C3;
extern VTBL_ENTRY _ZTI7S1783C3[];
extern  VTBL_ENTRY _ZTV7S1783C3[];
extern Class_Descriptor cd_S1783C2;
extern VTBL_ENTRY _ZTI7S1783C2[];
extern  VTBL_ENTRY _ZTV7S1783C2[];
static Base_Class bases_S1783C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1783C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1783C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1783C1[];
extern void _ZN7S1783C1D1Ev();
extern void _ZN7S1783C1D0Ev();
extern void _ZN7S1783C32v2Ev();
extern void _ZN7S1783C32v3Ev();
extern void _ZN7S1783C32v4Ev();
extern void _ZN7S1783C32v5Ev();
extern void _ZN7S1783C32v6Ev();
extern void _ZN7S1783C32v7Ev();
extern void _ZN7S1783C32v8Ev();
extern void _ZN7S1783C32v9Ev();
extern void _ZN7S1783C33v10Ev();
extern void _ZN7S1783C33v11Ev();
extern void _ZN7S1783C33v12Ev();
extern void _ZN7S1783C33v13Ev();
extern void _ZN7S1783C33v14Ev();
extern void _ZN7S1783C23v15Ev();
extern void _ZN7S1783C12v1Ev();
static  VTBL_ENTRY vtc_S1783C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1783C1[0]),
  (VTBL_ENTRY)&_ZN7S1783C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1783C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1783C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1783C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1783C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1783C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1783C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1783C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1783C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1783C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1783C1[];
extern  VTBL_ENTRY _ZTV7S1783C1[];
Class_Descriptor cd_S1783C1 = {  "S1783C1", // class name
  bases_S1783C1, 3,
  &(vtc_S1783C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1783C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1783C1),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1826C3  : S16496C4_nt {
  virtual void  v6(); // _ZN7S1826C32v6Ev
  virtual void  v7(); // _ZN7S1826C32v7Ev
  virtual void  v8(); // _ZN7S1826C32v8Ev
  virtual void  v9(); // _ZN7S1826C32v9Ev
  virtual void  v10(); // _ZN7S1826C33v10Ev
  virtual void  v11(); // _ZN7S1826C33v11Ev
  virtual void  v12(); // _ZN7S1826C33v12Ev
  virtual void  v13(); // _ZN7S1826C33v13Ev
  virtual void  v14(); // _ZN7S1826C33v14Ev
  ~S1826C3(); // tgen
  S1826C3(); // tgen
};
//SIG(-1 S1826C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S1826C3 ::v6(){vfunc_called(this, "_ZN7S1826C32v6Ev");}
void  S1826C3 ::v7(){vfunc_called(this, "_ZN7S1826C32v7Ev");}
void  S1826C3 ::v8(){vfunc_called(this, "_ZN7S1826C32v8Ev");}
void  S1826C3 ::v9(){vfunc_called(this, "_ZN7S1826C32v9Ev");}
void  S1826C3 ::v10(){vfunc_called(this, "_ZN7S1826C33v10Ev");}
void  S1826C3 ::v11(){vfunc_called(this, "_ZN7S1826C33v11Ev");}
void  S1826C3 ::v12(){vfunc_called(this, "_ZN7S1826C33v12Ev");}
void  S1826C3 ::v13(){vfunc_called(this, "_ZN7S1826C33v13Ev");}
void  S1826C3 ::v14(){vfunc_called(this, "_ZN7S1826C33v14Ev");}
S1826C3 ::~S1826C3(){ note_dtor("S1826C3", this);} // tgen
S1826C3 ::S1826C3(){ note_ctor("S1826C3", this);} // tgen

static void Test_S1826C3()
{
  extern Class_Descriptor cd_S1826C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1826C3, buf);
    S1826C3 *dp, &lv = *(dp=new (buf) S1826C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1826C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1826C3)");
    check_base_class_offset(lv, (S16496C4_nt*), 0, "S1826C3");
    test_class_info(&lv, &cd_S1826C3);
    dp->~S1826C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1826C3(Test_S1826C3, "S1826C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1826C3C1Ev();
extern void _ZN7S1826C3D1Ev();
Name_Map name_map_S1826C3[] = {
  NSPAIR(_ZN7S1826C3C1Ev),
  NSPAIR(_ZN7S1826C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
static Base_Class bases_S1826C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1826C3[];
extern void _ZN7S1826C3D1Ev();
extern void _ZN7S1826C3D0Ev();
extern void _ZN7S1826C32v6Ev();
extern void _ZN7S1826C32v7Ev();
extern void _ZN7S1826C32v8Ev();
extern void _ZN7S1826C32v9Ev();
extern void _ZN7S1826C33v10Ev();
extern void _ZN7S1826C33v11Ev();
extern void _ZN7S1826C33v12Ev();
extern void _ZN7S1826C33v13Ev();
extern void _ZN7S1826C33v14Ev();
static  VTBL_ENTRY vtc_S1826C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1826C3[0]),
  (VTBL_ENTRY)&_ZN7S1826C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1826C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1826C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1826C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1826C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1826C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1826C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1826C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1826C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1826C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1826C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S1826C3[];
extern  VTBL_ENTRY _ZTV7S1826C3[];
Class_Descriptor cd_S1826C3 = {  "S1826C3", // class name
  bases_S1826C3, 1,
  &(vtc_S1826C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1826C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1826C3),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1826C2  : S1826C3 {
  ~S1826C2(); // tgen
  S1826C2(); // tgen
};
//SIG(-1 S1826C2) C1{ BC2{ BC3{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9}}


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

static void Test_S1826C2()
{
  extern Class_Descriptor cd_S1826C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1826C2, buf);
    S1826C2 *dp, &lv = *(dp=new (buf) S1826C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1826C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1826C2)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1826C3*), 0, "S1826C2");
    check_base_class_offset(lv, (S1826C3*), 0, "S1826C2");
    test_class_info(&lv, &cd_S1826C2);
    dp->~S1826C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1826C2(Test_S1826C2, "S1826C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1826C2C1Ev();
extern void _ZN7S1826C2D1Ev();
Name_Map name_map_S1826C2[] = {
  NSPAIR(_ZN7S1826C2C1Ev),
  NSPAIR(_ZN7S1826C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1826C3;
extern VTBL_ENTRY _ZTI7S1826C3[];
extern  VTBL_ENTRY _ZTV7S1826C3[];
static Base_Class bases_S1826C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1826C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1826C2[];
extern void _ZN7S1826C2D1Ev();
extern void _ZN7S1826C2D0Ev();
extern void _ZN7S1826C32v6Ev();
extern void _ZN7S1826C32v7Ev();
extern void _ZN7S1826C32v8Ev();
extern void _ZN7S1826C32v9Ev();
extern void _ZN7S1826C33v10Ev();
extern void _ZN7S1826C33v11Ev();
extern void _ZN7S1826C33v12Ev();
extern void _ZN7S1826C33v13Ev();
extern void _ZN7S1826C33v14Ev();
static  VTBL_ENTRY vtc_S1826C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1826C2[0]),
  (VTBL_ENTRY)&_ZN7S1826C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1826C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1826C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1826C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1826C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1826C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1826C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1826C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1826C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1826C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1826C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S1826C2[];
extern  VTBL_ENTRY _ZTV7S1826C2[];
Class_Descriptor cd_S1826C2 = {  "S1826C2", // class name
  bases_S1826C2, 2,
  &(vtc_S1826C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1826C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1826C2),13, //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  S1826C1  : S1826C2 {
  virtual void  v1(); // _ZN7S1826C12v1Ev
  virtual void  v2(); // _ZN7S1826C12v2Ev
  virtual void  v3(); // _ZN7S1826C12v3Ev
  virtual void  v4(); // _ZN7S1826C12v4Ev
  virtual void  v5(); // _ZN7S1826C12v5Ev
  ~S1826C1(); // tgen
  S1826C1(); // tgen
};
//SIG(1 S1826C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v6 v7 v8 v9 v10 v11 v12 v13 v14}} v1 v2 v3 v4 v5}


void  S1826C1 ::v1(){vfunc_called(this, "_ZN7S1826C12v1Ev");}
void  S1826C1 ::v2(){vfunc_called(this, "_ZN7S1826C12v2Ev");}
void  S1826C1 ::v3(){vfunc_called(this, "_ZN7S1826C12v3Ev");}
void  S1826C1 ::v4(){vfunc_called(this, "_ZN7S1826C12v4Ev");}
void  S1826C1 ::v5(){vfunc_called(this, "_ZN7S1826C12v5Ev");}
S1826C1 ::~S1826C1(){ note_dtor("S1826C1", this);} // tgen
S1826C1 ::S1826C1(){ note_ctor("S1826C1", this);} // tgen

static void Test_S1826C1()
{
  extern Class_Descriptor cd_S1826C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1826C1, buf);
    S1826C1 *dp, &lv = *(dp=new (buf) S1826C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1826C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1826C1)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1826C3*)(S1826C2*), 0, "S1826C1");
    check_base_class_offset(lv, (S1826C3*)(S1826C2*), 0, "S1826C1");
    check_base_class_offset(lv, (S1826C2*), 0, "S1826C1");
    test_class_info(&lv, &cd_S1826C1);
    dp->~S1826C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1826C1(Test_S1826C1, "S1826C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1826C1C1Ev();
extern void _ZN7S1826C1D1Ev();
Name_Map name_map_S1826C1[] = {
  NSPAIR(_ZN7S1826C1C1Ev),
  NSPAIR(_ZN7S1826C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1826C3;
extern VTBL_ENTRY _ZTI7S1826C3[];
extern  VTBL_ENTRY _ZTV7S1826C3[];
extern Class_Descriptor cd_S1826C2;
extern VTBL_ENTRY _ZTI7S1826C2[];
extern  VTBL_ENTRY _ZTV7S1826C2[];
static Base_Class bases_S1826C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1826C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1826C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1826C1[];
extern void _ZN7S1826C1D1Ev();
extern void _ZN7S1826C1D0Ev();
extern void _ZN7S1826C32v6Ev();
extern void _ZN7S1826C32v7Ev();
extern void _ZN7S1826C32v8Ev();
extern void _ZN7S1826C32v9Ev();
extern void _ZN7S1826C33v10Ev();
extern void _ZN7S1826C33v11Ev();
extern void _ZN7S1826C33v12Ev();
extern void _ZN7S1826C33v13Ev();
extern void _ZN7S1826C33v14Ev();
extern void _ZN7S1826C12v1Ev();
extern void _ZN7S1826C12v2Ev();
extern void _ZN7S1826C12v3Ev();
extern void _ZN7S1826C12v4Ev();
extern void _ZN7S1826C12v5Ev();
static  VTBL_ENTRY vtc_S1826C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1826C1[0]),
  (VTBL_ENTRY)&_ZN7S1826C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1826C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1826C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1826C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1826C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1826C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1826C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1826C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1826C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1826C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1826C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1826C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1826C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1826C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1826C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1826C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1826C1[];
extern  VTBL_ENTRY _ZTV7S1826C1[];
Class_Descriptor cd_S1826C1 = {  "S1826C1", // class name
  bases_S1826C1, 3,
  &(vtc_S1826C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1826C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1826C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20744C2  : virtual S5166C37 , virtual S5166C27 {
  void *s20744c2f0;
  virtual  ~S20744C2(); // _ZN8S20744C2D2Ev
  S20744C2(); // tgen
};
//SIG(-1 S20744C2) C1{ VBC2{ m} VBC3{ m} vd Fp}


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

static void Test_S20744C2()
{
  extern Class_Descriptor cd_S20744C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20744C2, buf);
    S20744C2 *dp, &lv = *(dp=new (buf) S20744C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20744C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20744C2)");
    check_base_class_offset(lv, (S5166C37*), 0, "S20744C2");
    check_base_class_offset(lv, (S5166C27*), 0, "S20744C2");
    check_field_offset(lv, s20744c2f0, ABISELECT(8,4), "S20744C2.s20744c2f0");
    test_class_info(&lv, &cd_S20744C2);
    dp->~S20744C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20744C2(Test_S20744C2, "S20744C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20744C2C1Ev();
extern void _ZN8S20744C2D2Ev();
Name_Map name_map_S20744C2[] = {
  NSPAIR(_ZN8S20744C2C1Ev),
  NSPAIR(_ZN8S20744C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
static Base_Class bases_S20744C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20744C2[];
extern void _ZN8S20744C2D1Ev();
extern void _ZN8S20744C2D0Ev();
static  VTBL_ENTRY vtc_S20744C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20744C2[0]),
  (VTBL_ENTRY)&_ZN8S20744C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20744C2D0Ev,
};
extern VTBL_ENTRY _ZTV8S20744C2[];
static  VTT_ENTRY vtt_S20744C2[] = {
  {&(_ZTV8S20744C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20744C2[];
extern  VTBL_ENTRY _ZTV8S20744C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20744C2[];
Class_Descriptor cd_S20744C2 = {  "S20744C2", // class name
  bases_S20744C2, 2,
  &(vtc_S20744C2[0]), // expected_vtbl_contents
  &(vtt_S20744C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20744C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20744C2),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20744C2),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  S20744C6  : virtual S20744C2 {
  virtual  ~S20744C6(); // _ZN8S20744C6D2Ev
  S20744C6(); // tgen
};
//SIG(-1 S20744C6) C1{ VBC2{ VBC3{ m} VBC4{ m} vd Fp} vd}


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

static void Test_S20744C6()
{
  extern Class_Descriptor cd_S20744C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20744C6, buf);
    S20744C6 *dp, &lv = *(dp=new (buf) S20744C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20744C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20744C6)");
    check_base_class_offset(lv, (S5166C37*)(S20744C2*), 0, "S20744C6");
    check_base_class_offset(lv, (S5166C27*)(S20744C2*), 0, "S20744C6");
    check_base_class_offset(lv, (S20744C2*), ABISELECT(8,4), "S20744C6");
    test_class_info(&lv, &cd_S20744C6);
    dp->~S20744C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20744C6(Test_S20744C6, "S20744C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20744C6C1Ev();
extern void _ZN8S20744C6D2Ev();
Name_Map name_map_S20744C6[] = {
  NSPAIR(_ZN8S20744C6C1Ev),
  NSPAIR(_ZN8S20744C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S20744C2;
extern VTBL_ENTRY _ZTI8S20744C2[];
extern  VTBL_ENTRY _ZTV8S20744C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20744C2[];
static Base_Class bases_S20744C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20744C2,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20744C6[];
extern void _ZN8S20744C6D1Ev();
extern void _ZN8S20744C6D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S20744C6D1Ev,_ZTv0_n20_N8S20744C6D1Ev)();
extern void ABISELECT(_ZThn8_N8S20744C6D1Ev,_ZThn4_N8S20744C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20744C6D0Ev,_ZTv0_n20_N8S20744C6D0Ev)();
extern void ABISELECT(_ZThn8_N8S20744C6D0Ev,_ZThn4_N8S20744C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20744C6[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20744C6[0]),
  (VTBL_ENTRY)&_ZN8S20744C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20744C6D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20744C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20744C6D1Ev,_ZTv0_n20_N8S20744C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20744C6D0Ev,_ZTv0_n20_N8S20744C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S20744C6[];
extern void _ZN8S20744C2D1Ev();
extern void _ZN8S20744C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20744C2__8S20744C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20744C2[0]),
  (VTBL_ENTRY)&_ZN8S20744C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20744C2D0Ev,
};
static  VTT_ENTRY vtt_S20744C6[] = {
  {&(_ZTV8S20744C6[5]),  5,14},
  {&(_ZTV8S20744C6[12]),  12,14},
  {&(_tg__ZTV8S20744C2__8S20744C6[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20744C6[];
extern  VTBL_ENTRY _ZTV8S20744C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20744C6[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20744C6D0Ev,_ZTv0_n20_N8S20744C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20744C6D0Ev,_ZThn4_N8S20744C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20744C6D1Ev,_ZTv0_n20_N8S20744C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20744C6D1Ev,_ZThn4_N8S20744C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20744C6 = {  "S20744C6", // class name
  bases_S20744C6, 3,
  &(vtc_S20744C6[0]), // expected_vtbl_contents
  &(vtt_S20744C6[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20744C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20744C6),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20744C6),3, //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  S20744C7  : S5166C27 , S20744C2 {
  ~S20744C7(); // tgen
  S20744C7(); // tgen
};
//SIG(-1 S20744C7) C1{ BC2{ m} BC3{ VBC4{ m} VBC2 vd Fp}}


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

static void Test_S20744C7()
{
  extern Class_Descriptor cd_S20744C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20744C7, buf);
    S20744C7 *dp, &lv = *(dp=new (buf) S20744C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20744C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20744C7)");
    /*is_ambiguous_... S20744C7::S5166C27 */ AMB_check_base_class_offset(lv, (S5166C27*), 0, "S20744C7");
    check_base_class_offset(lv, (S5166C37*)(S20744C2*), 0, "S20744C7");
    check_base_class_offset(lv, (S5166C27*)(S20744C2*), ABISELECT(16,8), "S20744C7");
    check_base_class_offset(lv, (S20744C2*), 0, "S20744C7");
    test_class_info(&lv, &cd_S20744C7);
    dp->~S20744C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20744C7(Test_S20744C7, "S20744C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20744C7C1Ev();
extern void _ZN8S20744C7D1Ev();
Name_Map name_map_S20744C7[] = {
  NSPAIR(_ZN8S20744C7C1Ev),
  NSPAIR(_ZN8S20744C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S20744C2;
extern VTBL_ENTRY _ZTI8S20744C2[];
extern  VTBL_ENTRY _ZTV8S20744C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20744C2[];
static Base_Class bases_S20744C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5166C27,    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
    3, //immediately_derived
  0, 1},
  {&cd_S20744C2,    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
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20744C7[];
extern void _ZN8S20744C7D1Ev();
extern void _ZN8S20744C7D0Ev();
static  VTBL_ENTRY vtc_S20744C7[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20744C7[0]),
  (VTBL_ENTRY)&_ZN8S20744C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20744C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S20744C7[];
extern void _ZN8S20744C2D1Ev();
extern void _ZN8S20744C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20744C2__8S20744C7[] = {
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20744C2[0]),
  (VTBL_ENTRY)&_ZN8S20744C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20744C2D0Ev,
};
static  VTT_ENTRY vtt_S20744C7[] = {
  {&(_ZTV8S20744C7[4]),  4,6},
  {&(_tg__ZTV8S20744C2__8S20744C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20744C7[];
extern  VTBL_ENTRY _ZTV8S20744C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20744C7[];
Class_Descriptor cd_S20744C7 = {  "S20744C7", // class name
  bases_S20744C7, 4,
  &(vtc_S20744C7[0]), // expected_vtbl_contents
  &(vtt_S20744C7[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20744C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20744C7),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20744C7),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  S20744C5  : S20744C6 , S5166C37 , S5166C27 , S20744C7 {
  int s20744c5f0;
  ~S20744C5(); // tgen
  S20744C5(); // tgen
};
//SIG(-1 S20744C5) C1{ BC2{ VBC3{ VBC4{ m} VBC5{ m} vd Fp} vd} BC4 BC5 BC6{ BC5 BC3} Fi}


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

static void Test_S20744C5()
{
  extern Class_Descriptor cd_S20744C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S20744C5, buf);
    S20744C5 *dp, &lv = *(dp=new (buf) S20744C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S20744C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20744C5)");
    /*is_ambiguous_... S20744C5::S20744C2 */ AMB_check_base_class_offset(lv, (S5166C37*)(S20744C2*), ABISELECT(48,24), "S20744C5");
    check_base_class_offset(lv, (S5166C37*)(S20744C2*)(S20744C7*), ABISELECT(48,24), "S20744C5");
    /*is_ambiguous_... S20744C5::S20744C2 */ AMB_check_base_class_offset(lv, (S5166C27*)(S20744C2*), ABISELECT(48,24), "S20744C5");
    check_base_class_offset(lv, (S5166C27*)(S20744C2*)(S20744C7*), ABISELECT(48,24), "S20744C5");
    check_base_class_offset(lv, (S20744C2*)(S20744C6*), ABISELECT(32,16), "S20744C5");
    check_base_class_offset(lv, (S20744C6*), 0, "S20744C5");
    /*is_ambiguous_... S20744C5::S5166C37 */ AMB_check_base_class_offset(lv, (S5166C37*), 0, "S20744C5");
    /*is_ambiguous_... S20744C5::S5166C27 */ AMB_check_base_class_offset(lv, (S5166C27*), 0, "S20744C5");
    /*is_ambiguous_... S20744C7::S5166C27 */ AMB_check_base_class_offset(lv, (S5166C27*)(S20744C7*), ABISELECT(8,4), "S20744C5");
    check_base_class_offset(lv, (S20744C2*)(S20744C7*), ABISELECT(8,4), "S20744C5");
    check_base_class_offset(lv, (S20744C7*), ABISELECT(8,4), "S20744C5");
    check_field_offset(lv, s20744c5f0, ABISELECT(24,12), "S20744C5.s20744c5f0");
    test_class_info(&lv, &cd_S20744C5);
    dp->~S20744C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20744C5(Test_S20744C5, "S20744C5", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S20744C5C1Ev();
extern void _ZN8S20744C5D1Ev();
Name_Map name_map_S20744C5[] = {
  NSPAIR(_ZN8S20744C5C1Ev),
  NSPAIR(_ZN8S20744C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S20744C2;
extern VTBL_ENTRY _ZTI8S20744C2[];
extern  VTBL_ENTRY _ZTV8S20744C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20744C2[];
extern Class_Descriptor cd_S20744C6;
extern VTBL_ENTRY _ZTI8S20744C6[];
extern  VTBL_ENTRY _ZTV8S20744C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20744C6[];
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S20744C2;
extern VTBL_ENTRY _ZTI8S20744C2[];
extern  VTBL_ENTRY _ZTV8S20744C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20744C2[];
extern Class_Descriptor cd_S20744C7;
extern VTBL_ENTRY _ZTI8S20744C7[];
extern  VTBL_ENTRY _ZTV8S20744C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20744C7[];
static Base_Class bases_S20744C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    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
    2, //immediately_derived
  0, 1},
  {&cd_S5166C27,    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
    2, //immediately_derived
  0, 1},
  {&cd_S20744C2,    ABISELECT(32,16), //bcp->offset
    13, //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
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20744C6,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5166C27,    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
    8, //immediately_derived
  0, 0},
  {&cd_S20744C2,    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
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20744C7,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20744C5[];
extern void _ZN8S20744C5D1Ev();
extern void _ZN8S20744C5D0Ev();
extern void ABISELECT(_ZThn8_N8S20744C5D1Ev,_ZThn4_N8S20744C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S20744C5D0Ev,_ZThn4_N8S20744C5D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20744C5D1Ev,_ZTv0_n20_N8S20744C5D1Ev)();
extern void ABISELECT(_ZThn32_N8S20744C5D1Ev,_ZThn16_N8S20744C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20744C5D0Ev,_ZTv0_n20_N8S20744C5D0Ev)();
extern void ABISELECT(_ZThn32_N8S20744C5D0Ev,_ZThn16_N8S20744C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20744C5[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20744C5[0]),
  (VTBL_ENTRY)&_ZN8S20744C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20744C5D0Ev,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20744C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20744C5D1Ev,_ZThn4_N8S20744C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20744C5D0Ev,_ZThn4_N8S20744C5D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20744C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20744C5D1Ev,_ZTv0_n20_N8S20744C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20744C5D0Ev,_ZTv0_n20_N8S20744C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S20744C5[];
extern void _ZN8S20744C6D1Ev();
extern void _ZN8S20744C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20744C6__8S20744C5[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20744C6[0]),
  (VTBL_ENTRY)&_ZN8S20744C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20744C6D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20744C6D1Ev,_ZTv0_n20_N8S20744C6D1Ev)();
extern void ABISELECT(_ZThn32_N8S20744C6D1Ev,_ZThn16_N8S20744C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20744C6D0Ev,_ZTv0_n20_N8S20744C6D0Ev)();
extern void ABISELECT(_ZThn32_N8S20744C6D0Ev,_ZThn16_N8S20744C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20744C2__8S20744C6__8S20744C5[] = {
  ABISELECT(-32,-16),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20744C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20744C6D1Ev,_ZTv0_n20_N8S20744C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20744C6D0Ev,_ZTv0_n20_N8S20744C6D0Ev),
};
extern void _ZN8S20744C7D1Ev();
extern void _ZN8S20744C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20744C7__8S20744C5[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20744C7[0]),
  (VTBL_ENTRY)&_ZN8S20744C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20744C7D0Ev,
};
extern void _ZN8S20744C2D1Ev();
extern void _ZN8S20744C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20744C28S20744C7__A1__8S20744C5[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20744C2[0]),
  (VTBL_ENTRY)&_ZN8S20744C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20744C2D0Ev,
};
extern void _ZN8S20744C2D1Ev();
extern void _ZN8S20744C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20744C2__8S20744C5[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20744C2[0]),
  (VTBL_ENTRY)&_ZN8S20744C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20744C2D0Ev,
};
static  VTT_ENTRY vtt_S20744C5[] = {
  {&(_ZTV8S20744C5[5]),  5,20},
  {&(_tg__ZTV8S20744C6__8S20744C5[5]),  5,7},
  {&(_tg__ZTV8S20744C2__8S20744C6__8S20744C5[5]),  5,7},
  {&(_tg__ZTV8S20744C7__8S20744C5[4]),  4,6},
  {&(_tg__ZTV8S20744C28S20744C7__A1__8S20744C5[4]),  4,6},
  {&(_ZTV8S20744C5[18]),  18,20},
  {&(_ZTV8S20744C5[11]),  11,20},
  {&(_tg__ZTV8S20744C2__8S20744C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20744C5[];
extern  VTBL_ENTRY _ZTV8S20744C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20744C5[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20744C6D0Ev,_ZTv0_n20_N8S20744C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20744C6D0Ev,_ZThn16_N8S20744C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20744C6D1Ev,_ZTv0_n20_N8S20744C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20744C6D1Ev,_ZThn16_N8S20744C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20744C5D0Ev,_ZTv0_n20_N8S20744C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20744C5D0Ev,_ZThn16_N8S20744C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20744C5D1Ev,_ZTv0_n20_N8S20744C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20744C5D1Ev,_ZThn16_N8S20744C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20744C5 = {  "S20744C5", // class name
  bases_S20744C5, 9,
  &(vtc_S20744C5[0]), // expected_vtbl_contents
  &(vtt_S20744C5[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S20744C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20744C5),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20744C5),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20744C1  : virtual S20744C2 , S20744C5 {
  ::S20744C5 s20744c1f0;
  int s20744c1f1;
  ~S20744C1(); // tgen
  S20744C1(); // tgen
};
//SIG(1 S20744C1) C1{ VBC2{ VBC3{ m} VBC4{ m} vd Fp} BC5{ BC6{ VBC2 vd} BC3 BC4 BC7{ BC4 BC2} Fi} FC5 Fi}


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

static void Test_S20744C1()
{
  extern Class_Descriptor cd_S20744C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[16];
    init_test(&cd_S20744C1, buf);
    S20744C1 *dp, &lv = *(dp=new (buf) S20744C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,60), "sizeof(S20744C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20744C1)");
    /*is_ambiguous_... S20744C1::S20744C2 */ AMB_check_base_class_offset(lv, (S5166C37*)(S20744C2*), ABISELECT(112,56), "S20744C1");
    check_base_class_offset(lv, (S5166C37*)(S20744C2*)(S20744C7*)(S20744C5*), ABISELECT(112,56), "S20744C1");
    /*is_ambiguous_... S20744C1::S20744C2 */ AMB_check_base_class_offset(lv, (S5166C27*)(S20744C2*), ABISELECT(112,56), "S20744C1");
    check_base_class_offset(lv, (S5166C27*)(S20744C2*)(S20744C7*)(S20744C5*), ABISELECT(112,56), "S20744C1");
    /*is_ambiguous_... S20744C1::S20744C2 */ AMB_check_base_class_offset(lv, (S20744C2*), ABISELECT(96,48), "S20744C1");
    check_base_class_offset(lv, (S20744C2*)(S20744C6*)(S20744C5*), ABISELECT(96,48), "S20744C1");
    check_base_class_offset(lv, (S20744C6*)(S20744C5*), 0, "S20744C1");
    /*is_ambiguous_... S20744C5::S5166C37 */ AMB_check_base_class_offset(lv, (S5166C37*)(S20744C5*), 0, "S20744C1");
    /*is_ambiguous_... S20744C5::S5166C27 */ AMB_check_base_class_offset(lv, (S5166C27*)(S20744C5*), 0, "S20744C1");
    /*is_ambiguous_... S20744C7::S5166C27 */ AMB_check_base_class_offset(lv, (S5166C27*)(S20744C7*)(S20744C5*), ABISELECT(8,4), "S20744C1");
    check_base_class_offset(lv, (S20744C2*)(S20744C7*)(S20744C5*), ABISELECT(8,4), "S20744C1");
    check_base_class_offset(lv, (S20744C7*)(S20744C5*), ABISELECT(8,4), "S20744C1");
    check_base_class_offset(lv, (S20744C5*), 0, "S20744C1");
    check_field_offset(lv, s20744c1f0, ABISELECT(32,16), "S20744C1.s20744c1f0");
    check_field_offset(lv, s20744c1f1, ABISELECT(88,44), "S20744C1.s20744c1f1");
    test_class_info(&lv, &cd_S20744C1);
    dp->~S20744C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20744C1(Test_S20744C1, "S20744C1", ABISELECT(120,60));

#else // __cplusplus

extern void _ZN8S20744C1C1Ev();
extern void _ZN8S20744C1D1Ev();
Name_Map name_map_S20744C1[] = {
  NSPAIR(_ZN8S20744C1C1Ev),
  NSPAIR(_ZN8S20744C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S20744C2;
extern VTBL_ENTRY _ZTI8S20744C2[];
extern  VTBL_ENTRY _ZTV8S20744C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20744C2[];
extern Class_Descriptor cd_S20744C6;
extern VTBL_ENTRY _ZTI8S20744C6[];
extern  VTBL_ENTRY _ZTV8S20744C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20744C6[];
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S20744C2;
extern VTBL_ENTRY _ZTI8S20744C2[];
extern  VTBL_ENTRY _ZTV8S20744C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20744C2[];
extern Class_Descriptor cd_S20744C7;
extern VTBL_ENTRY _ZTI8S20744C7[];
extern  VTBL_ENTRY _ZTV8S20744C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20744C7[];
extern Class_Descriptor cd_S20744C5;
extern VTBL_ENTRY _ZTI8S20744C5[];
extern  VTBL_ENTRY _ZTV8S20744C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20744C5[];
static Base_Class bases_S20744C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S5166C27,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20744C2,    ABISELECT(96,48), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20744C6,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5166C27,    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
    8, //immediately_derived
  0, 0},
  {&cd_S20744C2,    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
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20744C7,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20744C5,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S20744C1[];
extern void _ZN8S20744C1D1Ev();
extern void _ZN8S20744C1D0Ev();
extern void ABISELECT(_ZThn8_N8S20744C1D1Ev,_ZThn4_N8S20744C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20744C1D0Ev,_ZThn4_N8S20744C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20744C1D1Ev,_ZTv0_n20_N8S20744C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S20744C1D1Ev,_ZThn48_N8S20744C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20744C1D0Ev,_ZTv0_n20_N8S20744C1D0Ev)();
extern void ABISELECT(_ZThn96_N8S20744C1D0Ev,_ZThn48_N8S20744C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20744C1[] = {
  ABISELECT(112,56),
  ABISELECT(112,56),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20744C1[0]),
  (VTBL_ENTRY)&_ZN8S20744C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20744C1D0Ev,
  ABISELECT(104,52),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20744C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20744C1D1Ev,_ZThn4_N8S20744C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20744C1D0Ev,_ZThn4_N8S20744C1D0Ev),
  ABISELECT(-96,-48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S20744C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20744C1D1Ev,_ZTv0_n20_N8S20744C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20744C1D0Ev,_ZTv0_n20_N8S20744C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20744C1[];
extern void _ZN8S20744C5D1Ev();
extern void _ZN8S20744C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20744C5__8S20744C1[] = {
  ABISELECT(112,56),
  ABISELECT(112,56),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20744C5[0]),
  (VTBL_ENTRY)&_ZN8S20744C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20744C5D0Ev,
};
extern void _ZN8S20744C6D1Ev();
extern void _ZN8S20744C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20744C68S20744C5__8S20744C1[] = {
  ABISELECT(112,56),
  ABISELECT(112,56),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20744C6[0]),
  (VTBL_ENTRY)&_ZN8S20744C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20744C6D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20744C6D1Ev,_ZTv0_n20_N8S20744C6D1Ev)();
extern void ABISELECT(_ZThn96_N8S20744C6D1Ev,_ZThn48_N8S20744C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20744C6D0Ev,_ZTv0_n20_N8S20744C6D0Ev)();
extern void ABISELECT(_ZThn96_N8S20744C6D0Ev,_ZThn48_N8S20744C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20744C2__8S20744C68S20744C5__8S20744C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S20744C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20744C6D1Ev,_ZTv0_n20_N8S20744C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20744C6D0Ev,_ZTv0_n20_N8S20744C6D0Ev),
};
extern void _ZN8S20744C7D1Ev();
extern void _ZN8S20744C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20744C78S20744C5__8S20744C1[] = {
  ABISELECT(104,52),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20744C7[0]),
  (VTBL_ENTRY)&_ZN8S20744C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20744C7D0Ev,
};
extern void _ZN8S20744C2D1Ev();
extern void _ZN8S20744C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20744C28S20744C78S20744C5__A1__8S20744C1[] = {
  ABISELECT(104,52),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20744C2[0]),
  (VTBL_ENTRY)&_ZN8S20744C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20744C2D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20744C5D1Ev,_ZTv0_n20_N8S20744C5D1Ev)();
extern void ABISELECT(_ZThn96_N8S20744C5D1Ev,_ZThn48_N8S20744C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20744C5D0Ev,_ZTv0_n20_N8S20744C5D0Ev)();
extern void ABISELECT(_ZThn96_N8S20744C5D0Ev,_ZThn48_N8S20744C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20744C2__8S20744C5__8S20744C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S20744C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20744C5D1Ev,_ZTv0_n20_N8S20744C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20744C5D0Ev,_ZTv0_n20_N8S20744C5D0Ev),
};
extern void ABISELECT(_ZThn8_N8S20744C5D1Ev,_ZThn4_N8S20744C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S20744C5D0Ev,_ZThn4_N8S20744C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20744C7__8S20744C5__8S20744C1[] = {
  ABISELECT(104,52),
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20744C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20744C5D1Ev,_ZThn4_N8S20744C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20744C5D0Ev,_ZThn4_N8S20744C5D0Ev),
};
extern void _ZN8S20744C2D1Ev();
extern void _ZN8S20744C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20744C2__8S20744C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20744C2[0]),
  (VTBL_ENTRY)&_ZN8S20744C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20744C2D0Ev,
};
static  VTT_ENTRY vtt_S20744C1[] = {
  {&(_ZTV8S20744C1[5]),  5,20},
  {&(_tg__ZTV8S20744C5__8S20744C1[5]),  5,7},
  {&(_tg__ZTV8S20744C68S20744C5__8S20744C1[5]),  5,7},
  {&(_tg__ZTV8S20744C2__8S20744C68S20744C5__8S20744C1[5]),  5,7},
  {&(_tg__ZTV8S20744C78S20744C5__8S20744C1[4]),  4,6},
  {&(_tg__ZTV8S20744C28S20744C78S20744C5__A1__8S20744C1[4]),  4,6},
  {&(_tg__ZTV8S20744C2__8S20744C5__8S20744C1[5]),  5,7},
  {&(_tg__ZTV8S20744C7__8S20744C5__8S20744C1[4]),  4,6},
  {&(_ZTV8S20744C1[18]),  18,20},
  {&(_ZTV8S20744C1[11]),  11,20},
  {&(_tg__ZTV8S20744C2__8S20744C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20744C1[];
extern  VTBL_ENTRY _ZTV8S20744C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20744C1[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20744C5D0Ev,_ZTv0_n20_N8S20744C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20744C5D0Ev,_ZThn48_N8S20744C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20744C5D1Ev,_ZTv0_n20_N8S20744C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20744C5D1Ev,_ZThn48_N8S20744C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20744C6D0Ev,_ZTv0_n20_N8S20744C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20744C6D0Ev,_ZThn48_N8S20744C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20744C6D1Ev,_ZTv0_n20_N8S20744C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20744C6D1Ev,_ZThn48_N8S20744C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20744C1D0Ev,_ZTv0_n20_N8S20744C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20744C1D0Ev,_ZThn48_N8S20744C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20744C1D1Ev,_ZTv0_n20_N8S20744C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20744C1D1Ev,_ZThn48_N8S20744C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20744C1 = {  "S20744C1", // class name
  bases_S20744C1, 10,
  &(vtc_S20744C1[0]), // expected_vtbl_contents
  &(vtt_S20744C1[0]), // expected_vtt_contents
  ABISELECT(120,60), // object size
  NSPAIRA(_ZTI8S20744C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20744C1),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20744C1),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1827C3  : S16496C4_nt {
  virtual void  v6(); // _ZN7S1827C32v6Ev
  virtual void  v7(); // _ZN7S1827C32v7Ev
  virtual void  v8(); // _ZN7S1827C32v8Ev
  virtual void  v9(); // _ZN7S1827C32v9Ev
  virtual void  v10(); // _ZN7S1827C33v10Ev
  virtual void  v11(); // _ZN7S1827C33v11Ev
  virtual void  v12(); // _ZN7S1827C33v12Ev
  virtual void  v13(); // _ZN7S1827C33v13Ev
  ~S1827C3(); // tgen
  S1827C3(); // tgen
};
//SIG(-1 S1827C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8}


void  S1827C3 ::v6(){vfunc_called(this, "_ZN7S1827C32v6Ev");}
void  S1827C3 ::v7(){vfunc_called(this, "_ZN7S1827C32v7Ev");}
void  S1827C3 ::v8(){vfunc_called(this, "_ZN7S1827C32v8Ev");}
void  S1827C3 ::v9(){vfunc_called(this, "_ZN7S1827C32v9Ev");}
void  S1827C3 ::v10(){vfunc_called(this, "_ZN7S1827C33v10Ev");}
void  S1827C3 ::v11(){vfunc_called(this, "_ZN7S1827C33v11Ev");}
void  S1827C3 ::v12(){vfunc_called(this, "_ZN7S1827C33v12Ev");}
void  S1827C3 ::v13(){vfunc_called(this, "_ZN7S1827C33v13Ev");}
S1827C3 ::~S1827C3(){ note_dtor("S1827C3", this);} // tgen
S1827C3 ::S1827C3(){ note_ctor("S1827C3", this);} // tgen

static void Test_S1827C3()
{
  extern Class_Descriptor cd_S1827C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1827C3, buf);
    S1827C3 *dp, &lv = *(dp=new (buf) S1827C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1827C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1827C3)");
    check_base_class_offset(lv, (S16496C4_nt*), 0, "S1827C3");
    test_class_info(&lv, &cd_S1827C3);
    dp->~S1827C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1827C3(Test_S1827C3, "S1827C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1827C3C1Ev();
extern void _ZN7S1827C3D1Ev();
Name_Map name_map_S1827C3[] = {
  NSPAIR(_ZN7S1827C3C1Ev),
  NSPAIR(_ZN7S1827C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
static Base_Class bases_S1827C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1827C3[];
extern void _ZN7S1827C3D1Ev();
extern void _ZN7S1827C3D0Ev();
extern void _ZN7S1827C32v6Ev();
extern void _ZN7S1827C32v7Ev();
extern void _ZN7S1827C32v8Ev();
extern void _ZN7S1827C32v9Ev();
extern void _ZN7S1827C33v10Ev();
extern void _ZN7S1827C33v11Ev();
extern void _ZN7S1827C33v12Ev();
extern void _ZN7S1827C33v13Ev();
static  VTBL_ENTRY vtc_S1827C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1827C3[0]),
  (VTBL_ENTRY)&_ZN7S1827C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1827C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1827C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1827C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1827C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1827C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1827C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1827C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1827C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1827C33v13Ev,
};
extern VTBL_ENTRY _ZTI7S1827C3[];
extern  VTBL_ENTRY _ZTV7S1827C3[];
Class_Descriptor cd_S1827C3 = {  "S1827C3", // class name
  bases_S1827C3, 1,
  &(vtc_S1827C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1827C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1827C3),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  S1827C2  : S1827C3 {
  ~S1827C2(); // tgen
  S1827C2(); // tgen
};
//SIG(-1 S1827C2) C1{ BC2{ BC3{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8}}


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

static void Test_S1827C2()
{
  extern Class_Descriptor cd_S1827C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1827C2, buf);
    S1827C2 *dp, &lv = *(dp=new (buf) S1827C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1827C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1827C2)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1827C3*), 0, "S1827C2");
    check_base_class_offset(lv, (S1827C3*), 0, "S1827C2");
    test_class_info(&lv, &cd_S1827C2);
    dp->~S1827C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1827C2(Test_S1827C2, "S1827C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1827C2C1Ev();
extern void _ZN7S1827C2D1Ev();
Name_Map name_map_S1827C2[] = {
  NSPAIR(_ZN7S1827C2C1Ev),
  NSPAIR(_ZN7S1827C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1827C3;
extern VTBL_ENTRY _ZTI7S1827C3[];
extern  VTBL_ENTRY _ZTV7S1827C3[];
static Base_Class bases_S1827C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1827C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1827C2[];
extern void _ZN7S1827C2D1Ev();
extern void _ZN7S1827C2D0Ev();
extern void _ZN7S1827C32v6Ev();
extern void _ZN7S1827C32v7Ev();
extern void _ZN7S1827C32v8Ev();
extern void _ZN7S1827C32v9Ev();
extern void _ZN7S1827C33v10Ev();
extern void _ZN7S1827C33v11Ev();
extern void _ZN7S1827C33v12Ev();
extern void _ZN7S1827C33v13Ev();
static  VTBL_ENTRY vtc_S1827C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1827C2[0]),
  (VTBL_ENTRY)&_ZN7S1827C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1827C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1827C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1827C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1827C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1827C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1827C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1827C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1827C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1827C33v13Ev,
};
extern VTBL_ENTRY _ZTI7S1827C2[];
extern  VTBL_ENTRY _ZTV7S1827C2[];
Class_Descriptor cd_S1827C2 = {  "S1827C2", // class name
  bases_S1827C2, 2,
  &(vtc_S1827C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1827C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1827C2),12, //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  S1827C1  : S1827C2 {
  virtual void  v1(); // _ZN7S1827C12v1Ev
  virtual void  v2(); // _ZN7S1827C12v2Ev
  virtual void  v3(); // _ZN7S1827C12v3Ev
  virtual void  v4(); // _ZN7S1827C12v4Ev
  virtual void  v5(); // _ZN7S1827C12v5Ev
  ~S1827C1(); // tgen
  S1827C1(); // tgen
};
//SIG(1 S1827C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v6 v7 v8 v9 v10 v11 v12 v13}} v1 v2 v3 v4 v5}


void  S1827C1 ::v1(){vfunc_called(this, "_ZN7S1827C12v1Ev");}
void  S1827C1 ::v2(){vfunc_called(this, "_ZN7S1827C12v2Ev");}
void  S1827C1 ::v3(){vfunc_called(this, "_ZN7S1827C12v3Ev");}
void  S1827C1 ::v4(){vfunc_called(this, "_ZN7S1827C12v4Ev");}
void  S1827C1 ::v5(){vfunc_called(this, "_ZN7S1827C12v5Ev");}
S1827C1 ::~S1827C1(){ note_dtor("S1827C1", this);} // tgen
S1827C1 ::S1827C1(){ note_ctor("S1827C1", this);} // tgen

static void Test_S1827C1()
{
  extern Class_Descriptor cd_S1827C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1827C1, buf);
    S1827C1 *dp, &lv = *(dp=new (buf) S1827C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1827C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1827C1)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1827C3*)(S1827C2*), 0, "S1827C1");
    check_base_class_offset(lv, (S1827C3*)(S1827C2*), 0, "S1827C1");
    check_base_class_offset(lv, (S1827C2*), 0, "S1827C1");
    test_class_info(&lv, &cd_S1827C1);
    dp->~S1827C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1827C1(Test_S1827C1, "S1827C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1827C1C1Ev();
extern void _ZN7S1827C1D1Ev();
Name_Map name_map_S1827C1[] = {
  NSPAIR(_ZN7S1827C1C1Ev),
  NSPAIR(_ZN7S1827C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1827C3;
extern VTBL_ENTRY _ZTI7S1827C3[];
extern  VTBL_ENTRY _ZTV7S1827C3[];
extern Class_Descriptor cd_S1827C2;
extern VTBL_ENTRY _ZTI7S1827C2[];
extern  VTBL_ENTRY _ZTV7S1827C2[];
static Base_Class bases_S1827C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1827C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1827C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1827C1[];
extern void _ZN7S1827C1D1Ev();
extern void _ZN7S1827C1D0Ev();
extern void _ZN7S1827C32v6Ev();
extern void _ZN7S1827C32v7Ev();
extern void _ZN7S1827C32v8Ev();
extern void _ZN7S1827C32v9Ev();
extern void _ZN7S1827C33v10Ev();
extern void _ZN7S1827C33v11Ev();
extern void _ZN7S1827C33v12Ev();
extern void _ZN7S1827C33v13Ev();
extern void _ZN7S1827C12v1Ev();
extern void _ZN7S1827C12v2Ev();
extern void _ZN7S1827C12v3Ev();
extern void _ZN7S1827C12v4Ev();
extern void _ZN7S1827C12v5Ev();
static  VTBL_ENTRY vtc_S1827C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1827C1[0]),
  (VTBL_ENTRY)&_ZN7S1827C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1827C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1827C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1827C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1827C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1827C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1827C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1827C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1827C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1827C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1827C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1827C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1827C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1827C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1827C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1827C1[];
extern  VTBL_ENTRY _ZTV7S1827C1[];
Class_Descriptor cd_S1827C1 = {  "S1827C1", // class name
  bases_S1827C1, 3,
  &(vtc_S1827C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1827C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1827C1),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1817C3  : S16496C4_nt {
  virtual void  v5(); // _ZN7S1817C32v5Ev
  virtual void  v6(); // _ZN7S1817C32v6Ev
  virtual void  v7(); // _ZN7S1817C32v7Ev
  virtual void  v8(); // _ZN7S1817C32v8Ev
  virtual void  v9(); // _ZN7S1817C32v9Ev
  virtual void  v10(); // _ZN7S1817C33v10Ev
  virtual void  v11(); // _ZN7S1817C33v11Ev
  virtual void  v12(); // _ZN7S1817C33v12Ev
  virtual void  v13(); // _ZN7S1817C33v13Ev
  ~S1817C3(); // tgen
  S1817C3(); // tgen
};
//SIG(-1 S1817C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S1817C3 ::v5(){vfunc_called(this, "_ZN7S1817C32v5Ev");}
void  S1817C3 ::v6(){vfunc_called(this, "_ZN7S1817C32v6Ev");}
void  S1817C3 ::v7(){vfunc_called(this, "_ZN7S1817C32v7Ev");}
void  S1817C3 ::v8(){vfunc_called(this, "_ZN7S1817C32v8Ev");}
void  S1817C3 ::v9(){vfunc_called(this, "_ZN7S1817C32v9Ev");}
void  S1817C3 ::v10(){vfunc_called(this, "_ZN7S1817C33v10Ev");}
void  S1817C3 ::v11(){vfunc_called(this, "_ZN7S1817C33v11Ev");}
void  S1817C3 ::v12(){vfunc_called(this, "_ZN7S1817C33v12Ev");}
void  S1817C3 ::v13(){vfunc_called(this, "_ZN7S1817C33v13Ev");}
S1817C3 ::~S1817C3(){ note_dtor("S1817C3", this);} // tgen
S1817C3 ::S1817C3(){ note_ctor("S1817C3", this);} // tgen

static void Test_S1817C3()
{
  extern Class_Descriptor cd_S1817C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1817C3, buf);
    S1817C3 *dp, &lv = *(dp=new (buf) S1817C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1817C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1817C3)");
    check_base_class_offset(lv, (S16496C4_nt*), 0, "S1817C3");
    test_class_info(&lv, &cd_S1817C3);
    dp->~S1817C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1817C3(Test_S1817C3, "S1817C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1817C3C1Ev();
extern void _ZN7S1817C3D1Ev();
Name_Map name_map_S1817C3[] = {
  NSPAIR(_ZN7S1817C3C1Ev),
  NSPAIR(_ZN7S1817C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
static Base_Class bases_S1817C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1817C3[];
extern void _ZN7S1817C3D1Ev();
extern void _ZN7S1817C3D0Ev();
extern void _ZN7S1817C32v5Ev();
extern void _ZN7S1817C32v6Ev();
extern void _ZN7S1817C32v7Ev();
extern void _ZN7S1817C32v8Ev();
extern void _ZN7S1817C32v9Ev();
extern void _ZN7S1817C33v10Ev();
extern void _ZN7S1817C33v11Ev();
extern void _ZN7S1817C33v12Ev();
extern void _ZN7S1817C33v13Ev();
static  VTBL_ENTRY vtc_S1817C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1817C3[0]),
  (VTBL_ENTRY)&_ZN7S1817C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1817C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1817C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1817C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1817C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1817C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1817C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1817C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1817C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1817C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1817C33v13Ev,
};
extern VTBL_ENTRY _ZTI7S1817C3[];
extern  VTBL_ENTRY _ZTV7S1817C3[];
Class_Descriptor cd_S1817C3 = {  "S1817C3", // class name
  bases_S1817C3, 1,
  &(vtc_S1817C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1817C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1817C3),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1817C2  : S1817C3 {
  ~S1817C2(); // tgen
  S1817C2(); // tgen
};
//SIG(-1 S1817C2) C1{ BC2{ BC3{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9}}


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

static void Test_S1817C2()
{
  extern Class_Descriptor cd_S1817C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1817C2, buf);
    S1817C2 *dp, &lv = *(dp=new (buf) S1817C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1817C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1817C2)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1817C3*), 0, "S1817C2");
    check_base_class_offset(lv, (S1817C3*), 0, "S1817C2");
    test_class_info(&lv, &cd_S1817C2);
    dp->~S1817C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1817C2(Test_S1817C2, "S1817C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1817C2C1Ev();
extern void _ZN7S1817C2D1Ev();
Name_Map name_map_S1817C2[] = {
  NSPAIR(_ZN7S1817C2C1Ev),
  NSPAIR(_ZN7S1817C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1817C3;
extern VTBL_ENTRY _ZTI7S1817C3[];
extern  VTBL_ENTRY _ZTV7S1817C3[];
static Base_Class bases_S1817C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1817C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1817C2[];
extern void _ZN7S1817C2D1Ev();
extern void _ZN7S1817C2D0Ev();
extern void _ZN7S1817C32v5Ev();
extern void _ZN7S1817C32v6Ev();
extern void _ZN7S1817C32v7Ev();
extern void _ZN7S1817C32v8Ev();
extern void _ZN7S1817C32v9Ev();
extern void _ZN7S1817C33v10Ev();
extern void _ZN7S1817C33v11Ev();
extern void _ZN7S1817C33v12Ev();
extern void _ZN7S1817C33v13Ev();
static  VTBL_ENTRY vtc_S1817C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1817C2[0]),
  (VTBL_ENTRY)&_ZN7S1817C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1817C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1817C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1817C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1817C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1817C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1817C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1817C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1817C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1817C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1817C33v13Ev,
};
extern VTBL_ENTRY _ZTI7S1817C2[];
extern  VTBL_ENTRY _ZTV7S1817C2[];
Class_Descriptor cd_S1817C2 = {  "S1817C2", // class name
  bases_S1817C2, 2,
  &(vtc_S1817C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1817C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1817C2),13, //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  S1817C1  : S1817C2 {
  virtual void  v1(); // _ZN7S1817C12v1Ev
  virtual void  v2(); // _ZN7S1817C12v2Ev
  virtual void  v3(); // _ZN7S1817C12v3Ev
  virtual void  v4(); // _ZN7S1817C12v4Ev
  ~S1817C1(); // tgen
  S1817C1(); // tgen
};
//SIG(1 S1817C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v5 v6 v7 v8 v9 v10 v11 v12 v13}} v1 v2 v3 v4}


void  S1817C1 ::v1(){vfunc_called(this, "_ZN7S1817C12v1Ev");}
void  S1817C1 ::v2(){vfunc_called(this, "_ZN7S1817C12v2Ev");}
void  S1817C1 ::v3(){vfunc_called(this, "_ZN7S1817C12v3Ev");}
void  S1817C1 ::v4(){vfunc_called(this, "_ZN7S1817C12v4Ev");}
S1817C1 ::~S1817C1(){ note_dtor("S1817C1", this);} // tgen
S1817C1 ::S1817C1(){ note_ctor("S1817C1", this);} // tgen

static void Test_S1817C1()
{
  extern Class_Descriptor cd_S1817C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1817C1, buf);
    S1817C1 *dp, &lv = *(dp=new (buf) S1817C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1817C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1817C1)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1817C3*)(S1817C2*), 0, "S1817C1");
    check_base_class_offset(lv, (S1817C3*)(S1817C2*), 0, "S1817C1");
    check_base_class_offset(lv, (S1817C2*), 0, "S1817C1");
    test_class_info(&lv, &cd_S1817C1);
    dp->~S1817C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1817C1(Test_S1817C1, "S1817C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1817C1C1Ev();
extern void _ZN7S1817C1D1Ev();
Name_Map name_map_S1817C1[] = {
  NSPAIR(_ZN7S1817C1C1Ev),
  NSPAIR(_ZN7S1817C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1817C3;
extern VTBL_ENTRY _ZTI7S1817C3[];
extern  VTBL_ENTRY _ZTV7S1817C3[];
extern Class_Descriptor cd_S1817C2;
extern VTBL_ENTRY _ZTI7S1817C2[];
extern  VTBL_ENTRY _ZTV7S1817C2[];
static Base_Class bases_S1817C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1817C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1817C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1817C1[];
extern void _ZN7S1817C1D1Ev();
extern void _ZN7S1817C1D0Ev();
extern void _ZN7S1817C32v5Ev();
extern void _ZN7S1817C32v6Ev();
extern void _ZN7S1817C32v7Ev();
extern void _ZN7S1817C32v8Ev();
extern void _ZN7S1817C32v9Ev();
extern void _ZN7S1817C33v10Ev();
extern void _ZN7S1817C33v11Ev();
extern void _ZN7S1817C33v12Ev();
extern void _ZN7S1817C33v13Ev();
extern void _ZN7S1817C12v1Ev();
extern void _ZN7S1817C12v2Ev();
extern void _ZN7S1817C12v3Ev();
extern void _ZN7S1817C12v4Ev();
static  VTBL_ENTRY vtc_S1817C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1817C1[0]),
  (VTBL_ENTRY)&_ZN7S1817C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1817C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1817C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1817C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1817C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1817C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1817C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1817C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1817C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1817C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1817C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1817C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1817C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1817C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1817C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1817C1[];
extern  VTBL_ENTRY _ZTV7S1817C1[];
Class_Descriptor cd_S1817C1 = {  "S1817C1", // class name
  bases_S1817C1, 3,
  &(vtc_S1817C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1817C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1817C1),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21029C3  : virtual S5166C37 , virtual S5166C27 {
  void *s21029c3f0;
  virtual  ~S21029C3(); // _ZN8S21029C3D2Ev
  S21029C3(); // tgen
};
//SIG(-1 S21029C3) C1{ VBC2{ m} VBC3{ m} vd Fp}


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

static void Test_S21029C3()
{
  extern Class_Descriptor cd_S21029C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S21029C3, buf);
    S21029C3 *dp, &lv = *(dp=new (buf) S21029C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21029C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21029C3)");
    check_base_class_offset(lv, (S5166C37*), 0, "S21029C3");
    check_base_class_offset(lv, (S5166C27*), 0, "S21029C3");
    check_field_offset(lv, s21029c3f0, ABISELECT(8,4), "S21029C3.s21029c3f0");
    test_class_info(&lv, &cd_S21029C3);
    dp->~S21029C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21029C3(Test_S21029C3, "S21029C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S21029C3C1Ev();
extern void _ZN8S21029C3D2Ev();
Name_Map name_map_S21029C3[] = {
  NSPAIR(_ZN8S21029C3C1Ev),
  NSPAIR(_ZN8S21029C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
static Base_Class bases_S21029C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S21029C3[];
extern void _ZN8S21029C3D1Ev();
extern void _ZN8S21029C3D0Ev();
static  VTBL_ENTRY vtc_S21029C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21029C3[0]),
  (VTBL_ENTRY)&_ZN8S21029C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21029C3D0Ev,
};
extern VTBL_ENTRY _ZTV8S21029C3[];
static  VTT_ENTRY vtt_S21029C3[] = {
  {&(_ZTV8S21029C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21029C3[];
extern  VTBL_ENTRY _ZTV8S21029C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21029C3[];
Class_Descriptor cd_S21029C3 = {  "S21029C3", // class name
  bases_S21029C3, 2,
  &(vtc_S21029C3[0]), // expected_vtbl_contents
  &(vtt_S21029C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S21029C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21029C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21029C3),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  S21029C2  : virtual S21029C3 {
  virtual  ~S21029C2(); // _ZN8S21029C2D2Ev
  S21029C2(); // tgen
};
//SIG(-1 S21029C2) C1{ VBC2{ VBC3{ m} VBC4{ m} vd Fp} vd}


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

static void Test_S21029C2()
{
  extern Class_Descriptor cd_S21029C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21029C2, buf);
    S21029C2 *dp, &lv = *(dp=new (buf) S21029C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21029C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21029C2)");
    check_base_class_offset(lv, (S5166C37*)(S21029C3*), 0, "S21029C2");
    check_base_class_offset(lv, (S5166C27*)(S21029C3*), 0, "S21029C2");
    check_base_class_offset(lv, (S21029C3*), ABISELECT(8,4), "S21029C2");
    test_class_info(&lv, &cd_S21029C2);
    dp->~S21029C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21029C2(Test_S21029C2, "S21029C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S21029C2C1Ev();
extern void _ZN8S21029C2D2Ev();
Name_Map name_map_S21029C2[] = {
  NSPAIR(_ZN8S21029C2C1Ev),
  NSPAIR(_ZN8S21029C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S21029C3;
extern VTBL_ENTRY _ZTI8S21029C3[];
extern  VTBL_ENTRY _ZTV8S21029C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21029C3[];
static Base_Class bases_S21029C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21029C3,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21029C2[];
extern void _ZN8S21029C2D1Ev();
extern void _ZN8S21029C2D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S21029C2D1Ev,_ZTv0_n20_N8S21029C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21029C2D1Ev,_ZThn4_N8S21029C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21029C2D0Ev,_ZTv0_n20_N8S21029C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21029C2D0Ev,_ZThn4_N8S21029C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21029C2[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21029C2[0]),
  (VTBL_ENTRY)&_ZN8S21029C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21029C2D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21029C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21029C2D1Ev,_ZTv0_n20_N8S21029C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21029C2D0Ev,_ZTv0_n20_N8S21029C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S21029C2[];
extern void _ZN8S21029C3D1Ev();
extern void _ZN8S21029C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21029C3__8S21029C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S21029C3[0]),
  (VTBL_ENTRY)&_ZN8S21029C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21029C3D0Ev,
};
static  VTT_ENTRY vtt_S21029C2[] = {
  {&(_ZTV8S21029C2[5]),  5,14},
  {&(_ZTV8S21029C2[12]),  12,14},
  {&(_tg__ZTV8S21029C3__8S21029C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21029C2[];
extern  VTBL_ENTRY _ZTV8S21029C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21029C2[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21029C2D0Ev,_ZTv0_n20_N8S21029C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21029C2D0Ev,_ZThn4_N8S21029C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21029C2D1Ev,_ZTv0_n20_N8S21029C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21029C2D1Ev,_ZThn4_N8S21029C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21029C2 = {  "S21029C2", // class name
  bases_S21029C2, 3,
  &(vtc_S21029C2[0]), // expected_vtbl_contents
  &(vtt_S21029C2[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S21029C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21029C2),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21029C2),3, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21029C1  : virtual S21029C2 {
  ::S21030C7 s21029c1f0;
  ~S21029C1(); // tgen
  S21029C1(); // tgen
};
//SIG(1 S21029C1) C1{ VBC2{ VBC3{ VBC4{ m} VBC5{ m} vd Fp} vd} FC6{ BC7{ VBC8{ VBC4 VBC5 vd Fp} vd} BC4 BC5 BC9{ BC5 BC8} Fi}}


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

static void Test_S21029C1()
{
  extern Class_Descriptor cd_S21029C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[11];
    init_test(&cd_S21029C1, buf);
    S21029C1 *dp, &lv = *(dp=new (buf) S21029C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S21029C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21029C1)");
    check_base_class_offset(lv, (S5166C37*)(S21029C3*), 0, "S21029C1");
    check_base_class_offset(lv, (S5166C27*)(S21029C3*), 0, "S21029C1");
    check_base_class_offset(lv, (S21029C3*)(S21029C2*), ABISELECT(64,32), "S21029C1");
    check_base_class_offset(lv, (S21029C2*), 0, "S21029C1");
    check_field_offset(lv, s21029c1f0, ABISELECT(8,4), "S21029C1.s21029c1f0");
    test_class_info(&lv, &cd_S21029C1);
    dp->~S21029C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21029C1(Test_S21029C1, "S21029C1", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN8S21029C1C1Ev();
extern void _ZN8S21029C1D1Ev();
Name_Map name_map_S21029C1[] = {
  NSPAIR(_ZN8S21029C1C1Ev),
  NSPAIR(_ZN8S21029C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S5166C27;
extern VTBL_ENTRY _ZTI8S5166C27[];
extern Class_Descriptor cd_S21029C3;
extern VTBL_ENTRY _ZTI8S21029C3[];
extern  VTBL_ENTRY _ZTV8S21029C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21029C3[];
extern Class_Descriptor cd_S21029C2;
extern VTBL_ENTRY _ZTI8S21029C2[];
extern  VTBL_ENTRY _ZTV8S21029C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21029C2[];
static Base_Class bases_S21029C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S5166C27,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21029C3,    ABISELECT(64,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21029C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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 _ZTI8S21029C1[];
extern void _ZN8S21029C1D1Ev();
extern void _ZN8S21029C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S21029C1D1Ev,_ZTv0_n20_N8S21029C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S21029C1D1Ev,_ZThn32_N8S21029C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21029C1D0Ev,_ZTv0_n20_N8S21029C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S21029C1D0Ev,_ZThn32_N8S21029C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21029C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21029C1[0]),
  (VTBL_ENTRY)&_ZN8S21029C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21029C1D0Ev,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21029C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21029C1D1Ev,_ZTv0_n20_N8S21029C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21029C1D0Ev,_ZTv0_n20_N8S21029C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S21029C1[];
extern void _ZN8S21029C2D1Ev();
extern void _ZN8S21029C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21029C2__8S21029C1[] = {
  0,
  0,
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21029C2[0]),
  (VTBL_ENTRY)&_ZN8S21029C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21029C2D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21029C2D1Ev,_ZTv0_n20_N8S21029C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S21029C2D1Ev,_ZThn32_N8S21029C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21029C2D0Ev,_ZTv0_n20_N8S21029C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S21029C2D0Ev,_ZThn32_N8S21029C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21029C3__8S21029C2__8S21029C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21029C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21029C2D1Ev,_ZTv0_n20_N8S21029C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21029C2D0Ev,_ZTv0_n20_N8S21029C2D0Ev),
};
extern void _ZN8S21029C3D1Ev();
extern void _ZN8S21029C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21029C3__8S21029C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21029C3[0]),
  (VTBL_ENTRY)&_ZN8S21029C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21029C3D0Ev,
};
static  VTT_ENTRY vtt_S21029C1[] = {
  {&(_ZTV8S21029C1[7]),  7,16},
  {&(_ZTV8S21029C1[7]),  7,16},
  {&(_ZTV8S21029C1[14]),  14,16},
  {&(_tg__ZTV8S21029C2__8S21029C1[5]),  5,7},
  {&(_tg__ZTV8S21029C3__8S21029C2__8S21029C1[5]),  5,7},
  {&(_tg__ZTV8S21029C3__8S21029C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21029C1[];
extern  VTBL_ENTRY _ZTV8S21029C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21029C1[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21029C2D0Ev,_ZTv0_n20_N8S21029C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21029C2D0Ev,_ZThn32_N8S21029C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21029C2D1Ev,_ZTv0_n20_N8S21029C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21029C2D1Ev,_ZThn32_N8S21029C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21029C1D0Ev,_ZTv0_n20_N8S21029C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21029C1D0Ev,_ZThn32_N8S21029C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21029C1D1Ev,_ZTv0_n20_N8S21029C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21029C1D1Ev,_ZThn32_N8S21029C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21029C1 = {  "S21029C1", // class name
  bases_S21029C1, 4,
  &(vtc_S21029C1[0]), // expected_vtbl_contents
  &(vtt_S21029C1[0]), // expected_vtt_contents
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI8S21029C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21029C1),16, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21029C1),6, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18278C4_nt  {
  int s18278c4f0;
  void *s18278c4f1;
  int s18278c4f2;
};
//SIG(-1 S18278C4_nt) C1{ Fi Fp Fi}



//skip512 S18278C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18278C3  {
  ::S18278C4_nt s18278c3f0;
  ::S8053C10_nt s18278c3f1;
  void  mf18278c3(); // _ZN8S18278C39mf18278c3Ev
};
//SIG(-1 S18278C3) C1{ m FC2{ Fi Fp Fi} FC3{ m Fp Fi FC4{ m}}}


void  S18278C3 ::mf18278c3(){}

static void Test_S18278C3()
{
  {
    init_simple_test("S18278C3");
    S18278C3 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S18278C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18278C3)");
    check_field_offset(lv, s18278c3f0, 0, "S18278C3.s18278c3f0");
    check_field_offset(lv, s18278c3f1, ABISELECT(24,12), "S18278C3.s18278c3f1");
  }
}
static Arrange_To_Call_Me vS18278C3(Test_S18278C3, "S18278C3", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18278C2  {
  void *s18278c2f0;
  ::S18278C3 s18278c2f1;
  void  mf18278c2(); // _ZN8S18278C29mf18278c2Ev
};
//SIG(-1 S18278C2) C1{ m Fp FC2{ m FC3{ Fi Fp Fi} FC4{ m Fp Fi FC5{ m}}}}


void  S18278C2 ::mf18278c2(){}

static void Test_S18278C2()
{
  {
    init_simple_test("S18278C2");
    S18278C2 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S18278C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18278C2)");
    check_field_offset(lv, s18278c2f0, 0, "S18278C2.s18278c2f0");
    check_field_offset(lv, s18278c2f1, ABISELECT(8,4), "S18278C2.s18278c2f1");
  }
}
static Arrange_To_Call_Me vS18278C2(Test_S18278C2, "S18278C2", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18278C1  {
  void *s18278c1f0[3];
  ::S18278C2 s18278c1f1;
  char s18278c1f2[2];
  void  mf18278c1(); // _ZN8S18278C19mf18278c1Ev
};
//SIG(1 S18278C1) C1{ m Fp[3] FC2{ m Fp FC3{ m FC4{ Fi Fp Fi} FC5{ m Fp Fi FC6{ m}}}} Fc[2]}


void  S18278C1 ::mf18278c1(){}

static void Test_S18278C1()
{
  {
    init_simple_test("S18278C1");
    S18278C1 lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S18278C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18278C1)");
    check_field_offset(lv, s18278c1f0, 0, "S18278C1.s18278c1f0");
    check_field_offset(lv, s18278c1f1, ABISELECT(24,12), "S18278C1.s18278c1f1");
    check_field_offset(lv, s18278c1f2, ABISELECT(72,40), "S18278C1.s18278c1f2");
  }
}
static Arrange_To_Call_Me vS18278C1(Test_S18278C1, "S18278C1", ABISELECT(80,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1818C3  : S16496C4_nt {
  virtual void  v5(); // _ZN7S1818C32v5Ev
  virtual void  v6(); // _ZN7S1818C32v6Ev
  virtual void  v7(); // _ZN7S1818C32v7Ev
  virtual void  v8(); // _ZN7S1818C32v8Ev
  virtual void  v9(); // _ZN7S1818C32v9Ev
  virtual void  v10(); // _ZN7S1818C33v10Ev
  virtual void  v11(); // _ZN7S1818C33v11Ev
  virtual void  v12(); // _ZN7S1818C33v12Ev
  ~S1818C3(); // tgen
  S1818C3(); // tgen
};
//SIG(-1 S1818C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8}


void  S1818C3 ::v5(){vfunc_called(this, "_ZN7S1818C32v5Ev");}
void  S1818C3 ::v6(){vfunc_called(this, "_ZN7S1818C32v6Ev");}
void  S1818C3 ::v7(){vfunc_called(this, "_ZN7S1818C32v7Ev");}
void  S1818C3 ::v8(){vfunc_called(this, "_ZN7S1818C32v8Ev");}
void  S1818C3 ::v9(){vfunc_called(this, "_ZN7S1818C32v9Ev");}
void  S1818C3 ::v10(){vfunc_called(this, "_ZN7S1818C33v10Ev");}
void  S1818C3 ::v11(){vfunc_called(this, "_ZN7S1818C33v11Ev");}
void  S1818C3 ::v12(){vfunc_called(this, "_ZN7S1818C33v12Ev");}
S1818C3 ::~S1818C3(){ note_dtor("S1818C3", this);} // tgen
S1818C3 ::S1818C3(){ note_ctor("S1818C3", this);} // tgen

static void Test_S1818C3()
{
  extern Class_Descriptor cd_S1818C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1818C3, buf);
    S1818C3 *dp, &lv = *(dp=new (buf) S1818C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1818C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1818C3)");
    check_base_class_offset(lv, (S16496C4_nt*), 0, "S1818C3");
    test_class_info(&lv, &cd_S1818C3);
    dp->~S1818C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1818C3(Test_S1818C3, "S1818C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1818C3C1Ev();
extern void _ZN7S1818C3D1Ev();
Name_Map name_map_S1818C3[] = {
  NSPAIR(_ZN7S1818C3C1Ev),
  NSPAIR(_ZN7S1818C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
static Base_Class bases_S1818C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1818C3[];
extern void _ZN7S1818C3D1Ev();
extern void _ZN7S1818C3D0Ev();
extern void _ZN7S1818C32v5Ev();
extern void _ZN7S1818C32v6Ev();
extern void _ZN7S1818C32v7Ev();
extern void _ZN7S1818C32v8Ev();
extern void _ZN7S1818C32v9Ev();
extern void _ZN7S1818C33v10Ev();
extern void _ZN7S1818C33v11Ev();
extern void _ZN7S1818C33v12Ev();
static  VTBL_ENTRY vtc_S1818C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1818C3[0]),
  (VTBL_ENTRY)&_ZN7S1818C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1818C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1818C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1818C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1818C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1818C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1818C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1818C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1818C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1818C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S1818C3[];
extern  VTBL_ENTRY _ZTV7S1818C3[];
Class_Descriptor cd_S1818C3 = {  "S1818C3", // class name
  bases_S1818C3, 1,
  &(vtc_S1818C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1818C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1818C3),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  S1818C2  : S1818C3 {
  ~S1818C2(); // tgen
  S1818C2(); // tgen
};
//SIG(-1 S1818C2) C1{ BC2{ BC3{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8}}


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

static void Test_S1818C2()
{
  extern Class_Descriptor cd_S1818C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1818C2, buf);
    S1818C2 *dp, &lv = *(dp=new (buf) S1818C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1818C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1818C2)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1818C3*), 0, "S1818C2");
    check_base_class_offset(lv, (S1818C3*), 0, "S1818C2");
    test_class_info(&lv, &cd_S1818C2);
    dp->~S1818C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1818C2(Test_S1818C2, "S1818C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1818C2C1Ev();
extern void _ZN7S1818C2D1Ev();
Name_Map name_map_S1818C2[] = {
  NSPAIR(_ZN7S1818C2C1Ev),
  NSPAIR(_ZN7S1818C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1818C3;
extern VTBL_ENTRY _ZTI7S1818C3[];
extern  VTBL_ENTRY _ZTV7S1818C3[];
static Base_Class bases_S1818C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1818C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1818C2[];
extern void _ZN7S1818C2D1Ev();
extern void _ZN7S1818C2D0Ev();
extern void _ZN7S1818C32v5Ev();
extern void _ZN7S1818C32v6Ev();
extern void _ZN7S1818C32v7Ev();
extern void _ZN7S1818C32v8Ev();
extern void _ZN7S1818C32v9Ev();
extern void _ZN7S1818C33v10Ev();
extern void _ZN7S1818C33v11Ev();
extern void _ZN7S1818C33v12Ev();
static  VTBL_ENTRY vtc_S1818C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1818C2[0]),
  (VTBL_ENTRY)&_ZN7S1818C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1818C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1818C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1818C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1818C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1818C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1818C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1818C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1818C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1818C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S1818C2[];
extern  VTBL_ENTRY _ZTV7S1818C2[];
Class_Descriptor cd_S1818C2 = {  "S1818C2", // class name
  bases_S1818C2, 2,
  &(vtc_S1818C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1818C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1818C2),12, //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  S1818C1  : S1818C2 {
  virtual void  v1(); // _ZN7S1818C12v1Ev
  virtual void  v2(); // _ZN7S1818C12v2Ev
  virtual void  v3(); // _ZN7S1818C12v3Ev
  virtual void  v4(); // _ZN7S1818C12v4Ev
  ~S1818C1(); // tgen
  S1818C1(); // tgen
};
//SIG(1 S1818C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v5 v6 v7 v8 v9 v10 v11 v12}} v1 v2 v3 v4}


void  S1818C1 ::v1(){vfunc_called(this, "_ZN7S1818C12v1Ev");}
void  S1818C1 ::v2(){vfunc_called(this, "_ZN7S1818C12v2Ev");}
void  S1818C1 ::v3(){vfunc_called(this, "_ZN7S1818C12v3Ev");}
void  S1818C1 ::v4(){vfunc_called(this, "_ZN7S1818C12v4Ev");}
S1818C1 ::~S1818C1(){ note_dtor("S1818C1", this);} // tgen
S1818C1 ::S1818C1(){ note_ctor("S1818C1", this);} // tgen

static void Test_S1818C1()
{
  extern Class_Descriptor cd_S1818C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1818C1, buf);
    S1818C1 *dp, &lv = *(dp=new (buf) S1818C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1818C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1818C1)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1818C3*)(S1818C2*), 0, "S1818C1");
    check_base_class_offset(lv, (S1818C3*)(S1818C2*), 0, "S1818C1");
    check_base_class_offset(lv, (S1818C2*), 0, "S1818C1");
    test_class_info(&lv, &cd_S1818C1);
    dp->~S1818C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1818C1(Test_S1818C1, "S1818C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1818C1C1Ev();
extern void _ZN7S1818C1D1Ev();
Name_Map name_map_S1818C1[] = {
  NSPAIR(_ZN7S1818C1C1Ev),
  NSPAIR(_ZN7S1818C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1818C3;
extern VTBL_ENTRY _ZTI7S1818C3[];
extern  VTBL_ENTRY _ZTV7S1818C3[];
extern Class_Descriptor cd_S1818C2;
extern VTBL_ENTRY _ZTI7S1818C2[];
extern  VTBL_ENTRY _ZTV7S1818C2[];
static Base_Class bases_S1818C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1818C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1818C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1818C1[];
extern void _ZN7S1818C1D1Ev();
extern void _ZN7S1818C1D0Ev();
extern void _ZN7S1818C32v5Ev();
extern void _ZN7S1818C32v6Ev();
extern void _ZN7S1818C32v7Ev();
extern void _ZN7S1818C32v8Ev();
extern void _ZN7S1818C32v9Ev();
extern void _ZN7S1818C33v10Ev();
extern void _ZN7S1818C33v11Ev();
extern void _ZN7S1818C33v12Ev();
extern void _ZN7S1818C12v1Ev();
extern void _ZN7S1818C12v2Ev();
extern void _ZN7S1818C12v3Ev();
extern void _ZN7S1818C12v4Ev();
static  VTBL_ENTRY vtc_S1818C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1818C1[0]),
  (VTBL_ENTRY)&_ZN7S1818C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1818C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1818C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1818C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1818C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1818C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1818C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1818C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1818C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1818C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1818C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1818C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1818C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1818C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1818C1[];
extern  VTBL_ENTRY _ZTV7S1818C1[];
Class_Descriptor cd_S1818C1 = {  "S1818C1", // class name
  bases_S1818C1, 3,
  &(vtc_S1818C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1818C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1818C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1807C3  : S16496C4_nt {
  virtual void  v4(); // _ZN7S1807C32v4Ev
  virtual void  v5(); // _ZN7S1807C32v5Ev
  virtual void  v6(); // _ZN7S1807C32v6Ev
  virtual void  v7(); // _ZN7S1807C32v7Ev
  virtual void  v8(); // _ZN7S1807C32v8Ev
  virtual void  v9(); // _ZN7S1807C32v9Ev
  virtual void  v10(); // _ZN7S1807C33v10Ev
  virtual void  v11(); // _ZN7S1807C33v11Ev
  virtual void  v12(); // _ZN7S1807C33v12Ev
  ~S1807C3(); // tgen
  S1807C3(); // tgen
};
//SIG(-1 S1807C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S1807C3 ::v4(){vfunc_called(this, "_ZN7S1807C32v4Ev");}
void  S1807C3 ::v5(){vfunc_called(this, "_ZN7S1807C32v5Ev");}
void  S1807C3 ::v6(){vfunc_called(this, "_ZN7S1807C32v6Ev");}
void  S1807C3 ::v7(){vfunc_called(this, "_ZN7S1807C32v7Ev");}
void  S1807C3 ::v8(){vfunc_called(this, "_ZN7S1807C32v8Ev");}
void  S1807C3 ::v9(){vfunc_called(this, "_ZN7S1807C32v9Ev");}
void  S1807C3 ::v10(){vfunc_called(this, "_ZN7S1807C33v10Ev");}
void  S1807C3 ::v11(){vfunc_called(this, "_ZN7S1807C33v11Ev");}
void  S1807C3 ::v12(){vfunc_called(this, "_ZN7S1807C33v12Ev");}
S1807C3 ::~S1807C3(){ note_dtor("S1807C3", this);} // tgen
S1807C3 ::S1807C3(){ note_ctor("S1807C3", this);} // tgen

static void Test_S1807C3()
{
  extern Class_Descriptor cd_S1807C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1807C3, buf);
    S1807C3 *dp, &lv = *(dp=new (buf) S1807C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1807C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1807C3)");
    check_base_class_offset(lv, (S16496C4_nt*), 0, "S1807C3");
    test_class_info(&lv, &cd_S1807C3);
    dp->~S1807C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1807C3(Test_S1807C3, "S1807C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1807C3C1Ev();
extern void _ZN7S1807C3D1Ev();
Name_Map name_map_S1807C3[] = {
  NSPAIR(_ZN7S1807C3C1Ev),
  NSPAIR(_ZN7S1807C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
static Base_Class bases_S1807C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1807C3[];
extern void _ZN7S1807C3D1Ev();
extern void _ZN7S1807C3D0Ev();
extern void _ZN7S1807C32v4Ev();
extern void _ZN7S1807C32v5Ev();
extern void _ZN7S1807C32v6Ev();
extern void _ZN7S1807C32v7Ev();
extern void _ZN7S1807C32v8Ev();
extern void _ZN7S1807C32v9Ev();
extern void _ZN7S1807C33v10Ev();
extern void _ZN7S1807C33v11Ev();
extern void _ZN7S1807C33v12Ev();
static  VTBL_ENTRY vtc_S1807C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1807C3[0]),
  (VTBL_ENTRY)&_ZN7S1807C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1807C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1807C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1807C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1807C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1807C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1807C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1807C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1807C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1807C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1807C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S1807C3[];
extern  VTBL_ENTRY _ZTV7S1807C3[];
Class_Descriptor cd_S1807C3 = {  "S1807C3", // class name
  bases_S1807C3, 1,
  &(vtc_S1807C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1807C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1807C3),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1807C2  : S1807C3 {
  ~S1807C2(); // tgen
  S1807C2(); // tgen
};
//SIG(-1 S1807C2) C1{ BC2{ BC3{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9}}


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

static void Test_S1807C2()
{
  extern Class_Descriptor cd_S1807C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1807C2, buf);
    S1807C2 *dp, &lv = *(dp=new (buf) S1807C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1807C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1807C2)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1807C3*), 0, "S1807C2");
    check_base_class_offset(lv, (S1807C3*), 0, "S1807C2");
    test_class_info(&lv, &cd_S1807C2);
    dp->~S1807C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1807C2(Test_S1807C2, "S1807C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1807C2C1Ev();
extern void _ZN7S1807C2D1Ev();
Name_Map name_map_S1807C2[] = {
  NSPAIR(_ZN7S1807C2C1Ev),
  NSPAIR(_ZN7S1807C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1807C3;
extern VTBL_ENTRY _ZTI7S1807C3[];
extern  VTBL_ENTRY _ZTV7S1807C3[];
static Base_Class bases_S1807C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1807C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1807C2[];
extern void _ZN7S1807C2D1Ev();
extern void _ZN7S1807C2D0Ev();
extern void _ZN7S1807C32v4Ev();
extern void _ZN7S1807C32v5Ev();
extern void _ZN7S1807C32v6Ev();
extern void _ZN7S1807C32v7Ev();
extern void _ZN7S1807C32v8Ev();
extern void _ZN7S1807C32v9Ev();
extern void _ZN7S1807C33v10Ev();
extern void _ZN7S1807C33v11Ev();
extern void _ZN7S1807C33v12Ev();
static  VTBL_ENTRY vtc_S1807C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1807C2[0]),
  (VTBL_ENTRY)&_ZN7S1807C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1807C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1807C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1807C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1807C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1807C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1807C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1807C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1807C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1807C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1807C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S1807C2[];
extern  VTBL_ENTRY _ZTV7S1807C2[];
Class_Descriptor cd_S1807C2 = {  "S1807C2", // class name
  bases_S1807C2, 2,
  &(vtc_S1807C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1807C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1807C2),13, //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  S1807C1  : S1807C2 {
  virtual void  v1(); // _ZN7S1807C12v1Ev
  virtual void  v2(); // _ZN7S1807C12v2Ev
  virtual void  v3(); // _ZN7S1807C12v3Ev
  ~S1807C1(); // tgen
  S1807C1(); // tgen
};
//SIG(1 S1807C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v4 v5 v6 v7 v8 v9 v10 v11 v12}} v1 v2 v3}


void  S1807C1 ::v1(){vfunc_called(this, "_ZN7S1807C12v1Ev");}
void  S1807C1 ::v2(){vfunc_called(this, "_ZN7S1807C12v2Ev");}
void  S1807C1 ::v3(){vfunc_called(this, "_ZN7S1807C12v3Ev");}
S1807C1 ::~S1807C1(){ note_dtor("S1807C1", this);} // tgen
S1807C1 ::S1807C1(){ note_ctor("S1807C1", this);} // tgen

static void Test_S1807C1()
{
  extern Class_Descriptor cd_S1807C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1807C1, buf);
    S1807C1 *dp, &lv = *(dp=new (buf) S1807C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1807C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1807C1)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1807C3*)(S1807C2*), 0, "S1807C1");
    check_base_class_offset(lv, (S1807C3*)(S1807C2*), 0, "S1807C1");
    check_base_class_offset(lv, (S1807C2*), 0, "S1807C1");
    test_class_info(&lv, &cd_S1807C1);
    dp->~S1807C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1807C1(Test_S1807C1, "S1807C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1807C1C1Ev();
extern void _ZN7S1807C1D1Ev();
Name_Map name_map_S1807C1[] = {
  NSPAIR(_ZN7S1807C1C1Ev),
  NSPAIR(_ZN7S1807C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1807C3;
extern VTBL_ENTRY _ZTI7S1807C3[];
extern  VTBL_ENTRY _ZTV7S1807C3[];
extern Class_Descriptor cd_S1807C2;
extern VTBL_ENTRY _ZTI7S1807C2[];
extern  VTBL_ENTRY _ZTV7S1807C2[];
static Base_Class bases_S1807C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1807C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1807C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1807C1[];
extern void _ZN7S1807C1D1Ev();
extern void _ZN7S1807C1D0Ev();
extern void _ZN7S1807C32v4Ev();
extern void _ZN7S1807C32v5Ev();
extern void _ZN7S1807C32v6Ev();
extern void _ZN7S1807C32v7Ev();
extern void _ZN7S1807C32v8Ev();
extern void _ZN7S1807C32v9Ev();
extern void _ZN7S1807C33v10Ev();
extern void _ZN7S1807C33v11Ev();
extern void _ZN7S1807C33v12Ev();
extern void _ZN7S1807C12v1Ev();
extern void _ZN7S1807C12v2Ev();
extern void _ZN7S1807C12v3Ev();
static  VTBL_ENTRY vtc_S1807C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1807C1[0]),
  (VTBL_ENTRY)&_ZN7S1807C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1807C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1807C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1807C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1807C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1807C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1807C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1807C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1807C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1807C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1807C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1807C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1807C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1807C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1807C1[];
extern  VTBL_ENTRY _ZTV7S1807C1[];
Class_Descriptor cd_S1807C1 = {  "S1807C1", // class name
  bases_S1807C1, 3,
  &(vtc_S1807C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1807C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1807C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21416C4  {
  ::S8053C3_nt s21416c4f0;
  char s21416c4f1[10];
  void  mf21416c4(); // _ZN8S21416C49mf21416c4Ev
  virtual  ~S21416C4(); // _ZN8S21416C4D1Ev
  S21416C4(); // tgen
};
//SIG(-1 S21416C4) C1{ vd m FC2{ m FC3{ vd m FL Fc} FC3} Fc[10]}


void  S21416C4 ::mf21416c4(){}
 S21416C4 ::~S21416C4(){ note_dtor("S21416C4", this);}
S21416C4 ::S21416C4(){ note_ctor("S21416C4", this);} // tgen

static void Test_S21416C4()
{
  extern Class_Descriptor cd_S21416C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S21416C4, buf);
    S21416C4 *dp, &lv = *(dp=new (buf) S21416C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S21416C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21416C4)");
    check_field_offset(lv, s21416c4f0, ABISELECT(8,4), "S21416C4.s21416c4f0");
    check_field_offset(lv, s21416c4f1, ABISELECT(56,36), "S21416C4.s21416c4f1");
    test_class_info(&lv, &cd_S21416C4);
    dp->~S21416C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21416C4(Test_S21416C4, "S21416C4", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN8S21416C4C1Ev();
extern void _ZN8S21416C4D1Ev();
Name_Map name_map_S21416C4[] = {
  NSPAIR(_ZN8S21416C4C1Ev),
  NSPAIR(_ZN8S21416C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21416C4[];
extern void _ZN8S21416C4D1Ev();
extern void _ZN8S21416C4D0Ev();
static  VTBL_ENTRY vtc_S21416C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21416C4[0]),
  (VTBL_ENTRY)&_ZN8S21416C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21416C4D0Ev,
};
extern VTBL_ENTRY _ZTI8S21416C4[];
extern  VTBL_ENTRY _ZTV8S21416C4[];
Class_Descriptor cd_S21416C4 = {  "S21416C4", // class name
  0,0,//no base classes
  &(vtc_S21416C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI8S21416C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21416C4),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  S21416C1  {
  ::S8053C3_nt s21416c1f0;
  int s21416c1f1[4];
  void *s21416c1f2;
  ::S21416C4 s21416c1f3;
  void  mf21416c1(); // _ZN8S21416C19mf21416c1Ev
  virtual  ~S21416C1(); // _ZN8S21416C1D1Ev
  S21416C1(); // tgen
};
//SIG(1 S21416C1) C1{ vd m FC2{ m FC3{ vd m FL Fc} FC3} Fi[4] Fp FC4{ vd m FC2 Fc[10]}}


void  S21416C1 ::mf21416c1(){}
 S21416C1 ::~S21416C1(){ note_dtor("S21416C1", this);}
S21416C1 ::S21416C1(){ note_ctor("S21416C1", this);} // tgen

static void Test_S21416C1()
{
  extern Class_Descriptor cd_S21416C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,27)];
    init_test(&cd_S21416C1, buf);
    S21416C1 *dp, &lv = *(dp=new (buf) S21416C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,104), "sizeof(S21416C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21416C1)");
    check_field_offset(lv, s21416c1f0, ABISELECT(8,4), "S21416C1.s21416c1f0");
    check_field_offset(lv, s21416c1f1, ABISELECT(56,36), "S21416C1.s21416c1f1");
    check_field_offset(lv, s21416c1f2, ABISELECT(72,52), "S21416C1.s21416c1f2");
    check_field_offset(lv, s21416c1f3, ABISELECT(80,56), "S21416C1.s21416c1f3");
    test_class_info(&lv, &cd_S21416C1);
    dp->~S21416C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21416C1(Test_S21416C1, "S21416C1", ABISELECT(152,104));

#else // __cplusplus

extern void _ZN8S21416C1C1Ev();
extern void _ZN8S21416C1D1Ev();
Name_Map name_map_S21416C1[] = {
  NSPAIR(_ZN8S21416C1C1Ev),
  NSPAIR(_ZN8S21416C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21416C1[];
extern void _ZN8S21416C1D1Ev();
extern void _ZN8S21416C1D0Ev();
static  VTBL_ENTRY vtc_S21416C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21416C1[0]),
  (VTBL_ENTRY)&_ZN8S21416C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21416C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21416C1[];
extern  VTBL_ENTRY _ZTV8S21416C1[];
Class_Descriptor cd_S21416C1 = {  "S21416C1", // class name
  0,0,//no base classes
  &(vtc_S21416C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,104), // object size
  NSPAIRA(_ZTI8S21416C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21416C1),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  S9729C2  {
  ::S8053C10_nt s9729c2f0;
  int s9729c2f1[2];
  char s9729c2f2;
  virtual  ~S9729C2(); // _ZN7S9729C2D1Ev
  virtual void  v4(); // _ZN7S9729C22v4Ev
  virtual void  v5(); // _ZN7S9729C22v5Ev
  virtual void  v6(); // _ZN7S9729C22v6Ev
  S9729C2(); // tgen
};
//SIG(-1 S9729C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9729C2 ::~S9729C2(){ note_dtor("S9729C2", this);}
void  S9729C2 ::v4(){vfunc_called(this, "_ZN7S9729C22v4Ev");}
void  S9729C2 ::v5(){vfunc_called(this, "_ZN7S9729C22v5Ev");}
void  S9729C2 ::v6(){vfunc_called(this, "_ZN7S9729C22v6Ev");}
S9729C2 ::S9729C2(){ note_ctor("S9729C2", this);} // tgen

static void Test_S9729C2()
{
  extern Class_Descriptor cd_S9729C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9729C2, buf);
    S9729C2 *dp, &lv = *(dp=new (buf) S9729C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9729C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9729C2)");
    check_field_offset(lv, s9729c2f0, ABISELECT(8,4), "S9729C2.s9729c2f0");
    check_field_offset(lv, s9729c2f1, ABISELECT(24,16), "S9729C2.s9729c2f1");
    check_field_offset(lv, s9729c2f2, ABISELECT(32,24), "S9729C2.s9729c2f2");
    test_class_info(&lv, &cd_S9729C2);
    dp->~S9729C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9729C2(Test_S9729C2, "S9729C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9729C2C1Ev();
extern void _ZN7S9729C2D1Ev();
Name_Map name_map_S9729C2[] = {
  NSPAIR(_ZN7S9729C2C1Ev),
  NSPAIR(_ZN7S9729C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9729C2[];
extern void _ZN7S9729C2D1Ev();
extern void _ZN7S9729C2D0Ev();
extern void _ZN7S9729C22v4Ev();
extern void _ZN7S9729C22v5Ev();
extern void _ZN7S9729C22v6Ev();
static  VTBL_ENTRY vtc_S9729C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9729C2[0]),
  (VTBL_ENTRY)&_ZN7S9729C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9729C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9729C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9729C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9729C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9729C2[];
extern  VTBL_ENTRY _ZTV7S9729C2[];
Class_Descriptor cd_S9729C2 = {  "S9729C2", // class name
  0,0,//no base classes
  &(vtc_S9729C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9729C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9729C2),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  S9729C1  : S9729C2 {
  void *s9729c1f0;
  virtual  ~S9729C1(); // _ZN7S9729C1D1Ev
  virtual void  v1(); // _ZN7S9729C12v1Ev
  virtual void  v2(); // _ZN7S9729C12v2Ev
  virtual void  v3(); // _ZN7S9729C12v3Ev
  S9729C1(); // tgen
};
//SIG(1 S9729C1) C1{ BC2{ vd v4 v5 v6 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 Fp}


 S9729C1 ::~S9729C1(){ note_dtor("S9729C1", this);}
void  S9729C1 ::v1(){vfunc_called(this, "_ZN7S9729C12v1Ev");}
void  S9729C1 ::v2(){vfunc_called(this, "_ZN7S9729C12v2Ev");}
void  S9729C1 ::v3(){vfunc_called(this, "_ZN7S9729C12v3Ev");}
S9729C1 ::S9729C1(){ note_ctor("S9729C1", this);} // tgen

static void Test_S9729C1()
{
  extern Class_Descriptor cd_S9729C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S9729C1, buf);
    S9729C1 *dp, &lv = *(dp=new (buf) S9729C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S9729C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9729C1)");
    check_base_class_offset(lv, (S9729C2*), 0, "S9729C1");
    check_field_offset(lv, s9729c1f0, ABISELECT(40,28), "S9729C1.s9729c1f0");
    test_class_info(&lv, &cd_S9729C1);
    dp->~S9729C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9729C1(Test_S9729C1, "S9729C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S9729C1C1Ev();
extern void _ZN7S9729C1D1Ev();
Name_Map name_map_S9729C1[] = {
  NSPAIR(_ZN7S9729C1C1Ev),
  NSPAIR(_ZN7S9729C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9729C2;
extern VTBL_ENTRY _ZTI7S9729C2[];
extern  VTBL_ENTRY _ZTV7S9729C2[];
static Base_Class bases_S9729C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9729C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9729C1[];
extern void _ZN7S9729C1D1Ev();
extern void _ZN7S9729C1D0Ev();
extern void _ZN7S9729C22v4Ev();
extern void _ZN7S9729C22v5Ev();
extern void _ZN7S9729C22v6Ev();
extern void _ZN7S9729C12v1Ev();
extern void _ZN7S9729C12v2Ev();
extern void _ZN7S9729C12v3Ev();
static  VTBL_ENTRY vtc_S9729C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9729C1[0]),
  (VTBL_ENTRY)&_ZN7S9729C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9729C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9729C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9729C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9729C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9729C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9729C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9729C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9729C1[];
extern  VTBL_ENTRY _ZTV7S9729C1[];
Class_Descriptor cd_S9729C1 = {  "S9729C1", // class name
  bases_S9729C1, 1,
  &(vtc_S9729C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S9729C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9729C1),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  S1819C3  : S16496C4_nt {
  virtual void  v5(); // _ZN7S1819C32v5Ev
  virtual void  v6(); // _ZN7S1819C32v6Ev
  virtual void  v7(); // _ZN7S1819C32v7Ev
  virtual void  v8(); // _ZN7S1819C32v8Ev
  virtual void  v9(); // _ZN7S1819C32v9Ev
  virtual void  v10(); // _ZN7S1819C33v10Ev
  virtual void  v11(); // _ZN7S1819C33v11Ev
  ~S1819C3(); // tgen
  S1819C3(); // tgen
};
//SIG(-1 S1819C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7}


void  S1819C3 ::v5(){vfunc_called(this, "_ZN7S1819C32v5Ev");}
void  S1819C3 ::v6(){vfunc_called(this, "_ZN7S1819C32v6Ev");}
void  S1819C3 ::v7(){vfunc_called(this, "_ZN7S1819C32v7Ev");}
void  S1819C3 ::v8(){vfunc_called(this, "_ZN7S1819C32v8Ev");}
void  S1819C3 ::v9(){vfunc_called(this, "_ZN7S1819C32v9Ev");}
void  S1819C3 ::v10(){vfunc_called(this, "_ZN7S1819C33v10Ev");}
void  S1819C3 ::v11(){vfunc_called(this, "_ZN7S1819C33v11Ev");}
S1819C3 ::~S1819C3(){ note_dtor("S1819C3", this);} // tgen
S1819C3 ::S1819C3(){ note_ctor("S1819C3", this);} // tgen

static void Test_S1819C3()
{
  extern Class_Descriptor cd_S1819C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1819C3, buf);
    S1819C3 *dp, &lv = *(dp=new (buf) S1819C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1819C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1819C3)");
    check_base_class_offset(lv, (S16496C4_nt*), 0, "S1819C3");
    test_class_info(&lv, &cd_S1819C3);
    dp->~S1819C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1819C3(Test_S1819C3, "S1819C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1819C3C1Ev();
extern void _ZN7S1819C3D1Ev();
Name_Map name_map_S1819C3[] = {
  NSPAIR(_ZN7S1819C3C1Ev),
  NSPAIR(_ZN7S1819C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
static Base_Class bases_S1819C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1819C3[];
extern void _ZN7S1819C3D1Ev();
extern void _ZN7S1819C3D0Ev();
extern void _ZN7S1819C32v5Ev();
extern void _ZN7S1819C32v6Ev();
extern void _ZN7S1819C32v7Ev();
extern void _ZN7S1819C32v8Ev();
extern void _ZN7S1819C32v9Ev();
extern void _ZN7S1819C33v10Ev();
extern void _ZN7S1819C33v11Ev();
static  VTBL_ENTRY vtc_S1819C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1819C3[0]),
  (VTBL_ENTRY)&_ZN7S1819C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1819C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1819C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1819C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1819C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1819C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1819C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1819C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1819C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1819C3[];
extern  VTBL_ENTRY _ZTV7S1819C3[];
Class_Descriptor cd_S1819C3 = {  "S1819C3", // class name
  bases_S1819C3, 1,
  &(vtc_S1819C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1819C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1819C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1819C2  : S1819C3 {
  ~S1819C2(); // tgen
  S1819C2(); // tgen
};
//SIG(-1 S1819C2) C1{ BC2{ BC3{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7}}


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

static void Test_S1819C2()
{
  extern Class_Descriptor cd_S1819C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1819C2, buf);
    S1819C2 *dp, &lv = *(dp=new (buf) S1819C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1819C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1819C2)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1819C3*), 0, "S1819C2");
    check_base_class_offset(lv, (S1819C3*), 0, "S1819C2");
    test_class_info(&lv, &cd_S1819C2);
    dp->~S1819C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1819C2(Test_S1819C2, "S1819C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1819C2C1Ev();
extern void _ZN7S1819C2D1Ev();
Name_Map name_map_S1819C2[] = {
  NSPAIR(_ZN7S1819C2C1Ev),
  NSPAIR(_ZN7S1819C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1819C3;
extern VTBL_ENTRY _ZTI7S1819C3[];
extern  VTBL_ENTRY _ZTV7S1819C3[];
static Base_Class bases_S1819C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1819C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1819C2[];
extern void _ZN7S1819C2D1Ev();
extern void _ZN7S1819C2D0Ev();
extern void _ZN7S1819C32v5Ev();
extern void _ZN7S1819C32v6Ev();
extern void _ZN7S1819C32v7Ev();
extern void _ZN7S1819C32v8Ev();
extern void _ZN7S1819C32v9Ev();
extern void _ZN7S1819C33v10Ev();
extern void _ZN7S1819C33v11Ev();
static  VTBL_ENTRY vtc_S1819C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1819C2[0]),
  (VTBL_ENTRY)&_ZN7S1819C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1819C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1819C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1819C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1819C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1819C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1819C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1819C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1819C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1819C2[];
extern  VTBL_ENTRY _ZTV7S1819C2[];
Class_Descriptor cd_S1819C2 = {  "S1819C2", // class name
  bases_S1819C2, 2,
  &(vtc_S1819C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1819C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1819C2),11, //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  S1819C1  : S1819C2 {
  virtual void  v1(); // _ZN7S1819C12v1Ev
  virtual void  v2(); // _ZN7S1819C12v2Ev
  virtual void  v3(); // _ZN7S1819C12v3Ev
  virtual void  v4(); // _ZN7S1819C12v4Ev
  ~S1819C1(); // tgen
  S1819C1(); // tgen
};
//SIG(1 S1819C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v5 v6 v7 v8 v9 v10 v11}} v1 v2 v3 v4}


void  S1819C1 ::v1(){vfunc_called(this, "_ZN7S1819C12v1Ev");}
void  S1819C1 ::v2(){vfunc_called(this, "_ZN7S1819C12v2Ev");}
void  S1819C1 ::v3(){vfunc_called(this, "_ZN7S1819C12v3Ev");}
void  S1819C1 ::v4(){vfunc_called(this, "_ZN7S1819C12v4Ev");}
S1819C1 ::~S1819C1(){ note_dtor("S1819C1", this);} // tgen
S1819C1 ::S1819C1(){ note_ctor("S1819C1", this);} // tgen

static void Test_S1819C1()
{
  extern Class_Descriptor cd_S1819C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1819C1, buf);
    S1819C1 *dp, &lv = *(dp=new (buf) S1819C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1819C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1819C1)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1819C3*)(S1819C2*), 0, "S1819C1");
    check_base_class_offset(lv, (S1819C3*)(S1819C2*), 0, "S1819C1");
    check_base_class_offset(lv, (S1819C2*), 0, "S1819C1");
    test_class_info(&lv, &cd_S1819C1);
    dp->~S1819C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1819C1(Test_S1819C1, "S1819C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1819C1C1Ev();
extern void _ZN7S1819C1D1Ev();
Name_Map name_map_S1819C1[] = {
  NSPAIR(_ZN7S1819C1C1Ev),
  NSPAIR(_ZN7S1819C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1819C3;
extern VTBL_ENTRY _ZTI7S1819C3[];
extern  VTBL_ENTRY _ZTV7S1819C3[];
extern Class_Descriptor cd_S1819C2;
extern VTBL_ENTRY _ZTI7S1819C2[];
extern  VTBL_ENTRY _ZTV7S1819C2[];
static Base_Class bases_S1819C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1819C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1819C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1819C1[];
extern void _ZN7S1819C1D1Ev();
extern void _ZN7S1819C1D0Ev();
extern void _ZN7S1819C32v5Ev();
extern void _ZN7S1819C32v6Ev();
extern void _ZN7S1819C32v7Ev();
extern void _ZN7S1819C32v8Ev();
extern void _ZN7S1819C32v9Ev();
extern void _ZN7S1819C33v10Ev();
extern void _ZN7S1819C33v11Ev();
extern void _ZN7S1819C12v1Ev();
extern void _ZN7S1819C12v2Ev();
extern void _ZN7S1819C12v3Ev();
extern void _ZN7S1819C12v4Ev();
static  VTBL_ENTRY vtc_S1819C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1819C1[0]),
  (VTBL_ENTRY)&_ZN7S1819C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1819C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1819C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1819C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1819C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1819C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1819C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1819C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1819C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1819C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1819C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1819C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1819C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1819C1[];
extern  VTBL_ENTRY _ZTV7S1819C1[];
Class_Descriptor cd_S1819C1 = {  "S1819C1", // class name
  bases_S1819C1, 3,
  &(vtc_S1819C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1819C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1819C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1796C3  : S16496C4_nt {
  virtual void  v3(); // _ZN7S1796C32v3Ev
  virtual void  v4(); // _ZN7S1796C32v4Ev
  virtual void  v5(); // _ZN7S1796C32v5Ev
  virtual void  v6(); // _ZN7S1796C32v6Ev
  virtual void  v7(); // _ZN7S1796C32v7Ev
  virtual void  v8(); // _ZN7S1796C32v8Ev
  virtual void  v9(); // _ZN7S1796C32v9Ev
  virtual void  v10(); // _ZN7S1796C33v10Ev
  virtual void  v11(); // _ZN7S1796C33v11Ev
  ~S1796C3(); // tgen
  S1796C3(); // tgen
};
//SIG(-1 S1796C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S1796C3 ::v3(){vfunc_called(this, "_ZN7S1796C32v3Ev");}
void  S1796C3 ::v4(){vfunc_called(this, "_ZN7S1796C32v4Ev");}
void  S1796C3 ::v5(){vfunc_called(this, "_ZN7S1796C32v5Ev");}
void  S1796C3 ::v6(){vfunc_called(this, "_ZN7S1796C32v6Ev");}
void  S1796C3 ::v7(){vfunc_called(this, "_ZN7S1796C32v7Ev");}
void  S1796C3 ::v8(){vfunc_called(this, "_ZN7S1796C32v8Ev");}
void  S1796C3 ::v9(){vfunc_called(this, "_ZN7S1796C32v9Ev");}
void  S1796C3 ::v10(){vfunc_called(this, "_ZN7S1796C33v10Ev");}
void  S1796C3 ::v11(){vfunc_called(this, "_ZN7S1796C33v11Ev");}
S1796C3 ::~S1796C3(){ note_dtor("S1796C3", this);} // tgen
S1796C3 ::S1796C3(){ note_ctor("S1796C3", this);} // tgen

static void Test_S1796C3()
{
  extern Class_Descriptor cd_S1796C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1796C3, buf);
    S1796C3 *dp, &lv = *(dp=new (buf) S1796C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1796C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1796C3)");
    check_base_class_offset(lv, (S16496C4_nt*), 0, "S1796C3");
    test_class_info(&lv, &cd_S1796C3);
    dp->~S1796C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1796C3(Test_S1796C3, "S1796C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1796C3C1Ev();
extern void _ZN7S1796C3D1Ev();
Name_Map name_map_S1796C3[] = {
  NSPAIR(_ZN7S1796C3C1Ev),
  NSPAIR(_ZN7S1796C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
static Base_Class bases_S1796C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1796C3[];
extern void _ZN7S1796C3D1Ev();
extern void _ZN7S1796C3D0Ev();
extern void _ZN7S1796C32v3Ev();
extern void _ZN7S1796C32v4Ev();
extern void _ZN7S1796C32v5Ev();
extern void _ZN7S1796C32v6Ev();
extern void _ZN7S1796C32v7Ev();
extern void _ZN7S1796C32v8Ev();
extern void _ZN7S1796C32v9Ev();
extern void _ZN7S1796C33v10Ev();
extern void _ZN7S1796C33v11Ev();
static  VTBL_ENTRY vtc_S1796C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1796C3[0]),
  (VTBL_ENTRY)&_ZN7S1796C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1796C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1796C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1796C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1796C3[];
extern  VTBL_ENTRY _ZTV7S1796C3[];
Class_Descriptor cd_S1796C3 = {  "S1796C3", // class name
  bases_S1796C3, 1,
  &(vtc_S1796C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1796C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1796C3),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1796C2  : S1796C3 {
  ~S1796C2(); // tgen
  S1796C2(); // tgen
};
//SIG(-1 S1796C2) C1{ BC2{ BC3{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9}}


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

static void Test_S1796C2()
{
  extern Class_Descriptor cd_S1796C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1796C2, buf);
    S1796C2 *dp, &lv = *(dp=new (buf) S1796C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1796C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1796C2)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1796C3*), 0, "S1796C2");
    check_base_class_offset(lv, (S1796C3*), 0, "S1796C2");
    test_class_info(&lv, &cd_S1796C2);
    dp->~S1796C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1796C2(Test_S1796C2, "S1796C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1796C2C1Ev();
extern void _ZN7S1796C2D1Ev();
Name_Map name_map_S1796C2[] = {
  NSPAIR(_ZN7S1796C2C1Ev),
  NSPAIR(_ZN7S1796C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1796C3;
extern VTBL_ENTRY _ZTI7S1796C3[];
extern  VTBL_ENTRY _ZTV7S1796C3[];
static Base_Class bases_S1796C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1796C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1796C2[];
extern void _ZN7S1796C2D1Ev();
extern void _ZN7S1796C2D0Ev();
extern void _ZN7S1796C32v3Ev();
extern void _ZN7S1796C32v4Ev();
extern void _ZN7S1796C32v5Ev();
extern void _ZN7S1796C32v6Ev();
extern void _ZN7S1796C32v7Ev();
extern void _ZN7S1796C32v8Ev();
extern void _ZN7S1796C32v9Ev();
extern void _ZN7S1796C33v10Ev();
extern void _ZN7S1796C33v11Ev();
static  VTBL_ENTRY vtc_S1796C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1796C2[0]),
  (VTBL_ENTRY)&_ZN7S1796C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1796C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1796C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1796C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1796C2[];
extern  VTBL_ENTRY _ZTV7S1796C2[];
Class_Descriptor cd_S1796C2 = {  "S1796C2", // class name
  bases_S1796C2, 2,
  &(vtc_S1796C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1796C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1796C2),13, //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  S1796C1  : S1796C2 {
  virtual void  v1(); // _ZN7S1796C12v1Ev
  virtual void  v2(); // _ZN7S1796C12v2Ev
  ~S1796C1(); // tgen
  S1796C1(); // tgen
};
//SIG(1 S1796C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v3 v4 v5 v6 v7 v8 v9 v10 v11}} v1 v2}


void  S1796C1 ::v1(){vfunc_called(this, "_ZN7S1796C12v1Ev");}
void  S1796C1 ::v2(){vfunc_called(this, "_ZN7S1796C12v2Ev");}
S1796C1 ::~S1796C1(){ note_dtor("S1796C1", this);} // tgen
S1796C1 ::S1796C1(){ note_ctor("S1796C1", this);} // tgen

static void Test_S1796C1()
{
  extern Class_Descriptor cd_S1796C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1796C1, buf);
    S1796C1 *dp, &lv = *(dp=new (buf) S1796C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1796C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1796C1)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1796C3*)(S1796C2*), 0, "S1796C1");
    check_base_class_offset(lv, (S1796C3*)(S1796C2*), 0, "S1796C1");
    check_base_class_offset(lv, (S1796C2*), 0, "S1796C1");
    test_class_info(&lv, &cd_S1796C1);
    dp->~S1796C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1796C1(Test_S1796C1, "S1796C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1796C1C1Ev();
extern void _ZN7S1796C1D1Ev();
Name_Map name_map_S1796C1[] = {
  NSPAIR(_ZN7S1796C1C1Ev),
  NSPAIR(_ZN7S1796C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1796C3;
extern VTBL_ENTRY _ZTI7S1796C3[];
extern  VTBL_ENTRY _ZTV7S1796C3[];
extern Class_Descriptor cd_S1796C2;
extern VTBL_ENTRY _ZTI7S1796C2[];
extern  VTBL_ENTRY _ZTV7S1796C2[];
static Base_Class bases_S1796C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1796C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1796C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1796C1[];
extern void _ZN7S1796C1D1Ev();
extern void _ZN7S1796C1D0Ev();
extern void _ZN7S1796C32v3Ev();
extern void _ZN7S1796C32v4Ev();
extern void _ZN7S1796C32v5Ev();
extern void _ZN7S1796C32v6Ev();
extern void _ZN7S1796C32v7Ev();
extern void _ZN7S1796C32v8Ev();
extern void _ZN7S1796C32v9Ev();
extern void _ZN7S1796C33v10Ev();
extern void _ZN7S1796C33v11Ev();
extern void _ZN7S1796C12v1Ev();
extern void _ZN7S1796C12v2Ev();
static  VTBL_ENTRY vtc_S1796C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1796C1[0]),
  (VTBL_ENTRY)&_ZN7S1796C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1796C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1796C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1796C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1796C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1796C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1796C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1796C1[];
extern  VTBL_ENTRY _ZTV7S1796C1[];
Class_Descriptor cd_S1796C1 = {  "S1796C1", // class name
  bases_S1796C1, 3,
  &(vtc_S1796C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1796C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1796C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15490C3  {
  ::S2355C13_nt s15490c3f0;
  ::S1159C5_nt s15490c3f1;
  virtual  ~S15490C3(); // _ZN8S15490C3D1Ev
  virtual void  v3(); // _ZN8S15490C32v3Ev
  virtual void  v4(); // _ZN8S15490C32v4Ev
  virtual void  v5(); // _ZN8S15490C32v5Ev
  virtual void  v6(); // _ZN8S15490C32v6Ev
  S15490C3(); // tgen
};
//SIG(-1 S15490C3) C1{ vd v1 v2 v3 v4 FC2{ m FL[4]} FC3{ BC4{ m} Fi}}


 S15490C3 ::~S15490C3(){ note_dtor("S15490C3", this);}
void  S15490C3 ::v3(){vfunc_called(this, "_ZN8S15490C32v3Ev");}
void  S15490C3 ::v4(){vfunc_called(this, "_ZN8S15490C32v4Ev");}
void  S15490C3 ::v5(){vfunc_called(this, "_ZN8S15490C32v5Ev");}
void  S15490C3 ::v6(){vfunc_called(this, "_ZN8S15490C32v6Ev");}
S15490C3 ::S15490C3(){ note_ctor("S15490C3", this);} // tgen

static void Test_S15490C3()
{
  extern Class_Descriptor cd_S15490C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S15490C3, buf);
    S15490C3 *dp, &lv = *(dp=new (buf) S15490C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S15490C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15490C3)");
    check_field_offset(lv, s15490c3f0, ABISELECT(8,4), "S15490C3.s15490c3f0");
    check_field_offset(lv, s15490c3f1, ABISELECT(40,36), "S15490C3.s15490c3f1");
    test_class_info(&lv, &cd_S15490C3);
    dp->~S15490C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15490C3(Test_S15490C3, "S15490C3", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN8S15490C3C1Ev();
extern void _ZN8S15490C3D1Ev();
Name_Map name_map_S15490C3[] = {
  NSPAIR(_ZN8S15490C3C1Ev),
  NSPAIR(_ZN8S15490C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S15490C3[];
extern void _ZN8S15490C3D1Ev();
extern void _ZN8S15490C3D0Ev();
extern void _ZN8S15490C32v3Ev();
extern void _ZN8S15490C32v4Ev();
extern void _ZN8S15490C32v5Ev();
extern void _ZN8S15490C32v6Ev();
static  VTBL_ENTRY vtc_S15490C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S15490C3[0]),
  (VTBL_ENTRY)&_ZN8S15490C3D1Ev,
  (VTBL_ENTRY)&_ZN8S15490C3D0Ev,
  (VTBL_ENTRY)&_ZN8S15490C32v3Ev,
  (VTBL_ENTRY)&_ZN8S15490C32v4Ev,
  (VTBL_ENTRY)&_ZN8S15490C32v5Ev,
  (VTBL_ENTRY)&_ZN8S15490C32v6Ev,
};
extern VTBL_ENTRY _ZTI8S15490C3[];
extern  VTBL_ENTRY _ZTV8S15490C3[];
Class_Descriptor cd_S15490C3 = {  "S15490C3", // class name
  0,0,//no base classes
  &(vtc_S15490C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI8S15490C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S15490C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15490C2  : S15490C3 {
  virtual void  v1(); // _ZN8S15490C22v1Ev
  virtual void  v2(); // _ZN8S15490C22v2Ev
  ~S15490C2(); // tgen
  S15490C2(); // tgen
};
//SIG(-1 S15490C2) C1{ BC2{ vd v3 v4 v5 v6 FC3{ m FL[4]} FC4{ BC5{ m} Fi}} v1 v2}


void  S15490C2 ::v1(){vfunc_called(this, "_ZN8S15490C22v1Ev");}
void  S15490C2 ::v2(){vfunc_called(this, "_ZN8S15490C22v2Ev");}
S15490C2 ::~S15490C2(){ note_dtor("S15490C2", this);} // tgen
S15490C2 ::S15490C2(){ note_ctor("S15490C2", this);} // tgen

static void Test_S15490C2()
{
  extern Class_Descriptor cd_S15490C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S15490C2, buf);
    S15490C2 *dp, &lv = *(dp=new (buf) S15490C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S15490C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15490C2)");
    check_base_class_offset(lv, (S15490C3*), 0, "S15490C2");
    test_class_info(&lv, &cd_S15490C2);
    dp->~S15490C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15490C2(Test_S15490C2, "S15490C2", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN8S15490C2C1Ev();
extern void _ZN8S15490C2D1Ev();
Name_Map name_map_S15490C2[] = {
  NSPAIR(_ZN8S15490C2C1Ev),
  NSPAIR(_ZN8S15490C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S15490C3;
extern VTBL_ENTRY _ZTI8S15490C3[];
extern  VTBL_ENTRY _ZTV8S15490C3[];
static Base_Class bases_S15490C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15490C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S15490C2[];
extern void _ZN8S15490C2D1Ev();
extern void _ZN8S15490C2D0Ev();
extern void _ZN8S15490C32v3Ev();
extern void _ZN8S15490C32v4Ev();
extern void _ZN8S15490C32v5Ev();
extern void _ZN8S15490C32v6Ev();
extern void _ZN8S15490C22v1Ev();
extern void _ZN8S15490C22v2Ev();
static  VTBL_ENTRY vtc_S15490C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S15490C2[0]),
  (VTBL_ENTRY)&_ZN8S15490C2D1Ev,
  (VTBL_ENTRY)&_ZN8S15490C2D0Ev,
  (VTBL_ENTRY)&_ZN8S15490C32v3Ev,
  (VTBL_ENTRY)&_ZN8S15490C32v4Ev,
  (VTBL_ENTRY)&_ZN8S15490C32v5Ev,
  (VTBL_ENTRY)&_ZN8S15490C32v6Ev,
  (VTBL_ENTRY)&_ZN8S15490C22v1Ev,
  (VTBL_ENTRY)&_ZN8S15490C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S15490C2[];
extern  VTBL_ENTRY _ZTV8S15490C2[];
Class_Descriptor cd_S15490C2 = {  "S15490C2", // class name
  bases_S15490C2, 1,
  &(vtc_S15490C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI8S15490C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S15490C2),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  S15490C1  {
  ::S15490C2 s15490c1f0;
  void  mf15490c1(); // _ZN8S15490C19mf15490c1Ev
};
//SIG(1 S15490C1) C1{ m FC2{ BC3{ vd v3 v4 v5 v6 FC4{ m FL[4]} FC5{ BC6{ m} Fi}} v1 v2}}


void  S15490C1 ::mf15490c1(){}

static void Test_S15490C1()
{
  {
    init_simple_test("S15490C1");
    S15490C1 lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S15490C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15490C1)");
    check_field_offset(lv, s15490c1f0, 0, "S15490C1.s15490c1f0");
  }
}
static Arrange_To_Call_Me vS15490C1(Test_S15490C1, "S15490C1", ABISELECT(48,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1808C3  : S16496C4_nt {
  virtual void  v4(); // _ZN7S1808C32v4Ev
  virtual void  v5(); // _ZN7S1808C32v5Ev
  virtual void  v6(); // _ZN7S1808C32v6Ev
  virtual void  v7(); // _ZN7S1808C32v7Ev
  virtual void  v8(); // _ZN7S1808C32v8Ev
  virtual void  v9(); // _ZN7S1808C32v9Ev
  virtual void  v10(); // _ZN7S1808C33v10Ev
  ~S1808C3(); // tgen
  S1808C3(); // tgen
};
//SIG(-1 S1808C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7}


void  S1808C3 ::v4(){vfunc_called(this, "_ZN7S1808C32v4Ev");}
void  S1808C3 ::v5(){vfunc_called(this, "_ZN7S1808C32v5Ev");}
void  S1808C3 ::v6(){vfunc_called(this, "_ZN7S1808C32v6Ev");}
void  S1808C3 ::v7(){vfunc_called(this, "_ZN7S1808C32v7Ev");}
void  S1808C3 ::v8(){vfunc_called(this, "_ZN7S1808C32v8Ev");}
void  S1808C3 ::v9(){vfunc_called(this, "_ZN7S1808C32v9Ev");}
void  S1808C3 ::v10(){vfunc_called(this, "_ZN7S1808C33v10Ev");}
S1808C3 ::~S1808C3(){ note_dtor("S1808C3", this);} // tgen
S1808C3 ::S1808C3(){ note_ctor("S1808C3", this);} // tgen

static void Test_S1808C3()
{
  extern Class_Descriptor cd_S1808C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1808C3, buf);
    S1808C3 *dp, &lv = *(dp=new (buf) S1808C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1808C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1808C3)");
    check_base_class_offset(lv, (S16496C4_nt*), 0, "S1808C3");
    test_class_info(&lv, &cd_S1808C3);
    dp->~S1808C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1808C3(Test_S1808C3, "S1808C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1808C3C1Ev();
extern void _ZN7S1808C3D1Ev();
Name_Map name_map_S1808C3[] = {
  NSPAIR(_ZN7S1808C3C1Ev),
  NSPAIR(_ZN7S1808C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
static Base_Class bases_S1808C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1808C3[];
extern void _ZN7S1808C3D1Ev();
extern void _ZN7S1808C3D0Ev();
extern void _ZN7S1808C32v4Ev();
extern void _ZN7S1808C32v5Ev();
extern void _ZN7S1808C32v6Ev();
extern void _ZN7S1808C32v7Ev();
extern void _ZN7S1808C32v8Ev();
extern void _ZN7S1808C32v9Ev();
extern void _ZN7S1808C33v10Ev();
static  VTBL_ENTRY vtc_S1808C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1808C3[0]),
  (VTBL_ENTRY)&_ZN7S1808C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1808C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1808C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1808C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1808C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1808C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1808C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1808C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1808C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S1808C3[];
extern  VTBL_ENTRY _ZTV7S1808C3[];
Class_Descriptor cd_S1808C3 = {  "S1808C3", // class name
  bases_S1808C3, 1,
  &(vtc_S1808C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1808C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1808C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1808C2  : S1808C3 {
  ~S1808C2(); // tgen
  S1808C2(); // tgen
};
//SIG(-1 S1808C2) C1{ BC2{ BC3{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7}}


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

static void Test_S1808C2()
{
  extern Class_Descriptor cd_S1808C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1808C2, buf);
    S1808C2 *dp, &lv = *(dp=new (buf) S1808C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1808C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1808C2)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1808C3*), 0, "S1808C2");
    check_base_class_offset(lv, (S1808C3*), 0, "S1808C2");
    test_class_info(&lv, &cd_S1808C2);
    dp->~S1808C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1808C2(Test_S1808C2, "S1808C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1808C2C1Ev();
extern void _ZN7S1808C2D1Ev();
Name_Map name_map_S1808C2[] = {
  NSPAIR(_ZN7S1808C2C1Ev),
  NSPAIR(_ZN7S1808C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1808C3;
extern VTBL_ENTRY _ZTI7S1808C3[];
extern  VTBL_ENTRY _ZTV7S1808C3[];
static Base_Class bases_S1808C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1808C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1808C2[];
extern void _ZN7S1808C2D1Ev();
extern void _ZN7S1808C2D0Ev();
extern void _ZN7S1808C32v4Ev();
extern void _ZN7S1808C32v5Ev();
extern void _ZN7S1808C32v6Ev();
extern void _ZN7S1808C32v7Ev();
extern void _ZN7S1808C32v8Ev();
extern void _ZN7S1808C32v9Ev();
extern void _ZN7S1808C33v10Ev();
static  VTBL_ENTRY vtc_S1808C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1808C2[0]),
  (VTBL_ENTRY)&_ZN7S1808C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1808C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1808C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1808C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1808C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1808C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1808C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1808C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1808C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S1808C2[];
extern  VTBL_ENTRY _ZTV7S1808C2[];
Class_Descriptor cd_S1808C2 = {  "S1808C2", // class name
  bases_S1808C2, 2,
  &(vtc_S1808C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1808C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1808C2),11, //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  S1808C1  : S1808C2 {
  virtual void  v1(); // _ZN7S1808C12v1Ev
  virtual void  v2(); // _ZN7S1808C12v2Ev
  virtual void  v3(); // _ZN7S1808C12v3Ev
  ~S1808C1(); // tgen
  S1808C1(); // tgen
};
//SIG(1 S1808C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v4 v5 v6 v7 v8 v9 v10}} v1 v2 v3}


void  S1808C1 ::v1(){vfunc_called(this, "_ZN7S1808C12v1Ev");}
void  S1808C1 ::v2(){vfunc_called(this, "_ZN7S1808C12v2Ev");}
void  S1808C1 ::v3(){vfunc_called(this, "_ZN7S1808C12v3Ev");}
S1808C1 ::~S1808C1(){ note_dtor("S1808C1", this);} // tgen
S1808C1 ::S1808C1(){ note_ctor("S1808C1", this);} // tgen

static void Test_S1808C1()
{
  extern Class_Descriptor cd_S1808C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1808C1, buf);
    S1808C1 *dp, &lv = *(dp=new (buf) S1808C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1808C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1808C1)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1808C3*)(S1808C2*), 0, "S1808C1");
    check_base_class_offset(lv, (S1808C3*)(S1808C2*), 0, "S1808C1");
    check_base_class_offset(lv, (S1808C2*), 0, "S1808C1");
    test_class_info(&lv, &cd_S1808C1);
    dp->~S1808C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1808C1(Test_S1808C1, "S1808C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1808C1C1Ev();
extern void _ZN7S1808C1D1Ev();
Name_Map name_map_S1808C1[] = {
  NSPAIR(_ZN7S1808C1C1Ev),
  NSPAIR(_ZN7S1808C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1808C3;
extern VTBL_ENTRY _ZTI7S1808C3[];
extern  VTBL_ENTRY _ZTV7S1808C3[];
extern Class_Descriptor cd_S1808C2;
extern VTBL_ENTRY _ZTI7S1808C2[];
extern  VTBL_ENTRY _ZTV7S1808C2[];
static Base_Class bases_S1808C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1808C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1808C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1808C1[];
extern void _ZN7S1808C1D1Ev();
extern void _ZN7S1808C1D0Ev();
extern void _ZN7S1808C32v4Ev();
extern void _ZN7S1808C32v5Ev();
extern void _ZN7S1808C32v6Ev();
extern void _ZN7S1808C32v7Ev();
extern void _ZN7S1808C32v8Ev();
extern void _ZN7S1808C32v9Ev();
extern void _ZN7S1808C33v10Ev();
extern void _ZN7S1808C12v1Ev();
extern void _ZN7S1808C12v2Ev();
extern void _ZN7S1808C12v3Ev();
static  VTBL_ENTRY vtc_S1808C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1808C1[0]),
  (VTBL_ENTRY)&_ZN7S1808C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1808C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1808C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1808C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1808C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1808C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1808C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1808C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1808C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1808C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1808C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1808C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1808C1[];
extern  VTBL_ENTRY _ZTV7S1808C1[];
Class_Descriptor cd_S1808C1 = {  "S1808C1", // class name
  bases_S1808C1, 3,
  &(vtc_S1808C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1808C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1808C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1797C3  : S16496C4_nt {
  virtual void  v3(); // _ZN7S1797C32v3Ev
  virtual void  v4(); // _ZN7S1797C32v4Ev
  virtual void  v5(); // _ZN7S1797C32v5Ev
  virtual void  v6(); // _ZN7S1797C32v6Ev
  virtual void  v7(); // _ZN7S1797C32v7Ev
  virtual void  v8(); // _ZN7S1797C32v8Ev
  virtual void  v9(); // _ZN7S1797C32v9Ev
  virtual void  v10(); // _ZN7S1797C33v10Ev
  ~S1797C3(); // tgen
  S1797C3(); // tgen
};
//SIG(-1 S1797C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8}


void  S1797C3 ::v3(){vfunc_called(this, "_ZN7S1797C32v3Ev");}
void  S1797C3 ::v4(){vfunc_called(this, "_ZN7S1797C32v4Ev");}
void  S1797C3 ::v5(){vfunc_called(this, "_ZN7S1797C32v5Ev");}
void  S1797C3 ::v6(){vfunc_called(this, "_ZN7S1797C32v6Ev");}
void  S1797C3 ::v7(){vfunc_called(this, "_ZN7S1797C32v7Ev");}
void  S1797C3 ::v8(){vfunc_called(this, "_ZN7S1797C32v8Ev");}
void  S1797C3 ::v9(){vfunc_called(this, "_ZN7S1797C32v9Ev");}
void  S1797C3 ::v10(){vfunc_called(this, "_ZN7S1797C33v10Ev");}
S1797C3 ::~S1797C3(){ note_dtor("S1797C3", this);} // tgen
S1797C3 ::S1797C3(){ note_ctor("S1797C3", this);} // tgen

static void Test_S1797C3()
{
  extern Class_Descriptor cd_S1797C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1797C3, buf);
    S1797C3 *dp, &lv = *(dp=new (buf) S1797C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1797C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1797C3)");
    check_base_class_offset(lv, (S16496C4_nt*), 0, "S1797C3");
    test_class_info(&lv, &cd_S1797C3);
    dp->~S1797C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1797C3(Test_S1797C3, "S1797C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1797C3C1Ev();
extern void _ZN7S1797C3D1Ev();
Name_Map name_map_S1797C3[] = {
  NSPAIR(_ZN7S1797C3C1Ev),
  NSPAIR(_ZN7S1797C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
static Base_Class bases_S1797C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1797C3[];
extern void _ZN7S1797C3D1Ev();
extern void _ZN7S1797C3D0Ev();
extern void _ZN7S1797C32v3Ev();
extern void _ZN7S1797C32v4Ev();
extern void _ZN7S1797C32v5Ev();
extern void _ZN7S1797C32v6Ev();
extern void _ZN7S1797C32v7Ev();
extern void _ZN7S1797C32v8Ev();
extern void _ZN7S1797C32v9Ev();
extern void _ZN7S1797C33v10Ev();
static  VTBL_ENTRY vtc_S1797C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1797C3[0]),
  (VTBL_ENTRY)&_ZN7S1797C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1797C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1797C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S1797C3[];
extern  VTBL_ENTRY _ZTV7S1797C3[];
Class_Descriptor cd_S1797C3 = {  "S1797C3", // class name
  bases_S1797C3, 1,
  &(vtc_S1797C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1797C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1797C3),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  S1797C2  : S1797C3 {
  ~S1797C2(); // tgen
  S1797C2(); // tgen
};
//SIG(-1 S1797C2) C1{ BC2{ BC3{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8}}


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

static void Test_S1797C2()
{
  extern Class_Descriptor cd_S1797C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1797C2, buf);
    S1797C2 *dp, &lv = *(dp=new (buf) S1797C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1797C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1797C2)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1797C3*), 0, "S1797C2");
    check_base_class_offset(lv, (S1797C3*), 0, "S1797C2");
    test_class_info(&lv, &cd_S1797C2);
    dp->~S1797C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1797C2(Test_S1797C2, "S1797C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1797C2C1Ev();
extern void _ZN7S1797C2D1Ev();
Name_Map name_map_S1797C2[] = {
  NSPAIR(_ZN7S1797C2C1Ev),
  NSPAIR(_ZN7S1797C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1797C3;
extern VTBL_ENTRY _ZTI7S1797C3[];
extern  VTBL_ENTRY _ZTV7S1797C3[];
static Base_Class bases_S1797C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1797C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1797C2[];
extern void _ZN7S1797C2D1Ev();
extern void _ZN7S1797C2D0Ev();
extern void _ZN7S1797C32v3Ev();
extern void _ZN7S1797C32v4Ev();
extern void _ZN7S1797C32v5Ev();
extern void _ZN7S1797C32v6Ev();
extern void _ZN7S1797C32v7Ev();
extern void _ZN7S1797C32v8Ev();
extern void _ZN7S1797C32v9Ev();
extern void _ZN7S1797C33v10Ev();
static  VTBL_ENTRY vtc_S1797C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1797C2[0]),
  (VTBL_ENTRY)&_ZN7S1797C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1797C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1797C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S1797C2[];
extern  VTBL_ENTRY _ZTV7S1797C2[];
Class_Descriptor cd_S1797C2 = {  "S1797C2", // class name
  bases_S1797C2, 2,
  &(vtc_S1797C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1797C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1797C2),12, //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  S1797C1  : S1797C2 {
  virtual void  v1(); // _ZN7S1797C12v1Ev
  virtual void  v2(); // _ZN7S1797C12v2Ev
  ~S1797C1(); // tgen
  S1797C1(); // tgen
};
//SIG(1 S1797C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v3 v4 v5 v6 v7 v8 v9 v10}} v1 v2}


void  S1797C1 ::v1(){vfunc_called(this, "_ZN7S1797C12v1Ev");}
void  S1797C1 ::v2(){vfunc_called(this, "_ZN7S1797C12v2Ev");}
S1797C1 ::~S1797C1(){ note_dtor("S1797C1", this);} // tgen
S1797C1 ::S1797C1(){ note_ctor("S1797C1", this);} // tgen

static void Test_S1797C1()
{
  extern Class_Descriptor cd_S1797C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1797C1, buf);
    S1797C1 *dp, &lv = *(dp=new (buf) S1797C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1797C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1797C1)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1797C3*)(S1797C2*), 0, "S1797C1");
    check_base_class_offset(lv, (S1797C3*)(S1797C2*), 0, "S1797C1");
    check_base_class_offset(lv, (S1797C2*), 0, "S1797C1");
    test_class_info(&lv, &cd_S1797C1);
    dp->~S1797C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1797C1(Test_S1797C1, "S1797C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1797C1C1Ev();
extern void _ZN7S1797C1D1Ev();
Name_Map name_map_S1797C1[] = {
  NSPAIR(_ZN7S1797C1C1Ev),
  NSPAIR(_ZN7S1797C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1797C3;
extern VTBL_ENTRY _ZTI7S1797C3[];
extern  VTBL_ENTRY _ZTV7S1797C3[];
extern Class_Descriptor cd_S1797C2;
extern VTBL_ENTRY _ZTI7S1797C2[];
extern  VTBL_ENTRY _ZTV7S1797C2[];
static Base_Class bases_S1797C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1797C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1797C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1797C1[];
extern void _ZN7S1797C1D1Ev();
extern void _ZN7S1797C1D0Ev();
extern void _ZN7S1797C32v3Ev();
extern void _ZN7S1797C32v4Ev();
extern void _ZN7S1797C32v5Ev();
extern void _ZN7S1797C32v6Ev();
extern void _ZN7S1797C32v7Ev();
extern void _ZN7S1797C32v8Ev();
extern void _ZN7S1797C32v9Ev();
extern void _ZN7S1797C33v10Ev();
extern void _ZN7S1797C12v1Ev();
extern void _ZN7S1797C12v2Ev();
static  VTBL_ENTRY vtc_S1797C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1797C1[0]),
  (VTBL_ENTRY)&_ZN7S1797C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1797C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1797C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1797C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1797C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1797C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1797C1[];
extern  VTBL_ENTRY _ZTV7S1797C1[];
Class_Descriptor cd_S1797C1 = {  "S1797C1", // class name
  bases_S1797C1, 3,
  &(vtc_S1797C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1797C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1797C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1786C3  : S16496C4_nt {
  virtual void  v2(); // _ZN7S1786C32v2Ev
  virtual void  v3(); // _ZN7S1786C32v3Ev
  virtual void  v4(); // _ZN7S1786C32v4Ev
  virtual void  v5(); // _ZN7S1786C32v5Ev
  virtual void  v6(); // _ZN7S1786C32v6Ev
  virtual void  v7(); // _ZN7S1786C32v7Ev
  virtual void  v8(); // _ZN7S1786C32v8Ev
  virtual void  v9(); // _ZN7S1786C32v9Ev
  virtual void  v10(); // _ZN7S1786C33v10Ev
  ~S1786C3(); // tgen
  S1786C3(); // tgen
};
//SIG(-1 S1786C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S1786C3 ::v2(){vfunc_called(this, "_ZN7S1786C32v2Ev");}
void  S1786C3 ::v3(){vfunc_called(this, "_ZN7S1786C32v3Ev");}
void  S1786C3 ::v4(){vfunc_called(this, "_ZN7S1786C32v4Ev");}
void  S1786C3 ::v5(){vfunc_called(this, "_ZN7S1786C32v5Ev");}
void  S1786C3 ::v6(){vfunc_called(this, "_ZN7S1786C32v6Ev");}
void  S1786C3 ::v7(){vfunc_called(this, "_ZN7S1786C32v7Ev");}
void  S1786C3 ::v8(){vfunc_called(this, "_ZN7S1786C32v8Ev");}
void  S1786C3 ::v9(){vfunc_called(this, "_ZN7S1786C32v9Ev");}
void  S1786C3 ::v10(){vfunc_called(this, "_ZN7S1786C33v10Ev");}
S1786C3 ::~S1786C3(){ note_dtor("S1786C3", this);} // tgen
S1786C3 ::S1786C3(){ note_ctor("S1786C3", this);} // tgen

static void Test_S1786C3()
{
  extern Class_Descriptor cd_S1786C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1786C3, buf);
    S1786C3 *dp, &lv = *(dp=new (buf) S1786C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1786C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1786C3)");
    check_base_class_offset(lv, (S16496C4_nt*), 0, "S1786C3");
    test_class_info(&lv, &cd_S1786C3);
    dp->~S1786C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1786C3(Test_S1786C3, "S1786C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1786C3C1Ev();
extern void _ZN7S1786C3D1Ev();
Name_Map name_map_S1786C3[] = {
  NSPAIR(_ZN7S1786C3C1Ev),
  NSPAIR(_ZN7S1786C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
static Base_Class bases_S1786C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1786C3[];
extern void _ZN7S1786C3D1Ev();
extern void _ZN7S1786C3D0Ev();
extern void _ZN7S1786C32v2Ev();
extern void _ZN7S1786C32v3Ev();
extern void _ZN7S1786C32v4Ev();
extern void _ZN7S1786C32v5Ev();
extern void _ZN7S1786C32v6Ev();
extern void _ZN7S1786C32v7Ev();
extern void _ZN7S1786C32v8Ev();
extern void _ZN7S1786C32v9Ev();
extern void _ZN7S1786C33v10Ev();
static  VTBL_ENTRY vtc_S1786C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1786C3[0]),
  (VTBL_ENTRY)&_ZN7S1786C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1786C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1786C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S1786C3[];
extern  VTBL_ENTRY _ZTV7S1786C3[];
Class_Descriptor cd_S1786C3 = {  "S1786C3", // class name
  bases_S1786C3, 1,
  &(vtc_S1786C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1786C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1786C3),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1786C2  : S1786C3 {
  ~S1786C2(); // tgen
  S1786C2(); // tgen
};
//SIG(-1 S1786C2) C1{ BC2{ BC3{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8 v9}}


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

static void Test_S1786C2()
{
  extern Class_Descriptor cd_S1786C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1786C2, buf);
    S1786C2 *dp, &lv = *(dp=new (buf) S1786C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1786C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1786C2)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1786C3*), 0, "S1786C2");
    check_base_class_offset(lv, (S1786C3*), 0, "S1786C2");
    test_class_info(&lv, &cd_S1786C2);
    dp->~S1786C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1786C2(Test_S1786C2, "S1786C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1786C2C1Ev();
extern void _ZN7S1786C2D1Ev();
Name_Map name_map_S1786C2[] = {
  NSPAIR(_ZN7S1786C2C1Ev),
  NSPAIR(_ZN7S1786C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1786C3;
extern VTBL_ENTRY _ZTI7S1786C3[];
extern  VTBL_ENTRY _ZTV7S1786C3[];
static Base_Class bases_S1786C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1786C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1786C2[];
extern void _ZN7S1786C2D1Ev();
extern void _ZN7S1786C2D0Ev();
extern void _ZN7S1786C32v2Ev();
extern void _ZN7S1786C32v3Ev();
extern void _ZN7S1786C32v4Ev();
extern void _ZN7S1786C32v5Ev();
extern void _ZN7S1786C32v6Ev();
extern void _ZN7S1786C32v7Ev();
extern void _ZN7S1786C32v8Ev();
extern void _ZN7S1786C32v9Ev();
extern void _ZN7S1786C33v10Ev();
static  VTBL_ENTRY vtc_S1786C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1786C2[0]),
  (VTBL_ENTRY)&_ZN7S1786C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1786C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1786C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S1786C2[];
extern  VTBL_ENTRY _ZTV7S1786C2[];
Class_Descriptor cd_S1786C2 = {  "S1786C2", // class name
  bases_S1786C2, 2,
  &(vtc_S1786C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1786C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1786C2),13, //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  S1786C1  : S1786C2 {
  virtual void  v1(); // _ZN7S1786C12v1Ev
  ~S1786C1(); // tgen
  S1786C1(); // tgen
};
//SIG(1 S1786C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8 v9 v10}} v1}


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

static void Test_S1786C1()
{
  extern Class_Descriptor cd_S1786C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1786C1, buf);
    S1786C1 *dp, &lv = *(dp=new (buf) S1786C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1786C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1786C1)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1786C3*)(S1786C2*), 0, "S1786C1");
    check_base_class_offset(lv, (S1786C3*)(S1786C2*), 0, "S1786C1");
    check_base_class_offset(lv, (S1786C2*), 0, "S1786C1");
    test_class_info(&lv, &cd_S1786C1);
    dp->~S1786C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1786C1(Test_S1786C1, "S1786C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1786C1C1Ev();
extern void _ZN7S1786C1D1Ev();
Name_Map name_map_S1786C1[] = {
  NSPAIR(_ZN7S1786C1C1Ev),
  NSPAIR(_ZN7S1786C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1786C3;
extern VTBL_ENTRY _ZTI7S1786C3[];
extern  VTBL_ENTRY _ZTV7S1786C3[];
extern Class_Descriptor cd_S1786C2;
extern VTBL_ENTRY _ZTI7S1786C2[];
extern  VTBL_ENTRY _ZTV7S1786C2[];
static Base_Class bases_S1786C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1786C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1786C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1786C1[];
extern void _ZN7S1786C1D1Ev();
extern void _ZN7S1786C1D0Ev();
extern void _ZN7S1786C32v2Ev();
extern void _ZN7S1786C32v3Ev();
extern void _ZN7S1786C32v4Ev();
extern void _ZN7S1786C32v5Ev();
extern void _ZN7S1786C32v6Ev();
extern void _ZN7S1786C32v7Ev();
extern void _ZN7S1786C32v8Ev();
extern void _ZN7S1786C32v9Ev();
extern void _ZN7S1786C33v10Ev();
extern void _ZN7S1786C12v1Ev();
static  VTBL_ENTRY vtc_S1786C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1786C1[0]),
  (VTBL_ENTRY)&_ZN7S1786C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1786C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1786C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1786C33v10Ev,
  (VTBL_ENTRY)&_ZN7S1786C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1786C1[];
extern  VTBL_ENTRY _ZTV7S1786C1[];
Class_Descriptor cd_S1786C1 = {  "S1786C1", // class name
  bases_S1786C1, 3,
  &(vtc_S1786C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1786C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1786C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11092C4_nt  {
  int s11092c4f0;
  char s11092c4f1;
  void  mf11092c4(); // _ZN11S11092C4_nt9mf11092c4Ev
};
//SIG(-1 S11092C4_nt) C1{ m Fi Fc}


void  S11092C4_nt ::mf11092c4(){}

//skip512 S11092C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11092C1  {
  ::S1159C5_nt s11092c1f0;
  ::S11092C4_nt s11092c1f1;
  ::S11092C4_nt s11092c1f2;
  ::S1474C10_nt s11092c1f3;
  int s11092c1f4;
};
//SIG(1 S11092C1) C1{ FC2{ BC3{ m} Fi} FC4{ m Fi Fc} FC4 FC5{ m Fi[4]} Fi}



static void Test_S11092C1()
{
  {
    init_simple_test("S11092C1");
    S11092C1 lv;
    check2(sizeof(lv), 40, "sizeof(S11092C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11092C1)");
    check_field_offset(lv, s11092c1f0, 0, "S11092C1.s11092c1f0");
    check_field_offset(lv, s11092c1f1, 4, "S11092C1.s11092c1f1");
    check_field_offset(lv, s11092c1f2, 12, "S11092C1.s11092c1f2");
    check_field_offset(lv, s11092c1f3, 20, "S11092C1.s11092c1f3");
    check_field_offset(lv, s11092c1f4, 36, "S11092C1.s11092c1f4");
  }
}
static Arrange_To_Call_Me vS11092C1(Test_S11092C1, "S11092C1", 40);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17988C2  {
  int s17988c2f0;
  ::S8053C10_nt s17988c2f1;
  ::S8053C10_nt s17988c2f2;
  ::S2172C17 s17988c2f3;
  void  mf17988c2(); // _ZN8S17988C29mf17988c2Ev
};
//SIG(-1 S17988C2) C1{ m Fi FC2{ m Fp Fi FC3{ m}} FC2 FC4{ m Fp}}


void  S17988C2 ::mf17988c2(){}

static void Test_S17988C2()
{
  {
    init_simple_test("S17988C2");
    S17988C2 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S17988C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17988C2)");
    check_field_offset(lv, s17988c2f0, 0, "S17988C2.s17988c2f0");
    check_field_offset(lv, s17988c2f1, ABISELECT(8,4), "S17988C2.s17988c2f1");
    check_field_offset(lv, s17988c2f2, ABISELECT(24,16), "S17988C2.s17988c2f2");
    check_field_offset(lv, s17988c2f3, ABISELECT(40,28), "S17988C2.s17988c2f3");
  }
}
static Arrange_To_Call_Me vS17988C2(Test_S17988C2, "S17988C2", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17988C1  {
  void *s17988c1f0[2];
  ::S17988C2 s17988c1f1;
  void  mf17988c1(); // _ZN8S17988C19mf17988c1Ev
};
//SIG(1 S17988C1) C1{ m Fp[2] FC2{ m Fi FC3{ m Fp Fi FC4{ m}} FC3 FC5{ m Fp}}}


void  S17988C1 ::mf17988c1(){}

static void Test_S17988C1()
{
  {
    init_simple_test("S17988C1");
    S17988C1 lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S17988C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17988C1)");
    check_field_offset(lv, s17988c1f0, 0, "S17988C1.s17988c1f0");
    check_field_offset(lv, s17988c1f1, ABISELECT(16,8), "S17988C1.s17988c1f1");
  }
}
static Arrange_To_Call_Me vS17988C1(Test_S17988C1, "S17988C1", ABISELECT(64,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1798C3  : S16496C4_nt {
  virtual void  v3(); // _ZN7S1798C32v3Ev
  virtual void  v4(); // _ZN7S1798C32v4Ev
  virtual void  v5(); // _ZN7S1798C32v5Ev
  virtual void  v6(); // _ZN7S1798C32v6Ev
  virtual void  v7(); // _ZN7S1798C32v7Ev
  virtual void  v8(); // _ZN7S1798C32v8Ev
  virtual void  v9(); // _ZN7S1798C32v9Ev
  ~S1798C3(); // tgen
  S1798C3(); // tgen
};
//SIG(-1 S1798C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7}


void  S1798C3 ::v3(){vfunc_called(this, "_ZN7S1798C32v3Ev");}
void  S1798C3 ::v4(){vfunc_called(this, "_ZN7S1798C32v4Ev");}
void  S1798C3 ::v5(){vfunc_called(this, "_ZN7S1798C32v5Ev");}
void  S1798C3 ::v6(){vfunc_called(this, "_ZN7S1798C32v6Ev");}
void  S1798C3 ::v7(){vfunc_called(this, "_ZN7S1798C32v7Ev");}
void  S1798C3 ::v8(){vfunc_called(this, "_ZN7S1798C32v8Ev");}
void  S1798C3 ::v9(){vfunc_called(this, "_ZN7S1798C32v9Ev");}
S1798C3 ::~S1798C3(){ note_dtor("S1798C3", this);} // tgen
S1798C3 ::S1798C3(){ note_ctor("S1798C3", this);} // tgen

static void Test_S1798C3()
{
  extern Class_Descriptor cd_S1798C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1798C3, buf);
    S1798C3 *dp, &lv = *(dp=new (buf) S1798C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1798C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1798C3)");
    check_base_class_offset(lv, (S16496C4_nt*), 0, "S1798C3");
    test_class_info(&lv, &cd_S1798C3);
    dp->~S1798C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1798C3(Test_S1798C3, "S1798C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1798C3C1Ev();
extern void _ZN7S1798C3D1Ev();
Name_Map name_map_S1798C3[] = {
  NSPAIR(_ZN7S1798C3C1Ev),
  NSPAIR(_ZN7S1798C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
static Base_Class bases_S1798C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1798C3[];
extern void _ZN7S1798C3D1Ev();
extern void _ZN7S1798C3D0Ev();
extern void _ZN7S1798C32v3Ev();
extern void _ZN7S1798C32v4Ev();
extern void _ZN7S1798C32v5Ev();
extern void _ZN7S1798C32v6Ev();
extern void _ZN7S1798C32v7Ev();
extern void _ZN7S1798C32v8Ev();
extern void _ZN7S1798C32v9Ev();
static  VTBL_ENTRY vtc_S1798C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1798C3[0]),
  (VTBL_ENTRY)&_ZN7S1798C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1798C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S1798C3[];
extern  VTBL_ENTRY _ZTV7S1798C3[];
Class_Descriptor cd_S1798C3 = {  "S1798C3", // class name
  bases_S1798C3, 1,
  &(vtc_S1798C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1798C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1798C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1798C2  : S1798C3 {
  ~S1798C2(); // tgen
  S1798C2(); // tgen
};
//SIG(-1 S1798C2) C1{ BC2{ BC3{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7}}


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

static void Test_S1798C2()
{
  extern Class_Descriptor cd_S1798C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1798C2, buf);
    S1798C2 *dp, &lv = *(dp=new (buf) S1798C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1798C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1798C2)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1798C3*), 0, "S1798C2");
    check_base_class_offset(lv, (S1798C3*), 0, "S1798C2");
    test_class_info(&lv, &cd_S1798C2);
    dp->~S1798C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1798C2(Test_S1798C2, "S1798C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1798C2C1Ev();
extern void _ZN7S1798C2D1Ev();
Name_Map name_map_S1798C2[] = {
  NSPAIR(_ZN7S1798C2C1Ev),
  NSPAIR(_ZN7S1798C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1798C3;
extern VTBL_ENTRY _ZTI7S1798C3[];
extern  VTBL_ENTRY _ZTV7S1798C3[];
static Base_Class bases_S1798C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1798C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1798C2[];
extern void _ZN7S1798C2D1Ev();
extern void _ZN7S1798C2D0Ev();
extern void _ZN7S1798C32v3Ev();
extern void _ZN7S1798C32v4Ev();
extern void _ZN7S1798C32v5Ev();
extern void _ZN7S1798C32v6Ev();
extern void _ZN7S1798C32v7Ev();
extern void _ZN7S1798C32v8Ev();
extern void _ZN7S1798C32v9Ev();
static  VTBL_ENTRY vtc_S1798C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1798C2[0]),
  (VTBL_ENTRY)&_ZN7S1798C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1798C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S1798C2[];
extern  VTBL_ENTRY _ZTV7S1798C2[];
Class_Descriptor cd_S1798C2 = {  "S1798C2", // class name
  bases_S1798C2, 2,
  &(vtc_S1798C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1798C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1798C2),11, //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  S1798C1  : S1798C2 {
  virtual void  v1(); // _ZN7S1798C12v1Ev
  virtual void  v2(); // _ZN7S1798C12v2Ev
  ~S1798C1(); // tgen
  S1798C1(); // tgen
};
//SIG(1 S1798C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v3 v4 v5 v6 v7 v8 v9}} v1 v2}


void  S1798C1 ::v1(){vfunc_called(this, "_ZN7S1798C12v1Ev");}
void  S1798C1 ::v2(){vfunc_called(this, "_ZN7S1798C12v2Ev");}
S1798C1 ::~S1798C1(){ note_dtor("S1798C1", this);} // tgen
S1798C1 ::S1798C1(){ note_ctor("S1798C1", this);} // tgen

static void Test_S1798C1()
{
  extern Class_Descriptor cd_S1798C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1798C1, buf);
    S1798C1 *dp, &lv = *(dp=new (buf) S1798C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1798C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1798C1)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1798C3*)(S1798C2*), 0, "S1798C1");
    check_base_class_offset(lv, (S1798C3*)(S1798C2*), 0, "S1798C1");
    check_base_class_offset(lv, (S1798C2*), 0, "S1798C1");
    test_class_info(&lv, &cd_S1798C1);
    dp->~S1798C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1798C1(Test_S1798C1, "S1798C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1798C1C1Ev();
extern void _ZN7S1798C1D1Ev();
Name_Map name_map_S1798C1[] = {
  NSPAIR(_ZN7S1798C1C1Ev),
  NSPAIR(_ZN7S1798C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1798C3;
extern VTBL_ENTRY _ZTI7S1798C3[];
extern  VTBL_ENTRY _ZTV7S1798C3[];
extern Class_Descriptor cd_S1798C2;
extern VTBL_ENTRY _ZTI7S1798C2[];
extern  VTBL_ENTRY _ZTV7S1798C2[];
static Base_Class bases_S1798C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1798C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1798C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1798C1[];
extern void _ZN7S1798C1D1Ev();
extern void _ZN7S1798C1D0Ev();
extern void _ZN7S1798C32v3Ev();
extern void _ZN7S1798C32v4Ev();
extern void _ZN7S1798C32v5Ev();
extern void _ZN7S1798C32v6Ev();
extern void _ZN7S1798C32v7Ev();
extern void _ZN7S1798C32v8Ev();
extern void _ZN7S1798C32v9Ev();
extern void _ZN7S1798C12v1Ev();
extern void _ZN7S1798C12v2Ev();
static  VTBL_ENTRY vtc_S1798C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1798C1[0]),
  (VTBL_ENTRY)&_ZN7S1798C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1798C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1798C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1798C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1798C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1798C1[];
extern  VTBL_ENTRY _ZTV7S1798C1[];
Class_Descriptor cd_S1798C1 = {  "S1798C1", // class name
  bases_S1798C1, 3,
  &(vtc_S1798C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1798C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1798C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1787C3  : S16496C4_nt {
  virtual void  v2(); // _ZN7S1787C32v2Ev
  virtual void  v3(); // _ZN7S1787C32v3Ev
  virtual void  v4(); // _ZN7S1787C32v4Ev
  virtual void  v5(); // _ZN7S1787C32v5Ev
  virtual void  v6(); // _ZN7S1787C32v6Ev
  virtual void  v7(); // _ZN7S1787C32v7Ev
  virtual void  v8(); // _ZN7S1787C32v8Ev
  virtual void  v9(); // _ZN7S1787C32v9Ev
  ~S1787C3(); // tgen
  S1787C3(); // tgen
};
//SIG(-1 S1787C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8}


void  S1787C3 ::v2(){vfunc_called(this, "_ZN7S1787C32v2Ev");}
void  S1787C3 ::v3(){vfunc_called(this, "_ZN7S1787C32v3Ev");}
void  S1787C3 ::v4(){vfunc_called(this, "_ZN7S1787C32v4Ev");}
void  S1787C3 ::v5(){vfunc_called(this, "_ZN7S1787C32v5Ev");}
void  S1787C3 ::v6(){vfunc_called(this, "_ZN7S1787C32v6Ev");}
void  S1787C3 ::v7(){vfunc_called(this, "_ZN7S1787C32v7Ev");}
void  S1787C3 ::v8(){vfunc_called(this, "_ZN7S1787C32v8Ev");}
void  S1787C3 ::v9(){vfunc_called(this, "_ZN7S1787C32v9Ev");}
S1787C3 ::~S1787C3(){ note_dtor("S1787C3", this);} // tgen
S1787C3 ::S1787C3(){ note_ctor("S1787C3", this);} // tgen

static void Test_S1787C3()
{
  extern Class_Descriptor cd_S1787C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1787C3, buf);
    S1787C3 *dp, &lv = *(dp=new (buf) S1787C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1787C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1787C3)");
    check_base_class_offset(lv, (S16496C4_nt*), 0, "S1787C3");
    test_class_info(&lv, &cd_S1787C3);
    dp->~S1787C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1787C3(Test_S1787C3, "S1787C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1787C3C1Ev();
extern void _ZN7S1787C3D1Ev();
Name_Map name_map_S1787C3[] = {
  NSPAIR(_ZN7S1787C3C1Ev),
  NSPAIR(_ZN7S1787C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
static Base_Class bases_S1787C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1787C3[];
extern void _ZN7S1787C3D1Ev();
extern void _ZN7S1787C3D0Ev();
extern void _ZN7S1787C32v2Ev();
extern void _ZN7S1787C32v3Ev();
extern void _ZN7S1787C32v4Ev();
extern void _ZN7S1787C32v5Ev();
extern void _ZN7S1787C32v6Ev();
extern void _ZN7S1787C32v7Ev();
extern void _ZN7S1787C32v8Ev();
extern void _ZN7S1787C32v9Ev();
static  VTBL_ENTRY vtc_S1787C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1787C3[0]),
  (VTBL_ENTRY)&_ZN7S1787C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1787C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S1787C3[];
extern  VTBL_ENTRY _ZTV7S1787C3[];
Class_Descriptor cd_S1787C3 = {  "S1787C3", // class name
  bases_S1787C3, 1,
  &(vtc_S1787C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1787C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1787C3),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  S1787C2  : S1787C3 {
  ~S1787C2(); // tgen
  S1787C2(); // tgen
};
//SIG(-1 S1787C2) C1{ BC2{ BC3{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7 v8}}


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

static void Test_S1787C2()
{
  extern Class_Descriptor cd_S1787C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1787C2, buf);
    S1787C2 *dp, &lv = *(dp=new (buf) S1787C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1787C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1787C2)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1787C3*), 0, "S1787C2");
    check_base_class_offset(lv, (S1787C3*), 0, "S1787C2");
    test_class_info(&lv, &cd_S1787C2);
    dp->~S1787C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1787C2(Test_S1787C2, "S1787C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1787C2C1Ev();
extern void _ZN7S1787C2D1Ev();
Name_Map name_map_S1787C2[] = {
  NSPAIR(_ZN7S1787C2C1Ev),
  NSPAIR(_ZN7S1787C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1787C3;
extern VTBL_ENTRY _ZTI7S1787C3[];
extern  VTBL_ENTRY _ZTV7S1787C3[];
static Base_Class bases_S1787C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1787C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1787C2[];
extern void _ZN7S1787C2D1Ev();
extern void _ZN7S1787C2D0Ev();
extern void _ZN7S1787C32v2Ev();
extern void _ZN7S1787C32v3Ev();
extern void _ZN7S1787C32v4Ev();
extern void _ZN7S1787C32v5Ev();
extern void _ZN7S1787C32v6Ev();
extern void _ZN7S1787C32v7Ev();
extern void _ZN7S1787C32v8Ev();
extern void _ZN7S1787C32v9Ev();
static  VTBL_ENTRY vtc_S1787C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1787C2[0]),
  (VTBL_ENTRY)&_ZN7S1787C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1787C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S1787C2[];
extern  VTBL_ENTRY _ZTV7S1787C2[];
Class_Descriptor cd_S1787C2 = {  "S1787C2", // class name
  bases_S1787C2, 2,
  &(vtc_S1787C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1787C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1787C2),12, //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  S1787C1  : S1787C2 {
  virtual void  v1(); // _ZN7S1787C12v1Ev
  ~S1787C1(); // tgen
  S1787C1(); // tgen
};
//SIG(1 S1787C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8 v9}} v1}


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

static void Test_S1787C1()
{
  extern Class_Descriptor cd_S1787C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1787C1, buf);
    S1787C1 *dp, &lv = *(dp=new (buf) S1787C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1787C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1787C1)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1787C3*)(S1787C2*), 0, "S1787C1");
    check_base_class_offset(lv, (S1787C3*)(S1787C2*), 0, "S1787C1");
    check_base_class_offset(lv, (S1787C2*), 0, "S1787C1");
    test_class_info(&lv, &cd_S1787C1);
    dp->~S1787C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1787C1(Test_S1787C1, "S1787C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1787C1C1Ev();
extern void _ZN7S1787C1D1Ev();
Name_Map name_map_S1787C1[] = {
  NSPAIR(_ZN7S1787C1C1Ev),
  NSPAIR(_ZN7S1787C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1787C3;
extern VTBL_ENTRY _ZTI7S1787C3[];
extern  VTBL_ENTRY _ZTV7S1787C3[];
extern Class_Descriptor cd_S1787C2;
extern VTBL_ENTRY _ZTI7S1787C2[];
extern  VTBL_ENTRY _ZTV7S1787C2[];
static Base_Class bases_S1787C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1787C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1787C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1787C1[];
extern void _ZN7S1787C1D1Ev();
extern void _ZN7S1787C1D0Ev();
extern void _ZN7S1787C32v2Ev();
extern void _ZN7S1787C32v3Ev();
extern void _ZN7S1787C32v4Ev();
extern void _ZN7S1787C32v5Ev();
extern void _ZN7S1787C32v6Ev();
extern void _ZN7S1787C32v7Ev();
extern void _ZN7S1787C32v8Ev();
extern void _ZN7S1787C32v9Ev();
extern void _ZN7S1787C12v1Ev();
static  VTBL_ENTRY vtc_S1787C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1787C1[0]),
  (VTBL_ENTRY)&_ZN7S1787C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1787C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1787C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1787C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1787C1[];
extern  VTBL_ENTRY _ZTV7S1787C1[];
Class_Descriptor cd_S1787C1 = {  "S1787C1", // class name
  bases_S1787C1, 3,
  &(vtc_S1787C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1787C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1787C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1788C3  : S16496C4_nt {
  virtual void  v2(); // _ZN7S1788C32v2Ev
  virtual void  v3(); // _ZN7S1788C32v3Ev
  virtual void  v4(); // _ZN7S1788C32v4Ev
  virtual void  v5(); // _ZN7S1788C32v5Ev
  virtual void  v6(); // _ZN7S1788C32v6Ev
  virtual void  v7(); // _ZN7S1788C32v7Ev
  virtual void  v8(); // _ZN7S1788C32v8Ev
  ~S1788C3(); // tgen
  S1788C3(); // tgen
};
//SIG(-1 S1788C3) C1{ BC2{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7}


void  S1788C3 ::v2(){vfunc_called(this, "_ZN7S1788C32v2Ev");}
void  S1788C3 ::v3(){vfunc_called(this, "_ZN7S1788C32v3Ev");}
void  S1788C3 ::v4(){vfunc_called(this, "_ZN7S1788C32v4Ev");}
void  S1788C3 ::v5(){vfunc_called(this, "_ZN7S1788C32v5Ev");}
void  S1788C3 ::v6(){vfunc_called(this, "_ZN7S1788C32v6Ev");}
void  S1788C3 ::v7(){vfunc_called(this, "_ZN7S1788C32v7Ev");}
void  S1788C3 ::v8(){vfunc_called(this, "_ZN7S1788C32v8Ev");}
S1788C3 ::~S1788C3(){ note_dtor("S1788C3", this);} // tgen
S1788C3 ::S1788C3(){ note_ctor("S1788C3", this);} // tgen

static void Test_S1788C3()
{
  extern Class_Descriptor cd_S1788C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1788C3, buf);
    S1788C3 *dp, &lv = *(dp=new (buf) S1788C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1788C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1788C3)");
    check_base_class_offset(lv, (S16496C4_nt*), 0, "S1788C3");
    test_class_info(&lv, &cd_S1788C3);
    dp->~S1788C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1788C3(Test_S1788C3, "S1788C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1788C3C1Ev();
extern void _ZN7S1788C3D1Ev();
Name_Map name_map_S1788C3[] = {
  NSPAIR(_ZN7S1788C3C1Ev),
  NSPAIR(_ZN7S1788C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
static Base_Class bases_S1788C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1788C3[];
extern void _ZN7S1788C3D1Ev();
extern void _ZN7S1788C3D0Ev();
extern void _ZN7S1788C32v2Ev();
extern void _ZN7S1788C32v3Ev();
extern void _ZN7S1788C32v4Ev();
extern void _ZN7S1788C32v5Ev();
extern void _ZN7S1788C32v6Ev();
extern void _ZN7S1788C32v7Ev();
extern void _ZN7S1788C32v8Ev();
static  VTBL_ENTRY vtc_S1788C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1788C3[0]),
  (VTBL_ENTRY)&_ZN7S1788C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1788C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S1788C3[];
extern  VTBL_ENTRY _ZTV7S1788C3[];
Class_Descriptor cd_S1788C3 = {  "S1788C3", // class name
  bases_S1788C3, 1,
  &(vtc_S1788C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1788C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1788C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1788C2  : S1788C3 {
  ~S1788C2(); // tgen
  S1788C2(); // tgen
};
//SIG(-1 S1788C2) C1{ BC2{ BC3{ vd m Fp Fi} v1 v2 v3 v4 v5 v6 v7}}


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

static void Test_S1788C2()
{
  extern Class_Descriptor cd_S1788C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1788C2, buf);
    S1788C2 *dp, &lv = *(dp=new (buf) S1788C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1788C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1788C2)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1788C3*), 0, "S1788C2");
    check_base_class_offset(lv, (S1788C3*), 0, "S1788C2");
    test_class_info(&lv, &cd_S1788C2);
    dp->~S1788C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1788C2(Test_S1788C2, "S1788C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1788C2C1Ev();
extern void _ZN7S1788C2D1Ev();
Name_Map name_map_S1788C2[] = {
  NSPAIR(_ZN7S1788C2C1Ev),
  NSPAIR(_ZN7S1788C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1788C3;
extern VTBL_ENTRY _ZTI7S1788C3[];
extern  VTBL_ENTRY _ZTV7S1788C3[];
static Base_Class bases_S1788C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1788C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1788C2[];
extern void _ZN7S1788C2D1Ev();
extern void _ZN7S1788C2D0Ev();
extern void _ZN7S1788C32v2Ev();
extern void _ZN7S1788C32v3Ev();
extern void _ZN7S1788C32v4Ev();
extern void _ZN7S1788C32v5Ev();
extern void _ZN7S1788C32v6Ev();
extern void _ZN7S1788C32v7Ev();
extern void _ZN7S1788C32v8Ev();
static  VTBL_ENTRY vtc_S1788C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1788C2[0]),
  (VTBL_ENTRY)&_ZN7S1788C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1788C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S1788C2[];
extern  VTBL_ENTRY _ZTV7S1788C2[];
Class_Descriptor cd_S1788C2 = {  "S1788C2", // class name
  bases_S1788C2, 2,
  &(vtc_S1788C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1788C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1788C2),11, //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  S1788C1  : S1788C2 {
  virtual void  v1(); // _ZN7S1788C12v1Ev
  ~S1788C1(); // tgen
  S1788C1(); // tgen
};
//SIG(1 S1788C1) C1{ BC2{ BC3{ BC4{ vd m Fp Fi} v2 v3 v4 v5 v6 v7 v8}} v1}


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

static void Test_S1788C1()
{
  extern Class_Descriptor cd_S1788C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1788C1, buf);
    S1788C1 *dp, &lv = *(dp=new (buf) S1788C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1788C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1788C1)");
    check_base_class_offset(lv, (S16496C4_nt*)(S1788C3*)(S1788C2*), 0, "S1788C1");
    check_base_class_offset(lv, (S1788C3*)(S1788C2*), 0, "S1788C1");
    check_base_class_offset(lv, (S1788C2*), 0, "S1788C1");
    test_class_info(&lv, &cd_S1788C1);
    dp->~S1788C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1788C1(Test_S1788C1, "S1788C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1788C1C1Ev();
extern void _ZN7S1788C1D1Ev();
Name_Map name_map_S1788C1[] = {
  NSPAIR(_ZN7S1788C1C1Ev),
  NSPAIR(_ZN7S1788C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16496C4_nt;
extern VTBL_ENTRY _ZTI11S16496C4_nt[];
extern  VTBL_ENTRY _ZTV11S16496C4_nt[];
extern Class_Descriptor cd_S1788C3;
extern VTBL_ENTRY _ZTI7S1788C3[];
extern  VTBL_ENTRY _ZTV7S1788C3[];
extern Class_Descriptor cd_S1788C2;
extern VTBL_ENTRY _ZTI7S1788C2[];
extern  VTBL_ENTRY _ZTV7S1788C2[];
static Base_Class bases_S1788C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16496C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1788C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1788C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1788C1[];
extern void _ZN7S1788C1D1Ev();
extern void _ZN7S1788C1D0Ev();
extern void _ZN7S1788C32v2Ev();
extern void _ZN7S1788C32v3Ev();
extern void _ZN7S1788C32v4Ev();
extern void _ZN7S1788C32v5Ev();
extern void _ZN7S1788C32v6Ev();
extern void _ZN7S1788C32v7Ev();
extern void _ZN7S1788C32v8Ev();
extern void _ZN7S1788C12v1Ev();
static  VTBL_ENTRY vtc_S1788C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1788C1[0]),
  (VTBL_ENTRY)&_ZN7S1788C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1788C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v2Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v3Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1788C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1788C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1788C1[];
extern  VTBL_ENTRY _ZTV7S1788C1[];
Class_Descriptor cd_S1788C1 = {  "S1788C1", // class name
  bases_S1788C1, 3,
  &(vtc_S1788C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1788C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1788C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18407C1  {
  void *s18407c1f0[8];
  int s18407c1f1[3];
  void *s18407c1f2;
  int s18407c1f3[2];
  ::S4426C7_nt s18407c1f4;
  int s18407c1f5;
  char s18407c1f6;
  int s18407c1f7[3];
  void *s18407c1f8;
  void  mf18407c1(); // _ZN8S18407C19mf18407c1Ev
};
//SIG(1 S18407C1) C1{ m Fp[8] Fi[3] Fp Fi[2] FC2{ FL[4]} Fi Fc Fi[3] Fp}


void  S18407C1 ::mf18407c1(){}

static void Test_S18407C1()
{
  {
    init_simple_test("S18407C1");
    S18407C1 lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S18407C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18407C1)");
    check_field_offset(lv, s18407c1f0, 0, "S18407C1.s18407c1f0");
    check_field_offset(lv, s18407c1f1, ABISELECT(64,32), "S18407C1.s18407c1f1");
    check_field_offset(lv, s18407c1f2, ABISELECT(80,44), "S18407C1.s18407c1f2");
    check_field_offset(lv, s18407c1f3, ABISELECT(88,48), "S18407C1.s18407c1f3");
    check_field_offset(lv, s18407c1f4, ABISELECT(96,56), "S18407C1.s18407c1f4");
    check_field_offset(lv, s18407c1f5, ABISELECT(128,88), "S18407C1.s18407c1f5");
    check_field_offset(lv, s18407c1f6, ABISELECT(132,92), "S18407C1.s18407c1f6");
    check_field_offset(lv, s18407c1f7, ABISELECT(136,96), "S18407C1.s18407c1f7");
    check_field_offset(lv, s18407c1f8, ABISELECT(152,108), "S18407C1.s18407c1f8");
  }
}
static Arrange_To_Call_Me vS18407C1(Test_S18407C1, "S18407C1", ABISELECT(160,112));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16550C1  {
  int s16550c1f0;
  char s16550c1f1;
  long s16550c1f2;
  __tsi64 s16550c1f3;
  int s16550c1f4;
  long s16550c1f5[12];
  long double s16550c1f6[12];
  int s16550c1f7[12];
  void *s16550c1f8;
  int s16550c1f9[2];
  void  mf16550c1(); // _ZN8S16550C19mf16550c1Ev
};
//SIG(1 S16550C1) C1{ m Fi Fc Fl FL Fi Fl[12] FD[12] Fi[12] Fp Fi[2]}


void  S16550C1 ::mf16550c1(){}

static void Test_S16550C1()
{
  {
    init_simple_test("S16550C1");
    S16550C1 lv;
    check2(sizeof(lv), ABISELECT(384,276), "sizeof(S16550C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16550C1)");
    check_field_offset(lv, s16550c1f0, 0, "S16550C1.s16550c1f0");
    check_field_offset(lv, s16550c1f1, 4, "S16550C1.s16550c1f1");
    check_field_offset(lv, s16550c1f2, 8, "S16550C1.s16550c1f2");
    check_field_offset(lv, s16550c1f3, ABISELECT(16,12), "S16550C1.s16550c1f3");
    check_field_offset(lv, s16550c1f4, ABISELECT(24,20), "S16550C1.s16550c1f4");
    check_field_offset(lv, s16550c1f5, ABISELECT(32,24), "S16550C1.s16550c1f5");
    check_field_offset(lv, s16550c1f6, ABISELECT(128,72), "S16550C1.s16550c1f6");
    check_field_offset(lv, s16550c1f7, ABISELECT(320,216), "S16550C1.s16550c1f7");
    check_field_offset(lv, s16550c1f8, ABISELECT(368,264), "S16550C1.s16550c1f8");
    check_field_offset(lv, s16550c1f9, ABISELECT(376,268), "S16550C1.s16550c1f9");
  }
}
static Arrange_To_Call_Me vS16550C1(Test_S16550C1, "S16550C1", ABISELECT(384,276));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2941C2_nt  : S5166C37 {
  virtual  ~S2941C2_nt(); // _ZN10S2941C2_ntD1Ev
  virtual void  v6(); // _ZN10S2941C2_nt2v6Ev
  virtual void  v7(); // _ZN10S2941C2_nt2v7Ev
  S2941C2_nt(); // tgen
};
//SIG(-1 S2941C2_nt) C1{ BC2{ m} vd v1 v2}


 S2941C2_nt ::~S2941C2_nt(){ note_dtor("S2941C2_nt", this);}
void  S2941C2_nt ::v6(){vfunc_called(this, "_ZN10S2941C2_nt2v6Ev");}
void  S2941C2_nt ::v7(){vfunc_called(this, "_ZN10S2941C2_nt2v7Ev");}
S2941C2_nt ::S2941C2_nt(){ note_ctor("S2941C2_nt", this);} // tgen

//skip512 S2941C2_nt

#else // __cplusplus

extern void _ZN10S2941C2_ntC1Ev();
extern void _ZN10S2941C2_ntD1Ev();
Name_Map name_map_S2941C2_nt[] = {
  NSPAIR(_ZN10S2941C2_ntC1Ev),
  NSPAIR(_ZN10S2941C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
static Base_Class bases_S2941C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI10S2941C2_nt[];
extern void _ZN10S2941C2_ntD1Ev();
extern void _ZN10S2941C2_ntD0Ev();
extern void _ZN10S2941C2_nt2v6Ev();
extern void _ZN10S2941C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S2941C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2941C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2941C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2941C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2941C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2941C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S2941C2_nt[];
VTBL_ENTRY *P__ZTI10S2941C2_nt = _ZTI10S2941C2_nt; 
extern  VTBL_ENTRY _ZTV10S2941C2_nt[];
Class_Descriptor cd_S2941C2_nt = {  "S2941C2_nt", // class name
  bases_S2941C2_nt, 1,
  &(vtc_S2941C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S2941C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2941C2_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  S2941C1  : S2941C2_nt {
  void *s2941c1f0;
  char s2941c1f1;
  void *s2941c1f2;
  virtual  ~S2941C1(); // _ZN7S2941C1D1Ev
  virtual void  v1(); // _ZN7S2941C12v1Ev
  virtual void  v2(); // _ZN7S2941C12v2Ev
  virtual void  v3(); // _ZN7S2941C12v3Ev
  virtual void  v4(); // _ZN7S2941C12v4Ev
  virtual void  v5(); // _ZN7S2941C12v5Ev
  S2941C1(); // tgen
};
//SIG(1 S2941C1) C1{ BC2{ BC3{ m} vd v6 v7} vd v1 v2 v3 v4 v5 Fp Fc Fp}


 S2941C1 ::~S2941C1(){ note_dtor("S2941C1", this);}
void  S2941C1 ::v1(){vfunc_called(this, "_ZN7S2941C12v1Ev");}
void  S2941C1 ::v2(){vfunc_called(this, "_ZN7S2941C12v2Ev");}
void  S2941C1 ::v3(){vfunc_called(this, "_ZN7S2941C12v3Ev");}
void  S2941C1 ::v4(){vfunc_called(this, "_ZN7S2941C12v4Ev");}
void  S2941C1 ::v5(){vfunc_called(this, "_ZN7S2941C12v5Ev");}
S2941C1 ::S2941C1(){ note_ctor("S2941C1", this);} // tgen

static void Test_S2941C1()
{
  extern Class_Descriptor cd_S2941C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S2941C1, buf);
    S2941C1 *dp, &lv = *(dp=new (buf) S2941C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S2941C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2941C1)");
    check_base_class_offset(lv, (S5166C37*)(S2941C2_nt*), 0, "S2941C1");
    check_base_class_offset(lv, (S2941C2_nt*), 0, "S2941C1");
    check_field_offset(lv, s2941c1f0, ABISELECT(8,4), "S2941C1.s2941c1f0");
    check_field_offset(lv, s2941c1f1, ABISELECT(16,8), "S2941C1.s2941c1f1");
    check_field_offset(lv, s2941c1f2, ABISELECT(24,12), "S2941C1.s2941c1f2");
    test_class_info(&lv, &cd_S2941C1);
    dp->~S2941C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2941C1(Test_S2941C1, "S2941C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S2941C1C1Ev();
extern void _ZN7S2941C1D1Ev();
Name_Map name_map_S2941C1[] = {
  NSPAIR(_ZN7S2941C1C1Ev),
  NSPAIR(_ZN7S2941C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S2941C2_nt;
extern VTBL_ENTRY _ZTI10S2941C2_nt[];
extern  VTBL_ENTRY _ZTV10S2941C2_nt[];
static Base_Class bases_S2941C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2941C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2941C1[];
extern void _ZN7S2941C1D1Ev();
extern void _ZN7S2941C1D0Ev();
extern void _ZN10S2941C2_nt2v6Ev();
extern void _ZN10S2941C2_nt2v7Ev();
extern void _ZN7S2941C12v1Ev();
extern void _ZN7S2941C12v2Ev();
extern void _ZN7S2941C12v3Ev();
extern void _ZN7S2941C12v4Ev();
extern void _ZN7S2941C12v5Ev();
static  VTBL_ENTRY vtc_S2941C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2941C1[0]),
  (VTBL_ENTRY)&_ZN7S2941C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2941C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2941C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2941C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN7S2941C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2941C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2941C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2941C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2941C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S2941C1[];
extern  VTBL_ENTRY _ZTV7S2941C1[];
Class_Descriptor cd_S2941C1 = {  "S2941C1", // class name
  bases_S2941C1, 2,
  &(vtc_S2941C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S2941C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2941C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14598C1  {
  void *s14598c1f0[3];
  ::S1474C10_nt s14598c1f1;
  int s14598c1f2[4];
  ::S1378C23 s14598c1f3;
};
//SIG(1 S14598C1) C1{ Fp[3] FC2{ m Fi[4]} Fi[4] FC3{ BC4{ m Fp Fi[2]}}}



static void Test_S14598C1()
{
  {
    init_simple_test("S14598C1");
    S14598C1 lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S14598C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14598C1)");
    check_field_offset(lv, s14598c1f0, 0, "S14598C1.s14598c1f0");
    check_field_offset(lv, s14598c1f1, ABISELECT(24,12), "S14598C1.s14598c1f1");
    check_field_offset(lv, s14598c1f2, ABISELECT(40,28), "S14598C1.s14598c1f2");
    check_field_offset(lv, s14598c1f3, ABISELECT(56,44), "S14598C1.s14598c1f3");
  }
}
static Arrange_To_Call_Me vS14598C1(Test_S14598C1, "S14598C1", ABISELECT(72,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4579C3  {
  virtual  ~S4579C3(); // _ZN7S4579C3D1Ev
  virtual void  v2(); // _ZN7S4579C32v2Ev
  virtual void  v3(); // _ZN7S4579C32v3Ev
  S4579C3(); // tgen
};
//SIG(-1 S4579C3) C1{ vd v1 v2}


 S4579C3 ::~S4579C3(){ note_dtor("S4579C3", this);}
void  S4579C3 ::v2(){vfunc_called(this, "_ZN7S4579C32v2Ev");}
void  S4579C3 ::v3(){vfunc_called(this, "_ZN7S4579C32v3Ev");}
S4579C3 ::S4579C3(){ note_ctor("S4579C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4579C3C1Ev();
extern void _ZN7S4579C3D1Ev();
Name_Map name_map_S4579C3[] = {
  NSPAIR(_ZN7S4579C3C1Ev),
  NSPAIR(_ZN7S4579C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4579C3[];
extern void _ZN7S4579C3D1Ev();
extern void _ZN7S4579C3D0Ev();
extern void _ZN7S4579C32v2Ev();
extern void _ZN7S4579C32v3Ev();
static  VTBL_ENTRY vtc_S4579C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4579C3[0]),
  (VTBL_ENTRY)&_ZN7S4579C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4579C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4579C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4579C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4579C3[];
extern  VTBL_ENTRY _ZTV7S4579C3[];
Class_Descriptor cd_S4579C3 = {  "S4579C3", // class name
  0,0,//no base classes
  &(vtc_S4579C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4579C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4579C3),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  S4579C2  : S4579C3 {
  ::S17448C6 s4579c2f0;
  virtual void  v4(); // _ZN7S4579C22v4Ev
  virtual void  v5(); // _ZN7S4579C22v5Ev
  ~S4579C2(); // tgen
  S4579C2(); // tgen
};
//SIG(-1 S4579C2) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m Fp[2]}}


void  S4579C2 ::v4(){vfunc_called(this, "_ZN7S4579C22v4Ev");}
void  S4579C2 ::v5(){vfunc_called(this, "_ZN7S4579C22v5Ev");}
S4579C2 ::~S4579C2(){ note_dtor("S4579C2", this);} // tgen
S4579C2 ::S4579C2(){ note_ctor("S4579C2", this);} // tgen

static void Test_S4579C2()
{
  extern Class_Descriptor cd_S4579C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S4579C2, buf);
    S4579C2 *dp, &lv = *(dp=new (buf) S4579C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4579C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4579C2)");
    check_base_class_offset(lv, (S4579C3*), 0, "S4579C2");
    check_field_offset(lv, s4579c2f0, ABISELECT(8,4), "S4579C2.s4579c2f0");
    test_class_info(&lv, &cd_S4579C2);
    dp->~S4579C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4579C2(Test_S4579C2, "S4579C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S4579C2C1Ev();
extern void _ZN7S4579C2D1Ev();
Name_Map name_map_S4579C2[] = {
  NSPAIR(_ZN7S4579C2C1Ev),
  NSPAIR(_ZN7S4579C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4579C3;
extern VTBL_ENTRY _ZTI7S4579C3[];
extern  VTBL_ENTRY _ZTV7S4579C3[];
static Base_Class bases_S4579C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4579C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4579C2[];
extern void _ZN7S4579C2D1Ev();
extern void _ZN7S4579C2D0Ev();
extern void _ZN7S4579C32v2Ev();
extern void _ZN7S4579C32v3Ev();
extern void _ZN7S4579C22v4Ev();
extern void _ZN7S4579C22v5Ev();
static  VTBL_ENTRY vtc_S4579C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4579C2[0]),
  (VTBL_ENTRY)&_ZN7S4579C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4579C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4579C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4579C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4579C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4579C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4579C2[];
extern  VTBL_ENTRY _ZTV7S4579C2[];
Class_Descriptor cd_S4579C2 = {  "S4579C2", // class name
  bases_S4579C2, 1,
  &(vtc_S4579C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S4579C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4579C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4579C1  : S4579C2 {
  int s4579c1f0;
  virtual  ~S4579C1(); // _ZN7S4579C1D1Ev
  virtual void  v1(); // _ZN7S4579C12v1Ev
  S4579C1(); // tgen
};
//SIG(1 S4579C1) C1{ BC2{ BC3{ vd v2 v3} v4 v5 FC4{ m Fp[2]}} vd v1 Fi}


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

static void Test_S4579C1()
{
  extern Class_Descriptor cd_S4579C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S4579C1, buf);
    S4579C1 *dp, &lv = *(dp=new (buf) S4579C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S4579C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4579C1)");
    check_base_class_offset(lv, (S4579C3*)(S4579C2*), 0, "S4579C1");
    check_base_class_offset(lv, (S4579C2*), 0, "S4579C1");
    check_field_offset(lv, s4579c1f0, ABISELECT(24,12), "S4579C1.s4579c1f0");
    test_class_info(&lv, &cd_S4579C1);
    dp->~S4579C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4579C1(Test_S4579C1, "S4579C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S4579C1C1Ev();
extern void _ZN7S4579C1D1Ev();
Name_Map name_map_S4579C1[] = {
  NSPAIR(_ZN7S4579C1C1Ev),
  NSPAIR(_ZN7S4579C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4579C3;
extern VTBL_ENTRY _ZTI7S4579C3[];
extern  VTBL_ENTRY _ZTV7S4579C3[];
extern Class_Descriptor cd_S4579C2;
extern VTBL_ENTRY _ZTI7S4579C2[];
extern  VTBL_ENTRY _ZTV7S4579C2[];
static Base_Class bases_S4579C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4579C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4579C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4579C1[];
extern void _ZN7S4579C1D1Ev();
extern void _ZN7S4579C1D0Ev();
extern void _ZN7S4579C32v2Ev();
extern void _ZN7S4579C32v3Ev();
extern void _ZN7S4579C22v4Ev();
extern void _ZN7S4579C22v5Ev();
extern void _ZN7S4579C12v1Ev();
static  VTBL_ENTRY vtc_S4579C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4579C1[0]),
  (VTBL_ENTRY)&_ZN7S4579C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4579C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4579C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4579C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4579C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4579C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4579C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4579C1[];
extern  VTBL_ENTRY _ZTV7S4579C1[];
Class_Descriptor cd_S4579C1 = {  "S4579C1", // class name
  bases_S4579C1, 2,
  &(vtc_S4579C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S4579C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4579C1),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  S4577C3  {
  virtual  ~S4577C3(); // _ZN7S4577C3D1Ev
  virtual void  v2(); // _ZN7S4577C32v2Ev
  virtual void  v3(); // _ZN7S4577C32v3Ev
  S4577C3(); // tgen
};
//SIG(-1 S4577C3) C1{ vd v1 v2}


 S4577C3 ::~S4577C3(){ note_dtor("S4577C3", this);}
void  S4577C3 ::v2(){vfunc_called(this, "_ZN7S4577C32v2Ev");}
void  S4577C3 ::v3(){vfunc_called(this, "_ZN7S4577C32v3Ev");}
S4577C3 ::S4577C3(){ note_ctor("S4577C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4577C3C1Ev();
extern void _ZN7S4577C3D1Ev();
Name_Map name_map_S4577C3[] = {
  NSPAIR(_ZN7S4577C3C1Ev),
  NSPAIR(_ZN7S4577C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4577C3[];
extern void _ZN7S4577C3D1Ev();
extern void _ZN7S4577C3D0Ev();
extern void _ZN7S4577C32v2Ev();
extern void _ZN7S4577C32v3Ev();
static  VTBL_ENTRY vtc_S4577C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4577C3[0]),
  (VTBL_ENTRY)&_ZN7S4577C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4577C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4577C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4577C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4577C3[];
extern  VTBL_ENTRY _ZTV7S4577C3[];
Class_Descriptor cd_S4577C3 = {  "S4577C3", // class name
  0,0,//no base classes
  &(vtc_S4577C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4577C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4577C3),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  S4577C2  : S4577C3 {
  ::S17448C6 s4577c2f0;
  virtual void  v4(); // _ZN7S4577C22v4Ev
  virtual void  v5(); // _ZN7S4577C22v5Ev
  ~S4577C2(); // tgen
  S4577C2(); // tgen
};
//SIG(-1 S4577C2) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m Fp[2]}}


void  S4577C2 ::v4(){vfunc_called(this, "_ZN7S4577C22v4Ev");}
void  S4577C2 ::v5(){vfunc_called(this, "_ZN7S4577C22v5Ev");}
S4577C2 ::~S4577C2(){ note_dtor("S4577C2", this);} // tgen
S4577C2 ::S4577C2(){ note_ctor("S4577C2", this);} // tgen

static void Test_S4577C2()
{
  extern Class_Descriptor cd_S4577C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S4577C2, buf);
    S4577C2 *dp, &lv = *(dp=new (buf) S4577C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4577C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4577C2)");
    check_base_class_offset(lv, (S4577C3*), 0, "S4577C2");
    check_field_offset(lv, s4577c2f0, ABISELECT(8,4), "S4577C2.s4577c2f0");
    test_class_info(&lv, &cd_S4577C2);
    dp->~S4577C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4577C2(Test_S4577C2, "S4577C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S4577C2C1Ev();
extern void _ZN7S4577C2D1Ev();
Name_Map name_map_S4577C2[] = {
  NSPAIR(_ZN7S4577C2C1Ev),
  NSPAIR(_ZN7S4577C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4577C3;
extern VTBL_ENTRY _ZTI7S4577C3[];
extern  VTBL_ENTRY _ZTV7S4577C3[];
static Base_Class bases_S4577C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4577C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4577C2[];
extern void _ZN7S4577C2D1Ev();
extern void _ZN7S4577C2D0Ev();
extern void _ZN7S4577C32v2Ev();
extern void _ZN7S4577C32v3Ev();
extern void _ZN7S4577C22v4Ev();
extern void _ZN7S4577C22v5Ev();
static  VTBL_ENTRY vtc_S4577C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4577C2[0]),
  (VTBL_ENTRY)&_ZN7S4577C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4577C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4577C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4577C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4577C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4577C2[];
extern  VTBL_ENTRY _ZTV7S4577C2[];
Class_Descriptor cd_S4577C2 = {  "S4577C2", // class name
  bases_S4577C2, 1,
  &(vtc_S4577C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S4577C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4577C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4577C1  : S4577C2 {
  int s4577c1f0[2];
  virtual void  v1(); // _ZN7S4577C12v1Ev
  ~S4577C1(); // tgen
  S4577C1(); // tgen
};
//SIG(1 S4577C1) C1{ BC2{ BC3{ vd v2 v3} v4 v5 FC4{ m Fp[2]}} v1 Fi[2]}


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

static void Test_S4577C1()
{
  extern Class_Descriptor cd_S4577C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S4577C1, buf);
    S4577C1 *dp, &lv = *(dp=new (buf) S4577C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S4577C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4577C1)");
    check_base_class_offset(lv, (S4577C3*)(S4577C2*), 0, "S4577C1");
    check_base_class_offset(lv, (S4577C2*), 0, "S4577C1");
    check_field_offset(lv, s4577c1f0, ABISELECT(24,12), "S4577C1.s4577c1f0");
    test_class_info(&lv, &cd_S4577C1);
    dp->~S4577C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4577C1(Test_S4577C1, "S4577C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S4577C1C1Ev();
extern void _ZN7S4577C1D1Ev();
Name_Map name_map_S4577C1[] = {
  NSPAIR(_ZN7S4577C1C1Ev),
  NSPAIR(_ZN7S4577C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4577C3;
extern VTBL_ENTRY _ZTI7S4577C3[];
extern  VTBL_ENTRY _ZTV7S4577C3[];
extern Class_Descriptor cd_S4577C2;
extern VTBL_ENTRY _ZTI7S4577C2[];
extern  VTBL_ENTRY _ZTV7S4577C2[];
static Base_Class bases_S4577C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4577C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4577C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4577C1[];
extern void _ZN7S4577C1D1Ev();
extern void _ZN7S4577C1D0Ev();
extern void _ZN7S4577C32v2Ev();
extern void _ZN7S4577C32v3Ev();
extern void _ZN7S4577C22v4Ev();
extern void _ZN7S4577C22v5Ev();
extern void _ZN7S4577C12v1Ev();
static  VTBL_ENTRY vtc_S4577C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4577C1[0]),
  (VTBL_ENTRY)&_ZN7S4577C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4577C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4577C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4577C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4577C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4577C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4577C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4577C1[];
extern  VTBL_ENTRY _ZTV7S4577C1[];
Class_Descriptor cd_S4577C1 = {  "S4577C1", // class name
  bases_S4577C1, 2,
  &(vtc_S4577C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S4577C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4577C1),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  S3924C3_nt  {
  __tsi64 s3924c3f0;
  void  mf3924c3(); // _ZN10S3924C3_nt8mf3924c3Ev
  virtual  ~S3924C3_nt(); // _ZN10S3924C3_ntD1Ev
  S3924C3_nt(); // tgen
};
//SIG(-1 S3924C3_nt) C1{ vd m FL}


void  S3924C3_nt ::mf3924c3(){}
 S3924C3_nt ::~S3924C3_nt(){ note_dtor("S3924C3_nt", this);}
S3924C3_nt ::S3924C3_nt(){ note_ctor("S3924C3_nt", this);} // tgen

//skip512 S3924C3_nt

#else // __cplusplus

extern void _ZN10S3924C3_ntC1Ev();
extern void _ZN10S3924C3_ntD1Ev();
Name_Map name_map_S3924C3_nt[] = {
  NSPAIR(_ZN10S3924C3_ntC1Ev),
  NSPAIR(_ZN10S3924C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3924C3_nt[];
extern void _ZN10S3924C3_ntD1Ev();
extern void _ZN10S3924C3_ntD0Ev();
static  VTBL_ENTRY vtc_S3924C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3924C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3924C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3924C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3924C3_nt[];
VTBL_ENTRY *P__ZTI10S3924C3_nt = _ZTI10S3924C3_nt; 
extern  VTBL_ENTRY _ZTV10S3924C3_nt[];
Class_Descriptor cd_S3924C3_nt = {  "S3924C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3924C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S3924C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3924C3_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  S3924C2_nt  : S3924C3_nt {
  int s3924c2f0[3];
  virtual  ~S3924C2_nt(); // _ZN10S3924C2_ntD1Ev
  S3924C2_nt(); // tgen
};
//SIG(-1 S3924C2_nt) C1{ BC2{ vd m FL} vd Fi[3]}


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

//skip512 S3924C2_nt

#else // __cplusplus

extern void _ZN10S3924C2_ntC1Ev();
extern void _ZN10S3924C2_ntD1Ev();
Name_Map name_map_S3924C2_nt[] = {
  NSPAIR(_ZN10S3924C2_ntC1Ev),
  NSPAIR(_ZN10S3924C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3924C3_nt;
extern VTBL_ENTRY _ZTI10S3924C3_nt[];
extern  VTBL_ENTRY _ZTV10S3924C3_nt[];
static Base_Class bases_S3924C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3924C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI10S3924C2_nt[];
extern void _ZN10S3924C2_ntD1Ev();
extern void _ZN10S3924C2_ntD0Ev();
static  VTBL_ENTRY vtc_S3924C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3924C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3924C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3924C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3924C2_nt[];
VTBL_ENTRY *P__ZTI10S3924C2_nt = _ZTI10S3924C2_nt; 
extern  VTBL_ENTRY _ZTV10S3924C2_nt[];
Class_Descriptor cd_S3924C2_nt = {  "S3924C2_nt", // class name
  bases_S3924C2_nt, 1,
  &(vtc_S3924C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI10S3924C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3924C2_nt),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  S3924C1  : S3924C2_nt {
  ::S16496C4_nt s3924c1f0;
  virtual  ~S3924C1(); // _ZN7S3924C1D1Ev
  S3924C1(); // tgen
};
//SIG(1 S3924C1) C1{ BC2{ BC3{ vd m FL} vd Fi[3]} vd FC4{ vd m Fp Fi}}


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

static void Test_S3924C1()
{
  extern Class_Descriptor cd_S3924C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S3924C1, buf);
    S3924C1 *dp, &lv = *(dp=new (buf) S3924C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S3924C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3924C1)");
    check_base_class_offset(lv, (S3924C3_nt*)(S3924C2_nt*), 0, "S3924C1");
    check_base_class_offset(lv, (S3924C2_nt*), 0, "S3924C1");
    check_field_offset(lv, s3924c1f0, ABISELECT(32,24), "S3924C1.s3924c1f0");
    test_class_info(&lv, &cd_S3924C1);
    dp->~S3924C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3924C1(Test_S3924C1, "S3924C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S3924C1C1Ev();
extern void _ZN7S3924C1D1Ev();
Name_Map name_map_S3924C1[] = {
  NSPAIR(_ZN7S3924C1C1Ev),
  NSPAIR(_ZN7S3924C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3924C3_nt;
extern VTBL_ENTRY _ZTI10S3924C3_nt[];
extern  VTBL_ENTRY _ZTV10S3924C3_nt[];
extern Class_Descriptor cd_S3924C2_nt;
extern VTBL_ENTRY _ZTI10S3924C2_nt[];
extern  VTBL_ENTRY _ZTV10S3924C2_nt[];
static Base_Class bases_S3924C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3924C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3924C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3924C1[];
extern void _ZN7S3924C1D1Ev();
extern void _ZN7S3924C1D0Ev();
static  VTBL_ENTRY vtc_S3924C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3924C1[0]),
  (VTBL_ENTRY)&_ZN7S3924C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3924C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3924C1[];
extern  VTBL_ENTRY _ZTV7S3924C1[];
Class_Descriptor cd_S3924C1 = {  "S3924C1", // class name
  bases_S3924C1, 2,
  &(vtc_S3924C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S3924C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3924C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20343C2  {
  __tsi64 s20343c2f0:8;
  virtual void  v7(); // _ZN8S20343C22v7Ev
  virtual void  v8(); // _ZN8S20343C22v8Ev
  virtual void  v9(); // _ZN8S20343C22v9Ev
  ~S20343C2(); // tgen
  S20343C2(); // tgen
};
//SIG(-1 S20343C2) C1{ v1 v2 v3 FL:8}


void  S20343C2 ::v7(){vfunc_called(this, "_ZN8S20343C22v7Ev");}
void  S20343C2 ::v8(){vfunc_called(this, "_ZN8S20343C22v8Ev");}
void  S20343C2 ::v9(){vfunc_called(this, "_ZN8S20343C22v9Ev");}
S20343C2 ::~S20343C2(){ note_dtor("S20343C2", this);} // tgen
S20343C2 ::S20343C2(){ note_ctor("S20343C2", this);} // tgen

static void Test_S20343C2()
{
  extern Class_Descriptor cd_S20343C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,3)];
    init_test(&cd_S20343C2, buf);
    S20343C2 *dp, &lv = *(dp=new (buf) S20343C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20343C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20343C2)");
    set_bf_and_test(lv, s20343c2f0, ABISELECT(8,4), 0, 8, 1, "S20343C2");
    set_bf_and_test(lv, s20343c2f0, ABISELECT(8,4), 0, 8, hide_sll(1LL<<7), "S20343C2");
    test_class_info(&lv, &cd_S20343C2);
    dp->~S20343C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20343C2(Test_S20343C2, "S20343C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20343C2C1Ev();
extern void _ZN8S20343C2D1Ev();
Name_Map name_map_S20343C2[] = {
  NSPAIR(_ZN8S20343C2C1Ev),
  NSPAIR(_ZN8S20343C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20343C2[];
extern void _ZN8S20343C22v7Ev();
extern void _ZN8S20343C22v8Ev();
extern void _ZN8S20343C22v9Ev();
static  VTBL_ENTRY vtc_S20343C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20343C2[0]),
  (VTBL_ENTRY)&_ZN8S20343C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20343C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20343C22v9Ev,
};
extern VTBL_ENTRY _ZTI8S20343C2[];
extern  VTBL_ENTRY _ZTV8S20343C2[];
Class_Descriptor cd_S20343C2 = {  "S20343C2", // class name
  0,0,//no base classes
  &(vtc_S20343C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20343C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20343C2),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  S20343C1  : virtual S20343C2 {
  long double s20343c1f0;
  virtual  ~S20343C1(); // _ZN8S20343C1D2Ev
  virtual void  v1(); // _ZN8S20343C12v1Ev
  virtual void  v2(); // _ZN8S20343C12v2Ev
  virtual void  v3(); // _ZN8S20343C12v3Ev
  virtual void  v4(); // _ZN8S20343C12v4Ev
  virtual void  v5(); // _ZN8S20343C12v5Ev
  virtual void  v6(); // _ZN8S20343C12v6Ev
  S20343C1(); // tgen
};
//SIG(1 S20343C1) C1{ VBC2{ v7 v8 v9 FL:8} vd v1 v2 v3 v4 v5 v6 FD}


 S20343C1 ::~S20343C1(){ note_dtor("S20343C1", this);}
void  S20343C1 ::v1(){vfunc_called(this, "_ZN8S20343C12v1Ev");}
void  S20343C1 ::v2(){vfunc_called(this, "_ZN8S20343C12v2Ev");}
void  S20343C1 ::v3(){vfunc_called(this, "_ZN8S20343C12v3Ev");}
void  S20343C1 ::v4(){vfunc_called(this, "_ZN8S20343C12v4Ev");}
void  S20343C1 ::v5(){vfunc_called(this, "_ZN8S20343C12v5Ev");}
void  S20343C1 ::v6(){vfunc_called(this, "_ZN8S20343C12v6Ev");}
S20343C1 ::S20343C1(){ note_ctor("S20343C1", this);} // tgen

static void Test_S20343C1()
{
  extern Class_Descriptor cd_S20343C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S20343C1, buf);
    S20343C1 *dp, &lv = *(dp=new (buf) S20343C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20343C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20343C1)");
    check_base_class_offset(lv, (S20343C2*), ABISELECT(32,16), "S20343C1");
    check_field_offset(lv, s20343c1f0, ABISELECT(16,4), "S20343C1.s20343c1f0");
    test_class_info(&lv, &cd_S20343C1);
    dp->~S20343C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20343C1(Test_S20343C1, "S20343C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20343C1C1Ev();
extern void _ZN8S20343C1D2Ev();
Name_Map name_map_S20343C1[] = {
  NSPAIR(_ZN8S20343C1C1Ev),
  NSPAIR(_ZN8S20343C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20343C2;
extern VTBL_ENTRY _ZTI8S20343C2[];
extern  VTBL_ENTRY _ZTV8S20343C2[];
static Base_Class bases_S20343C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20343C2,    ABISELECT(32,16), //bcp->offset
    11, //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 _ZTI8S20343C1[];
extern void _ZN8S20343C1D1Ev();
extern void _ZN8S20343C1D0Ev();
extern void _ZN8S20343C12v1Ev();
extern void _ZN8S20343C12v2Ev();
extern void _ZN8S20343C12v3Ev();
extern void _ZN8S20343C12v4Ev();
extern void _ZN8S20343C12v5Ev();
extern void _ZN8S20343C12v6Ev();
extern void _ZN8S20343C22v7Ev();
extern void _ZN8S20343C22v8Ev();
extern void _ZN8S20343C22v9Ev();
static  VTBL_ENTRY vtc_S20343C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20343C1[0]),
  (VTBL_ENTRY)&_ZN8S20343C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20343C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20343C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20343C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20343C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20343C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20343C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20343C12v6Ev,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20343C1[0]),
  (VTBL_ENTRY)&_ZN8S20343C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20343C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20343C22v9Ev,
};
extern VTBL_ENTRY _ZTV8S20343C1[];
static  VTT_ENTRY vtt_S20343C1[] = {
  {&(_ZTV8S20343C1[3]),  3,19},
  {&(_ZTV8S20343C1[16]),  16,19},
};
extern VTBL_ENTRY _ZTI8S20343C1[];
extern  VTBL_ENTRY _ZTV8S20343C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20343C1[];
Class_Descriptor cd_S20343C1 = {  "S20343C1", // class name
  bases_S20343C1, 1,
  &(vtc_S20343C1[0]), // expected_vtbl_contents
  &(vtt_S20343C1[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20343C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20343C1),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20343C1),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  S16839C1  {
  int s16839c1f0;
  ::S16496C4_nt s16839c1f1;
  ::S16496C4_nt s16839c1f2;
  ::S16496C4_nt s16839c1f3;
  ::S16496C4_nt s16839c1f4;
  ::S16496C4_nt s16839c1f5;
  int s16839c1f6[3];
  void  mf16839c1(); // _ZN8S16839C19mf16839c1Ev
};
//SIG(1 S16839C1) C1{ m Fi FC2{ vd m Fp Fi} FC2 FC2 FC2 FC2 Fi[3]}


void  S16839C1 ::mf16839c1(){}

static void Test_S16839C1()
{
  {
    init_simple_test("S16839C1");
    S16839C1 lv;
    check2(sizeof(lv), ABISELECT(144,76), "sizeof(S16839C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16839C1)");
    check_field_offset(lv, s16839c1f0, 0, "S16839C1.s16839c1f0");
    check_field_offset(lv, s16839c1f1, ABISELECT(8,4), "S16839C1.s16839c1f1");
    check_field_offset(lv, s16839c1f2, ABISELECT(32,16), "S16839C1.s16839c1f2");
    check_field_offset(lv, s16839c1f3, ABISELECT(56,28), "S16839C1.s16839c1f3");
    check_field_offset(lv, s16839c1f4, ABISELECT(80,40), "S16839C1.s16839c1f4");
    check_field_offset(lv, s16839c1f5, ABISELECT(104,52), "S16839C1.s16839c1f5");
    check_field_offset(lv, s16839c1f6, ABISELECT(128,64), "S16839C1.s16839c1f6");
  }
}
static Arrange_To_Call_Me vS16839C1(Test_S16839C1, "S16839C1", ABISELECT(144,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4578C3  {
  virtual  ~S4578C3(); // _ZN7S4578C3D1Ev
  virtual void  v2(); // _ZN7S4578C32v2Ev
  virtual void  v3(); // _ZN7S4578C32v3Ev
  S4578C3(); // tgen
};
//SIG(-1 S4578C3) C1{ vd v1 v2}


 S4578C3 ::~S4578C3(){ note_dtor("S4578C3", this);}
void  S4578C3 ::v2(){vfunc_called(this, "_ZN7S4578C32v2Ev");}
void  S4578C3 ::v3(){vfunc_called(this, "_ZN7S4578C32v3Ev");}
S4578C3 ::S4578C3(){ note_ctor("S4578C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S4578C3C1Ev();
extern void _ZN7S4578C3D1Ev();
Name_Map name_map_S4578C3[] = {
  NSPAIR(_ZN7S4578C3C1Ev),
  NSPAIR(_ZN7S4578C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4578C3[];
extern void _ZN7S4578C3D1Ev();
extern void _ZN7S4578C3D0Ev();
extern void _ZN7S4578C32v2Ev();
extern void _ZN7S4578C32v3Ev();
static  VTBL_ENTRY vtc_S4578C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4578C3[0]),
  (VTBL_ENTRY)&_ZN7S4578C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4578C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4578C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4578C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4578C3[];
extern  VTBL_ENTRY _ZTV7S4578C3[];
Class_Descriptor cd_S4578C3 = {  "S4578C3", // class name
  0,0,//no base classes
  &(vtc_S4578C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4578C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4578C3),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  S4578C2  : S4578C3 {
  ::S17448C6 s4578c2f0;
  virtual void  v4(); // _ZN7S4578C22v4Ev
  virtual void  v5(); // _ZN7S4578C22v5Ev
  ~S4578C2(); // tgen
  S4578C2(); // tgen
};
//SIG(-1 S4578C2) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m Fp[2]}}


void  S4578C2 ::v4(){vfunc_called(this, "_ZN7S4578C22v4Ev");}
void  S4578C2 ::v5(){vfunc_called(this, "_ZN7S4578C22v5Ev");}
S4578C2 ::~S4578C2(){ note_dtor("S4578C2", this);} // tgen
S4578C2 ::S4578C2(){ note_ctor("S4578C2", this);} // tgen

static void Test_S4578C2()
{
  extern Class_Descriptor cd_S4578C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S4578C2, buf);
    S4578C2 *dp, &lv = *(dp=new (buf) S4578C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4578C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4578C2)");
    check_base_class_offset(lv, (S4578C3*), 0, "S4578C2");
    check_field_offset(lv, s4578c2f0, ABISELECT(8,4), "S4578C2.s4578c2f0");
    test_class_info(&lv, &cd_S4578C2);
    dp->~S4578C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4578C2(Test_S4578C2, "S4578C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S4578C2C1Ev();
extern void _ZN7S4578C2D1Ev();
Name_Map name_map_S4578C2[] = {
  NSPAIR(_ZN7S4578C2C1Ev),
  NSPAIR(_ZN7S4578C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4578C3;
extern VTBL_ENTRY _ZTI7S4578C3[];
extern  VTBL_ENTRY _ZTV7S4578C3[];
static Base_Class bases_S4578C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4578C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4578C2[];
extern void _ZN7S4578C2D1Ev();
extern void _ZN7S4578C2D0Ev();
extern void _ZN7S4578C32v2Ev();
extern void _ZN7S4578C32v3Ev();
extern void _ZN7S4578C22v4Ev();
extern void _ZN7S4578C22v5Ev();
static  VTBL_ENTRY vtc_S4578C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4578C2[0]),
  (VTBL_ENTRY)&_ZN7S4578C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4578C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4578C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4578C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4578C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4578C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4578C2[];
extern  VTBL_ENTRY _ZTV7S4578C2[];
Class_Descriptor cd_S4578C2 = {  "S4578C2", // class name
  bases_S4578C2, 1,
  &(vtc_S4578C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S4578C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4578C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4578C1  : S4578C2 {
  int s4578c1f0;
  virtual void  v1(); // _ZN7S4578C12v1Ev
  ~S4578C1(); // tgen
  S4578C1(); // tgen
};
//SIG(1 S4578C1) C1{ BC2{ BC3{ vd v2 v3} v4 v5 FC4{ m Fp[2]}} v1 Fi}


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

static void Test_S4578C1()
{
  extern Class_Descriptor cd_S4578C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S4578C1, buf);
    S4578C1 *dp, &lv = *(dp=new (buf) S4578C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S4578C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4578C1)");
    check_base_class_offset(lv, (S4578C3*)(S4578C2*), 0, "S4578C1");
    check_base_class_offset(lv, (S4578C2*), 0, "S4578C1");
    check_field_offset(lv, s4578c1f0, ABISELECT(24,12), "S4578C1.s4578c1f0");
    test_class_info(&lv, &cd_S4578C1);
    dp->~S4578C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4578C1(Test_S4578C1, "S4578C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S4578C1C1Ev();
extern void _ZN7S4578C1D1Ev();
Name_Map name_map_S4578C1[] = {
  NSPAIR(_ZN7S4578C1C1Ev),
  NSPAIR(_ZN7S4578C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4578C3;
extern VTBL_ENTRY _ZTI7S4578C3[];
extern  VTBL_ENTRY _ZTV7S4578C3[];
extern Class_Descriptor cd_S4578C2;
extern VTBL_ENTRY _ZTI7S4578C2[];
extern  VTBL_ENTRY _ZTV7S4578C2[];
static Base_Class bases_S4578C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4578C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4578C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4578C1[];
extern void _ZN7S4578C1D1Ev();
extern void _ZN7S4578C1D0Ev();
extern void _ZN7S4578C32v2Ev();
extern void _ZN7S4578C32v3Ev();
extern void _ZN7S4578C22v4Ev();
extern void _ZN7S4578C22v5Ev();
extern void _ZN7S4578C12v1Ev();
static  VTBL_ENTRY vtc_S4578C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4578C1[0]),
  (VTBL_ENTRY)&_ZN7S4578C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4578C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4578C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4578C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4578C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4578C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4578C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4578C1[];
extern  VTBL_ENTRY _ZTV7S4578C1[];
Class_Descriptor cd_S4578C1 = {  "S4578C1", // class name
  bases_S4578C1, 2,
  &(vtc_S4578C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S4578C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4578C1),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  S3940C2_nt  : S3924C3_nt {
  int s3940c2f0;
  virtual  ~S3940C2_nt(); // _ZN10S3940C2_ntD1Ev
  S3940C2_nt(); // tgen
};
//SIG(-1 S3940C2_nt) C1{ BC2{ vd m FL} vd Fi}


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

//skip512 S3940C2_nt

#else // __cplusplus

extern void _ZN10S3940C2_ntC1Ev();
extern void _ZN10S3940C2_ntD1Ev();
Name_Map name_map_S3940C2_nt[] = {
  NSPAIR(_ZN10S3940C2_ntC1Ev),
  NSPAIR(_ZN10S3940C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3924C3_nt;
extern VTBL_ENTRY _ZTI10S3924C3_nt[];
extern  VTBL_ENTRY _ZTV10S3924C3_nt[];
static Base_Class bases_S3940C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3924C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI10S3940C2_nt[];
extern void _ZN10S3940C2_ntD1Ev();
extern void _ZN10S3940C2_ntD0Ev();
static  VTBL_ENTRY vtc_S3940C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3940C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3940C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3940C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3940C2_nt[];
VTBL_ENTRY *P__ZTI10S3940C2_nt = _ZTI10S3940C2_nt; 
extern  VTBL_ENTRY _ZTV10S3940C2_nt[];
Class_Descriptor cd_S3940C2_nt = {  "S3940C2_nt", // class name
  bases_S3940C2_nt, 1,
  &(vtc_S3940C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI10S3940C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3940C2_nt),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  S3940C1  : S3940C2_nt {
  ::S16496C4_nt s3940c1f0;
  virtual  ~S3940C1(); // _ZN7S3940C1D1Ev
  S3940C1(); // tgen
};
//SIG(1 S3940C1) C1{ BC2{ BC3{ vd m FL} vd Fi} vd FC4{ vd m Fp Fi}}


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

static void Test_S3940C1()
{
  extern Class_Descriptor cd_S3940C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3940C1, buf);
    S3940C1 *dp, &lv = *(dp=new (buf) S3940C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3940C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3940C1)");
    check_base_class_offset(lv, (S3924C3_nt*)(S3940C2_nt*), 0, "S3940C1");
    check_base_class_offset(lv, (S3940C2_nt*), 0, "S3940C1");
    check_field_offset(lv, s3940c1f0, ABISELECT(24,16), "S3940C1.s3940c1f0");
    test_class_info(&lv, &cd_S3940C1);
    dp->~S3940C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3940C1(Test_S3940C1, "S3940C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3940C1C1Ev();
extern void _ZN7S3940C1D1Ev();
Name_Map name_map_S3940C1[] = {
  NSPAIR(_ZN7S3940C1C1Ev),
  NSPAIR(_ZN7S3940C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3924C3_nt;
extern VTBL_ENTRY _ZTI10S3924C3_nt[];
extern  VTBL_ENTRY _ZTV10S3924C3_nt[];
extern Class_Descriptor cd_S3940C2_nt;
extern VTBL_ENTRY _ZTI10S3940C2_nt[];
extern  VTBL_ENTRY _ZTV10S3940C2_nt[];
static Base_Class bases_S3940C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3924C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3940C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3940C1[];
extern void _ZN7S3940C1D1Ev();
extern void _ZN7S3940C1D0Ev();
static  VTBL_ENTRY vtc_S3940C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3940C1[0]),
  (VTBL_ENTRY)&_ZN7S3940C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3940C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3940C1[];
extern  VTBL_ENTRY _ZTV7S3940C1[];
Class_Descriptor cd_S3940C1 = {  "S3940C1", // class name
  bases_S3940C1, 2,
  &(vtc_S3940C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3940C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3940C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8264C1  : S807C5_nt {
  ::S16496C4_nt s8264c1f0;
  int s8264c1f1[3];
  ::S2172C17 s8264c1f2;
  ~S8264C1(); // tgen
  S8264C1(); // tgen
};
//SIG(1 S8264C1) C1{ BC2{ vd m} FC3{ vd m Fp Fi} Fi[3] FC4{ m Fp}}


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

static void Test_S8264C1()
{
  extern Class_Descriptor cd_S8264C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S8264C1, buf);
    S8264C1 *dp, &lv = *(dp=new (buf) S8264C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S8264C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8264C1)");
    check_base_class_offset(lv, (S807C5_nt*), 0, "S8264C1");
    check_field_offset(lv, s8264c1f0, ABISELECT(8,4), "S8264C1.s8264c1f0");
    check_field_offset(lv, s8264c1f1, ABISELECT(32,16), "S8264C1.s8264c1f1");
    check_field_offset(lv, s8264c1f2, ABISELECT(48,28), "S8264C1.s8264c1f2");
    test_class_info(&lv, &cd_S8264C1);
    dp->~S8264C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8264C1(Test_S8264C1, "S8264C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S8264C1C1Ev();
extern void _ZN7S8264C1D1Ev();
Name_Map name_map_S8264C1[] = {
  NSPAIR(_ZN7S8264C1C1Ev),
  NSPAIR(_ZN7S8264C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
static Base_Class bases_S8264C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S807C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S8264C1[];
extern void _ZN7S8264C1D1Ev();
extern void _ZN7S8264C1D0Ev();
static  VTBL_ENTRY vtc_S8264C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8264C1[0]),
  (VTBL_ENTRY)&_ZN7S8264C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8264C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8264C1[];
extern  VTBL_ENTRY _ZTV7S8264C1[];
Class_Descriptor cd_S8264C1 = {  "S8264C1", // class name
  bases_S8264C1, 1,
  &(vtc_S8264C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S8264C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8264C1),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  S11093C5_nt  {
  int s11093c5f0;
  char s11093c5f1;
  void  mf11093c5(); // _ZN11S11093C5_nt9mf11093c5Ev
};
//SIG(-1 S11093C5_nt) C1{ m Fi Fc}


void  S11093C5_nt ::mf11093c5(){}

//skip512 S11093C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11093C1  {
  ::S1159C5_nt s11093c1f0;
  ::S11092C4_nt s11093c1f1;
  ::S11093C5_nt s11093c1f2;
  int s11093c1f3;
};
//SIG(1 S11093C1) C1{ FC2{ BC3{ m} Fi} FC4{ m Fi Fc} FC5{ m Fi Fc} Fi}



static void Test_S11093C1()
{
  {
    init_simple_test("S11093C1");
    S11093C1 lv;
    check2(sizeof(lv), 24, "sizeof(S11093C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11093C1)");
    check_field_offset(lv, s11093c1f0, 0, "S11093C1.s11093c1f0");
    check_field_offset(lv, s11093c1f1, 4, "S11093C1.s11093c1f1");
    check_field_offset(lv, s11093c1f2, 12, "S11093C1.s11093c1f2");
    check_field_offset(lv, s11093c1f3, 20, "S11093C1.s11093c1f3");
  }
}
static Arrange_To_Call_Me vS11093C1(Test_S11093C1, "S11093C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13417C1  {
  int s13417c1f0[3];
  short s13417c1f1[8];
  int s13417c1f2[2];
  short s13417c1f3[3];
  char s13417c1f4[2];
  int s13417c1f5;
  short s13417c1f6[2];
};
//SIG(1 S13417C1) C1{ Fi[3] Fs[8] Fi[2] Fs[3] Fc[2] Fi Fs[2]}



static void Test_S13417C1()
{
  {
    init_simple_test("S13417C1");
    S13417C1 lv;
    check2(sizeof(lv), 52, "sizeof(S13417C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13417C1)");
    check_field_offset(lv, s13417c1f0, 0, "S13417C1.s13417c1f0");
    check_field_offset(lv, s13417c1f1, 12, "S13417C1.s13417c1f1");
    check_field_offset(lv, s13417c1f2, 28, "S13417C1.s13417c1f2");
    check_field_offset(lv, s13417c1f3, 36, "S13417C1.s13417c1f3");
    check_field_offset(lv, s13417c1f4, 42, "S13417C1.s13417c1f4");
    check_field_offset(lv, s13417c1f5, 44, "S13417C1.s13417c1f5");
    check_field_offset(lv, s13417c1f6, 48, "S13417C1.s13417c1f6");
  }
}
static Arrange_To_Call_Me vS13417C1(Test_S13417C1, "S13417C1", 52);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2634C2_nt  : S1378C9_nt {
};
//SIG(-1 S2634C2_nt) C1{ BC2{ m Fi}}



//skip512 S2634C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S1378C9_nt;
static Base_Class bases_S2634C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1378C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2634C2_nt = {  "S2634C2_nt", // class name
  bases_S2634C2_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  S2634C4_nt  {
  ::S2172C17 s2634c4f0;
  void  mf2634c4(); // _ZN10S2634C4_nt8mf2634c4Ev
};
//SIG(-1 S2634C4_nt) C1{ m FC2{ m Fp}}


void  S2634C4_nt ::mf2634c4(){}

//skip512 S2634C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2634C1  : S2634C2_nt {
  ::S2634C4_nt s2634c1f0;
  ::S2634C4_nt s2634c1f1;
  ::S2634C4_nt s2634c1f2;
};
//SIG(1 S2634C1) C1{ BC2{ BC3{ m Fi}} FC4{ m FC5{ m Fp}} FC4 FC4}



static void Test_S2634C1()
{
  extern Class_Descriptor cd_S2634C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S2634C1, buf);
    S2634C1 &lv = *(new (buf) S2634C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S2634C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2634C1)");
    check_base_class_offset(lv, (S1378C9_nt*)(S2634C2_nt*), 0, "S2634C1");
    check_base_class_offset(lv, (S2634C2_nt*), 0, "S2634C1");
    check_field_offset(lv, s2634c1f0, ABISELECT(8,4), "S2634C1.s2634c1f0");
    check_field_offset(lv, s2634c1f1, ABISELECT(16,8), "S2634C1.s2634c1f1");
    check_field_offset(lv, s2634c1f2, ABISELECT(24,12), "S2634C1.s2634c1f2");
    test_class_info(&lv, &cd_S2634C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2634C1(Test_S2634C1, "S2634C1", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S1378C9_nt;
extern Class_Descriptor cd_S2634C2_nt;
static Base_Class bases_S2634C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1378C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2634C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2634C1 = {  "S2634C1", // class name
  bases_S2634C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17079C1  {
  int s17079c1f0[2];
  ::S1378C23 s17079c1f1;
  ::S1378C19 s17079c1f2;
  void  mf17079c1(); // _ZN8S17079C19mf17079c1Ev
};
//SIG(1 S17079C1) C1{ m Fi[2] FC2{ BC3{ m Fp Fi[2]}} FC4{ BC3}}


void  S17079C1 ::mf17079c1(){}

static void Test_S17079C1()
{
  {
    init_simple_test("S17079C1");
    S17079C1 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S17079C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17079C1)");
    check_field_offset(lv, s17079c1f0, 0, "S17079C1.s17079c1f0");
    check_field_offset(lv, s17079c1f1, 8, "S17079C1.s17079c1f1");
    check_field_offset(lv, s17079c1f2, ABISELECT(24,20), "S17079C1.s17079c1f2");
  }
}
static Arrange_To_Call_Me vS17079C1(Test_S17079C1, "S17079C1", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12095C1  {
  ::S1378C14_nt s12095c1f0;
  int s12095c1f1[2];
  void *s12095c1f2;
  ::S5166C37 s12095c1f3;
  ::S1378C9_nt s12095c1f4;
};
//SIG(1 S12095C1) C1{ FC2{ m Fi[3]} Fi[2] Fp FC3{ m} FC4{ m Fi}}



static void Test_S12095C1()
{
  {
    init_simple_test("S12095C1");
    S12095C1 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S12095C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12095C1)");
    check_field_offset(lv, s12095c1f0, 0, "S12095C1.s12095c1f0");
    check_field_offset(lv, s12095c1f1, 12, "S12095C1.s12095c1f1");
    check_field_offset(lv, s12095c1f2, ABISELECT(24,20), "S12095C1.s12095c1f2");
    check_field_offset(lv, s12095c1f3, ABISELECT(32,24), "S12095C1.s12095c1f3");
    check_field_offset(lv, s12095c1f4, ABISELECT(36,28), "S12095C1.s12095c1f4");
  }
}
static Arrange_To_Call_Me vS12095C1(Test_S12095C1, "S12095C1", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13782C1  {
  __tsi64 s13782c1f0;
  int s13782c1f1[2];
  void *s13782c1f2;
  int s13782c1f3;
  void *s13782c1f4;
  int s13782c1f5;
  void *s13782c1f6[2];
  int s13782c1f7;
  char s13782c1f8[4];
};
//SIG(1 S13782C1) C1{ FL Fi[2] Fp Fi Fp Fi Fp[2] Fi Fc[4]}



static void Test_S13782C1()
{
  {
    init_simple_test("S13782C1");
    S13782C1 lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S13782C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13782C1)");
    check_field_offset(lv, s13782c1f0, 0, "S13782C1.s13782c1f0");
    check_field_offset(lv, s13782c1f1, 8, "S13782C1.s13782c1f1");
    check_field_offset(lv, s13782c1f2, 16, "S13782C1.s13782c1f2");
    check_field_offset(lv, s13782c1f3, ABISELECT(24,20), "S13782C1.s13782c1f3");
    check_field_offset(lv, s13782c1f4, ABISELECT(32,24), "S13782C1.s13782c1f4");
    check_field_offset(lv, s13782c1f5, ABISELECT(40,28), "S13782C1.s13782c1f5");
    check_field_offset(lv, s13782c1f6, ABISELECT(48,32), "S13782C1.s13782c1f6");
    check_field_offset(lv, s13782c1f7, ABISELECT(64,40), "S13782C1.s13782c1f7");
    check_field_offset(lv, s13782c1f8, ABISELECT(68,44), "S13782C1.s13782c1f8");
  }
}
static Arrange_To_Call_Me vS13782C1(Test_S13782C1, "S13782C1", ABISELECT(72,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6857C2  {
  virtual  ~S6857C2(); // _ZN7S6857C2D1Ev
  virtual void  v4(); // _ZN7S6857C22v4Ev
  virtual void  v5(); // _ZN7S6857C22v5Ev
  S6857C2(); // tgen
};
//SIG(-1 S6857C2) C1{ vd v1 v2}


 S6857C2 ::~S6857C2(){ note_dtor("S6857C2", this);}
void  S6857C2 ::v4(){vfunc_called(this, "_ZN7S6857C22v4Ev");}
void  S6857C2 ::v5(){vfunc_called(this, "_ZN7S6857C22v5Ev");}
S6857C2 ::S6857C2(){ note_ctor("S6857C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6857C2C1Ev();
extern void _ZN7S6857C2D1Ev();
Name_Map name_map_S6857C2[] = {
  NSPAIR(_ZN7S6857C2C1Ev),
  NSPAIR(_ZN7S6857C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6857C2[];
extern void _ZN7S6857C2D1Ev();
extern void _ZN7S6857C2D0Ev();
extern void _ZN7S6857C22v4Ev();
extern void _ZN7S6857C22v5Ev();
static  VTBL_ENTRY vtc_S6857C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6857C2[0]),
  (VTBL_ENTRY)&_ZN7S6857C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6857C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6857C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6857C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S6857C2[];
extern  VTBL_ENTRY _ZTV7S6857C2[];
Class_Descriptor cd_S6857C2 = {  "S6857C2", // class name
  0,0,//no base classes
  &(vtc_S6857C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6857C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6857C2),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  S6857C1  : S6857C2 {
  ::S17448C6 s6857c1f0;
  virtual void  v1(); // _ZN7S6857C12v1Ev
  virtual void  v2(); // _ZN7S6857C12v2Ev
  virtual void  v3(); // _ZN7S6857C12v3Ev
  ~S6857C1(); // tgen
  S6857C1(); // tgen
};
//SIG(1 S6857C1) C1{ BC2{ vd v4 v5} v1 v2 v3 FC3{ m Fp[2]}}


void  S6857C1 ::v1(){vfunc_called(this, "_ZN7S6857C12v1Ev");}
void  S6857C1 ::v2(){vfunc_called(this, "_ZN7S6857C12v2Ev");}
void  S6857C1 ::v3(){vfunc_called(this, "_ZN7S6857C12v3Ev");}
S6857C1 ::~S6857C1(){ note_dtor("S6857C1", this);} // tgen
S6857C1 ::S6857C1(){ note_ctor("S6857C1", this);} // tgen

static void Test_S6857C1()
{
  extern Class_Descriptor cd_S6857C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6857C1, buf);
    S6857C1 *dp, &lv = *(dp=new (buf) S6857C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6857C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6857C1)");
    check_base_class_offset(lv, (S6857C2*), 0, "S6857C1");
    check_field_offset(lv, s6857c1f0, ABISELECT(8,4), "S6857C1.s6857c1f0");
    test_class_info(&lv, &cd_S6857C1);
    dp->~S6857C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6857C1(Test_S6857C1, "S6857C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S6857C1C1Ev();
extern void _ZN7S6857C1D1Ev();
Name_Map name_map_S6857C1[] = {
  NSPAIR(_ZN7S6857C1C1Ev),
  NSPAIR(_ZN7S6857C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6857C2;
extern VTBL_ENTRY _ZTI7S6857C2[];
extern  VTBL_ENTRY _ZTV7S6857C2[];
static Base_Class bases_S6857C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6857C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S6857C1[];
extern void _ZN7S6857C1D1Ev();
extern void _ZN7S6857C1D0Ev();
extern void _ZN7S6857C22v4Ev();
extern void _ZN7S6857C22v5Ev();
extern void _ZN7S6857C12v1Ev();
extern void _ZN7S6857C12v2Ev();
extern void _ZN7S6857C12v3Ev();
static  VTBL_ENTRY vtc_S6857C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6857C1[0]),
  (VTBL_ENTRY)&_ZN7S6857C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6857C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6857C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6857C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6857C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6857C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6857C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S6857C1[];
extern  VTBL_ENTRY _ZTV7S6857C1[];
Class_Descriptor cd_S6857C1 = {  "S6857C1", // class name
  bases_S6857C1, 1,
  &(vtc_S6857C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S6857C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6857C1),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  S21693C1  {
  int s21693c1f0[8];
  char s21693c1f1;
  int s21693c1f2[2];
  void *s21693c1f3[2];
  char s21693c1f4;
  void *s21693c1f5[3];
  void  mf21693c1(); // _ZN8S21693C19mf21693c1Ev
  virtual  ~S21693C1(); // _ZN8S21693C1D1Ev
  S21693C1(); // tgen
};
//SIG(1 S21693C1) C1{ vd m Fi[8] Fc Fi[2] Fp[2] Fc Fp[3]}


void  S21693C1 ::mf21693c1(){}
 S21693C1 ::~S21693C1(){ note_dtor("S21693C1", this);}
S21693C1 ::S21693C1(){ note_ctor("S21693C1", this);} // tgen

static void Test_S21693C1()
{
  extern Class_Descriptor cd_S21693C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S21693C1, buf);
    S21693C1 *dp, &lv = *(dp=new (buf) S21693C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S21693C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21693C1)");
    check_field_offset(lv, s21693c1f0, ABISELECT(8,4), "S21693C1.s21693c1f0");
    check_field_offset(lv, s21693c1f1, ABISELECT(40,36), "S21693C1.s21693c1f1");
    check_field_offset(lv, s21693c1f2, ABISELECT(44,40), "S21693C1.s21693c1f2");
    check_field_offset(lv, s21693c1f3, ABISELECT(56,48), "S21693C1.s21693c1f3");
    check_field_offset(lv, s21693c1f4, ABISELECT(72,56), "S21693C1.s21693c1f4");
    check_field_offset(lv, s21693c1f5, ABISELECT(80,60), "S21693C1.s21693c1f5");
    test_class_info(&lv, &cd_S21693C1);
    dp->~S21693C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21693C1(Test_S21693C1, "S21693C1", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN8S21693C1C1Ev();
extern void _ZN8S21693C1D1Ev();
Name_Map name_map_S21693C1[] = {
  NSPAIR(_ZN8S21693C1C1Ev),
  NSPAIR(_ZN8S21693C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21693C1[];
extern void _ZN8S21693C1D1Ev();
extern void _ZN8S21693C1D0Ev();
static  VTBL_ENTRY vtc_S21693C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21693C1[0]),
  (VTBL_ENTRY)&_ZN8S21693C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21693C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21693C1[];
extern  VTBL_ENTRY _ZTV8S21693C1[];
Class_Descriptor cd_S21693C1 = {  "S21693C1", // class name
  0,0,//no base classes
  &(vtc_S21693C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI8S21693C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21693C1),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

union  S13418C2  {
  char s13418c2f0[496];
  int s13418c2f1[124];
  void *s13418c2f2[62];
};
//SIG(1 S13418C2) U1{ Fc[496] Fi[124] Fp[62]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S13418C1  {
  int s13418c1f0[3];
  ::S13418C2 s13418c1f1;
};
//SIG(1 S13418C1) C1{ Fi[3] FU2{ Fc[496] Fi[124] Fp[62]}}



static void Test_S13418C1()
{
  {
    init_simple_test("S13418C1");
    S13418C1 lv;
    check2(sizeof(lv), ABISELECT(512,508), "sizeof(S13418C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13418C1)");
    check_field_offset(lv, s13418c1f0, 0, "S13418C1.s13418c1f0");
    check_field_offset(lv, s13418c1f1, ABISELECT(16,12), "S13418C1.s13418c1f1");
  }
}
static Arrange_To_Call_Me vS13418C1(Test_S13418C1, "S13418C1", ABISELECT(512,508));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16838C1  {
  int s16838c1f0;
  ::S16496C4_nt s16838c1f1;
  ::S16496C4_nt s16838c1f2;
  ::S16496C4_nt s16838c1f3;
  char s16838c1f4;
  int s16838c1f5;
  void  mf16838c1(); // _ZN8S16838C19mf16838c1Ev
};
//SIG(1 S16838C1) C1{ m Fi FC2{ vd m Fp Fi} FC2 FC2 Fc Fi}


void  S16838C1 ::mf16838c1(){}

static void Test_S16838C1()
{
  {
    init_simple_test("S16838C1");
    S16838C1 lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S16838C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16838C1)");
    check_field_offset(lv, s16838c1f0, 0, "S16838C1.s16838c1f0");
    check_field_offset(lv, s16838c1f1, ABISELECT(8,4), "S16838C1.s16838c1f1");
    check_field_offset(lv, s16838c1f2, ABISELECT(32,16), "S16838C1.s16838c1f2");
    check_field_offset(lv, s16838c1f3, ABISELECT(56,28), "S16838C1.s16838c1f3");
    check_field_offset(lv, s16838c1f4, ABISELECT(80,40), "S16838C1.s16838c1f4");
    check_field_offset(lv, s16838c1f5, ABISELECT(84,44), "S16838C1.s16838c1f5");
  }
}
static Arrange_To_Call_Me vS16838C1(Test_S16838C1, "S16838C1", ABISELECT(88,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17881C1  {
  void *s17881c1f0[2];
  ::S1160C3 s17881c1f1;
  void  mf17881c1(); // _ZN8S17881C19mf17881c1Ev
};
//SIG(1 S17881C1) C1{ m Fp[2] FC2{ BC3{ m} Fi FC4{ BC3 Fi}}}


void  S17881C1 ::mf17881c1(){}

static void Test_S17881C1()
{
  {
    init_simple_test("S17881C1");
    S17881C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S17881C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17881C1)");
    check_field_offset(lv, s17881c1f0, 0, "S17881C1.s17881c1f0");
    check_field_offset(lv, s17881c1f1, ABISELECT(16,8), "S17881C1.s17881c1f1");
  }
}
static Arrange_To_Call_Me vS17881C1(Test_S17881C1, "S17881C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12786C2  {
  void *s12786c2f0[27];
  int s12786c2f1;
  void *s12786c2f2[4];
};
//SIG(-1 S12786C2) C1{ Fp[27] Fi Fp[4]}



static void Test_S12786C2()
{
  {
    init_simple_test("S12786C2");
    S12786C2 lv;
    check2(sizeof(lv), ABISELECT(256,128), "sizeof(S12786C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12786C2)");
    check_field_offset(lv, s12786c2f0, 0, "S12786C2.s12786c2f0");
    check_field_offset(lv, s12786c2f1, ABISELECT(216,108), "S12786C2.s12786c2f1");
    check_field_offset(lv, s12786c2f2, ABISELECT(224,112), "S12786C2.s12786c2f2");
  }
}
static Arrange_To_Call_Me vS12786C2(Test_S12786C2, "S12786C2", ABISELECT(256,128));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12786C1  {
  int s12786c1f0;
  void *s12786c1f1[4];
  ::S12786C2 s12786c1f2;
  void *s12786c1f3;
};
//SIG(1 S12786C1) C1{ Fi Fp[4] FC2{ Fp[27] Fi Fp[4]} Fp}



static void Test_S12786C1()
{
  {
    init_simple_test("S12786C1");
    S12786C1 lv;
    check2(sizeof(lv), ABISELECT(304,152), "sizeof(S12786C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12786C1)");
    check_field_offset(lv, s12786c1f0, 0, "S12786C1.s12786c1f0");
    check_field_offset(lv, s12786c1f1, ABISELECT(8,4), "S12786C1.s12786c1f1");
    check_field_offset(lv, s12786c1f2, ABISELECT(40,20), "S12786C1.s12786c1f2");
    check_field_offset(lv, s12786c1f3, ABISELECT(296,148), "S12786C1.s12786c1f3");
  }
}
static Arrange_To_Call_Me vS12786C1(Test_S12786C1, "S12786C1", ABISELECT(304,152));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S12875C2  {
  int s12875c2f0;
  int s12875c2f1;
  void *s12875c2f2;
  int s12875c2f3;
  void *s12875c2f4;
  void *s12875c2f5;
  void *s12875c2f6;
  void *s12875c2f7;
};
//SIG(1 S12875C2) U1{ Fi Fi Fp Fi Fp Fp Fp Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12875C1  {
  int s12875c1f0;
  ::S12875C2 s12875c1f1;
};
//SIG(1 S12875C1) C1{ Fi FU2{ Fi Fi Fp Fi Fp Fp Fp Fp}}



static void Test_S12875C1()
{
  {
    init_simple_test("S12875C1");
    S12875C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S12875C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12875C1)");
    check_field_offset(lv, s12875c1f0, 0, "S12875C1.s12875c1f0");
    check_field_offset(lv, s12875c1f1, ABISELECT(8,4), "S12875C1.s12875c1f1");
  }
}
static Arrange_To_Call_Me vS12875C1(Test_S12875C1, "S12875C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13434C1  {
  int s13434c1f0[4];
  char s13434c1f1[112];
  int s13434c1f2[2];
  __tsi64 s13434c1f3;
  char s13434c1f4[112];
};
//SIG(1 S13434C1) C1{ Fi[4] Fc[112] Fi[2] FL Fc[112]}



static void Test_S13434C1()
{
  {
    init_simple_test("S13434C1");
    S13434C1 lv;
    check2(sizeof(lv), 256, "sizeof(S13434C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13434C1)");
    check_field_offset(lv, s13434c1f0, 0, "S13434C1.s13434c1f0");
    check_field_offset(lv, s13434c1f1, 16, "S13434C1.s13434c1f1");
    check_field_offset(lv, s13434c1f2, 128, "S13434C1.s13434c1f2");
    check_field_offset(lv, s13434c1f3, 136, "S13434C1.s13434c1f3");
    check_field_offset(lv, s13434c1f4, 144, "S13434C1.s13434c1f4");
  }
}
static Arrange_To_Call_Me vS13434C1(Test_S13434C1, "S13434C1", 256);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13071C2  {
  ::S13190C5_nt s13071c2f0;
  char s13071c2f1[8];
  int s13071c2f2;
};
//SIG(1 S13071C2) C1{ FC2{ Fi} Fc[8] Fi}



static void Test_S13071C2()
{
  {
    init_simple_test("S13071C2");
    S13071C2 lv;
    check2(sizeof(lv), 16, "sizeof(S13071C2)");
    check2(__alignof__(lv), 4, "__alignof__(S13071C2)");
    check_field_offset(lv, s13071c2f0, 0, "S13071C2.s13071c2f0");
    check_field_offset(lv, s13071c2f1, 4, "S13071C2.s13071c2f1");
    check_field_offset(lv, s13071c2f2, 12, "S13071C2.s13071c2f2");
  }
}
static Arrange_To_Call_Me vS13071C2(Test_S13071C2, "S13071C2", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13071C1  {
  int s13071c1f0[2];
  ::S13071C2 s13071c1f1[16];
};
//SIG(1 S13071C1) C1{ Fi[2] FC2{ FC3{ Fi} Fc[8] Fi}[16]}



static void Test_S13071C1()
{
  {
    init_simple_test("S13071C1");
    S13071C1 lv;
    check2(sizeof(lv), 264, "sizeof(S13071C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13071C1)");
    check_field_offset(lv, s13071c1f0, 0, "S13071C1.s13071c1f0");
    check_field_offset(lv, s13071c1f1, 8, "S13071C1.s13071c1f1");
  }
}
static Arrange_To_Call_Me vS13071C1(Test_S13071C1, "S13071C1", 264);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17751C1  {
  void *s17751c1f0;
  int s17751c1f1;
  void *s17751c1f2;
  int s17751c1f3[3];
  void *s17751c1f4;
  __tsi64 s17751c1f5;
  int s17751c1f6[16];
  void  mf17751c1(); // _ZN8S17751C19mf17751c1Ev
};
//SIG(1 S17751C1) C1{ m Fp Fi Fp Fi[3] Fp FL Fi[16]}


void  S17751C1 ::mf17751c1(){}

static void Test_S17751C1()
{
  {
    init_simple_test("S17751C1");
    S17751C1 lv;
    check2(sizeof(lv), ABISELECT(120,100), "sizeof(S17751C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17751C1)");
    check_field_offset(lv, s17751c1f0, 0, "S17751C1.s17751c1f0");
    check_field_offset(lv, s17751c1f1, ABISELECT(8,4), "S17751C1.s17751c1f1");
    check_field_offset(lv, s17751c1f2, ABISELECT(16,8), "S17751C1.s17751c1f2");
    check_field_offset(lv, s17751c1f3, ABISELECT(24,12), "S17751C1.s17751c1f3");
    check_field_offset(lv, s17751c1f4, ABISELECT(40,24), "S17751C1.s17751c1f4");
    check_field_offset(lv, s17751c1f5, ABISELECT(48,28), "S17751C1.s17751c1f5");
    check_field_offset(lv, s17751c1f6, ABISELECT(56,36), "S17751C1.s17751c1f6");
  }
}
static Arrange_To_Call_Me vS17751C1(Test_S17751C1, "S17751C1", ABISELECT(120,100));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S14981C2_nt  {
  int s14981c2f0;
  char s14981c2f1[4];
};
//SIG(1 S14981C2_nt) U1{ Fi Fc[4]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S14981C1  {
  ::S14981C2_nt s14981c1f0;
  ::S14981C2_nt s14981c1f1;
  ::S14981C2_nt s14981c1f2;
};
//SIG(1 S14981C1) C1{ FU2{ Fi Fc[4]} FU2 FU2}



static void Test_S14981C1()
{
  {
    init_simple_test("S14981C1");
    S14981C1 lv;
    check2(sizeof(lv), 12, "sizeof(S14981C1)");
    check2(__alignof__(lv), 4, "__alignof__(S14981C1)");
    check_field_offset(lv, s14981c1f0, 0, "S14981C1.s14981c1f0");
    check_field_offset(lv, s14981c1f1, 4, "S14981C1.s14981c1f1");
    check_field_offset(lv, s14981c1f2, 8, "S14981C1.s14981c1f2");
  }
}
static Arrange_To_Call_Me vS14981C1(Test_S14981C1, "S14981C1", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6163C1  : S5166C37 {
  ::S1378C23 s6163c1f0;
  void *s6163c1f1;
};
//SIG(1 S6163C1) C1{ BC2{ m} FC3{ BC4{ m Fp Fi[2]}} Fp}



static void Test_S6163C1()
{
  extern Class_Descriptor cd_S6163C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6163C1, buf);
    S6163C1 &lv = *(new (buf) S6163C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6163C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6163C1)");
    check_base_class_offset(lv, (S5166C37*), 0, "S6163C1");
    check_field_offset(lv, s6163c1f0, 0, "S6163C1.s6163c1f0");
    check_field_offset(lv, s6163c1f1, ABISELECT(16,12), "S6163C1.s6163c1f1");
    test_class_info(&lv, &cd_S6163C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6163C1(Test_S6163C1, "S6163C1", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
static Base_Class bases_S6163C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6163C1 = {  "S6163C1", // class name
  bases_S6163C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S13263C2  {
  char s13263c2f0;
  short s13263c2f1;
  int s13263c2f2;
  char s13263c2f3[4096];
};
//SIG(1 S13263C2) U1{ Fc Fs Fi Fc[4096]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S13263C1  {
  int s13263c1f0[2];
  ::S13263C2 s13263c1f1;
};
//SIG(1 S13263C1) C1{ Fi[2] FU2{ Fc Fs Fi Fc[4096]}}



static void Test_S13263C1()
{
  {
    init_simple_test("S13263C1");
    S13263C1 lv;
    check2(sizeof(lv), 4104, "sizeof(S13263C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13263C1)");
    check_field_offset(lv, s13263c1f0, 0, "S13263C1.s13263c1f0");
    check_field_offset(lv, s13263c1f1, 8, "S13263C1.s13263c1f1");
  }
}
static Arrange_To_Call_Me vS13263C1(Test_S13263C1, "S13263C1", 4104);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8265C1  : S807C5_nt {
  int s8265c1f0;
  ::S16496C4_nt s8265c1f1;
  ~S8265C1(); // tgen
  S8265C1(); // tgen
};
//SIG(1 S8265C1) C1{ BC2{ vd m} Fi FC3{ vd m Fp Fi}}


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

static void Test_S8265C1()
{
  extern Class_Descriptor cd_S8265C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S8265C1, buf);
    S8265C1 *dp, &lv = *(dp=new (buf) S8265C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S8265C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8265C1)");
    check_base_class_offset(lv, (S807C5_nt*), 0, "S8265C1");
    check_field_offset(lv, s8265c1f0, ABISELECT(8,4), "S8265C1.s8265c1f0");
    check_field_offset(lv, s8265c1f1, ABISELECT(16,8), "S8265C1.s8265c1f1");
    test_class_info(&lv, &cd_S8265C1);
    dp->~S8265C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8265C1(Test_S8265C1, "S8265C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S8265C1C1Ev();
extern void _ZN7S8265C1D1Ev();
Name_Map name_map_S8265C1[] = {
  NSPAIR(_ZN7S8265C1C1Ev),
  NSPAIR(_ZN7S8265C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S807C5_nt;
extern VTBL_ENTRY _ZTI9S807C5_nt[];
extern  VTBL_ENTRY _ZTV9S807C5_nt[];
static Base_Class bases_S8265C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S807C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S8265C1[];
extern void _ZN7S8265C1D1Ev();
extern void _ZN7S8265C1D0Ev();
static  VTBL_ENTRY vtc_S8265C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8265C1[0]),
  (VTBL_ENTRY)&_ZN7S8265C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8265C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8265C1[];
extern  VTBL_ENTRY _ZTV7S8265C1[];
Class_Descriptor cd_S8265C1 = {  "S8265C1", // class name
  bases_S8265C1, 1,
  &(vtc_S8265C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S8265C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8265C1),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  S2844C2  : S5166C37 {
  int s2844c2f0;
  ::S1159C5_nt s2844c2f1;
};
//SIG(-1 S2844C2) C1{ BC2{ m} Fi FC3{ BC2 Fi}}



static void Test_S2844C2()
{
  extern Class_Descriptor cd_S2844C2;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S2844C2, buf);
    S2844C2 &lv = *(new (buf) S2844C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S2844C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2844C2)");
    check_base_class_offset(lv, (S5166C37*), 0, "S2844C2");
    check_field_offset(lv, s2844c2f0, 0, "S2844C2.s2844c2f0");
    check_field_offset(lv, s2844c2f1, 4, "S2844C2.s2844c2f1");
    test_class_info(&lv, &cd_S2844C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2844C2(Test_S2844C2, "S2844C2", 8);

#else // __cplusplus

extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
static Base_Class bases_S2844C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2844C2 = {  "S2844C2", // class name
  bases_S2844C2, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2844C1  : S2844C2 {
  __tsi64 s2844c1f0;
};
//SIG(1 S2844C1) C1{ BC2{ BC3{ m} Fi FC4{ BC3 Fi}} FL}



static void Test_S2844C1()
{
  extern Class_Descriptor cd_S2844C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,5)];
    init_test(&cd_S2844C1, buf);
    S2844C1 &lv = *(new (buf) S2844C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 16, "sizeof(S2844C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2844C1)");
    check_base_class_offset(lv, (S5166C37*)(S2844C2*), 0, "S2844C1");
    check_base_class_offset(lv, (S2844C2*), 0, "S2844C1");
    check_field_offset(lv, s2844c1f0, 8, "S2844C1.s2844c1f0");
    test_class_info(&lv, &cd_S2844C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2844C1(Test_S2844C1, "S2844C1", 16);

#else // __cplusplus

extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S2844C2;
static Base_Class bases_S2844C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2844C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2844C1 = {  "S2844C1", // class name
  bases_S2844C1, 2,
  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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11996C1  {
  ::S5166C12_nt s11996c1f0;
  ::S5166C12_nt s11996c1f1;
  ::S5166C12_nt s11996c1f2;
};
//SIG(1 S11996C1) C1{ FC2{ m FC3{ m FL[2]}} FC2 FC2}



static void Test_S11996C1()
{
  {
    init_simple_test("S11996C1");
    S11996C1 lv;
    check2(sizeof(lv), 48, "sizeof(S11996C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11996C1)");
    check_field_offset(lv, s11996c1f0, 0, "S11996C1.s11996c1f0");
    check_field_offset(lv, s11996c1f1, 16, "S11996C1.s11996c1f1");
    check_field_offset(lv, s11996c1f2, 32, "S11996C1.s11996c1f2");
  }
}
static Arrange_To_Call_Me vS11996C1(Test_S11996C1, "S11996C1", 48);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12981C1  {
  int s12981c1f0[2];
  char s12981c1f1;
  ::S16496C4_nt s12981c1f2;
  char s12981c1f3;
};
//SIG(1 S12981C1) C1{ Fi[2] Fc FC2{ vd m Fp Fi} Fc}



static void Test_S12981C1()
{
  {
    init_simple_test("S12981C1");
    S12981C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S12981C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12981C1)");
    check_field_offset(lv, s12981c1f0, 0, "S12981C1.s12981c1f0");
    check_field_offset(lv, s12981c1f1, 8, "S12981C1.s12981c1f1");
    check_field_offset(lv, s12981c1f2, ABISELECT(16,12), "S12981C1.s12981c1f2");
    check_field_offset(lv, s12981c1f3, ABISELECT(40,24), "S12981C1.s12981c1f3");
  }
}
static Arrange_To_Call_Me vS12981C1(Test_S12981C1, "S12981C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8070C2_nt  {
  int s8070c2f0;
  void  mf8070c2(); // _ZN10S8070C2_nt8mf8070c2Ev
  virtual  ~S8070C2_nt(); // _ZN10S8070C2_ntD1Ev
  S8070C2_nt(); // tgen
};
//SIG(-1 S8070C2_nt) C1{ vd m Fi}


void  S8070C2_nt ::mf8070c2(){}
 S8070C2_nt ::~S8070C2_nt(){ note_dtor("S8070C2_nt", this);}
S8070C2_nt ::S8070C2_nt(){ note_ctor("S8070C2_nt", this);} // tgen

//skip512 S8070C2_nt

#else // __cplusplus

extern void _ZN10S8070C2_ntC1Ev();
extern void _ZN10S8070C2_ntD1Ev();
Name_Map name_map_S8070C2_nt[] = {
  NSPAIR(_ZN10S8070C2_ntC1Ev),
  NSPAIR(_ZN10S8070C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8070C2_nt[];
extern void _ZN10S8070C2_ntD1Ev();
extern void _ZN10S8070C2_ntD0Ev();
static  VTBL_ENTRY vtc_S8070C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8070C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8070C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8070C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8070C2_nt[];
VTBL_ENTRY *P__ZTI10S8070C2_nt = _ZTI10S8070C2_nt; 
extern  VTBL_ENTRY _ZTV10S8070C2_nt[];
Class_Descriptor cd_S8070C2_nt = {  "S8070C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8070C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S8070C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8070C2_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  S8070C1  : S8070C2_nt {
  ::S1159C5_nt s8070c1f0;
  ~S8070C1(); // tgen
  S8070C1(); // tgen
};
//SIG(1 S8070C1) C1{ BC2{ vd m Fi} FC3{ BC4{ m} Fi}}


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

static void Test_S8070C1()
{
  extern Class_Descriptor cd_S8070C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8070C1, buf);
    S8070C1 *dp, &lv = *(dp=new (buf) S8070C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8070C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8070C1)");
    check_base_class_offset(lv, (S8070C2_nt*), 0, "S8070C1");
    check_field_offset(lv, s8070c1f0, ABISELECT(12,8), "S8070C1.s8070c1f0");
    test_class_info(&lv, &cd_S8070C1);
    dp->~S8070C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8070C1(Test_S8070C1, "S8070C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8070C1C1Ev();
extern void _ZN7S8070C1D1Ev();
Name_Map name_map_S8070C1[] = {
  NSPAIR(_ZN7S8070C1C1Ev),
  NSPAIR(_ZN7S8070C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8070C2_nt;
extern VTBL_ENTRY _ZTI10S8070C2_nt[];
extern  VTBL_ENTRY _ZTV10S8070C2_nt[];
static Base_Class bases_S8070C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8070C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S8070C1[];
extern void _ZN7S8070C1D1Ev();
extern void _ZN7S8070C1D0Ev();
static  VTBL_ENTRY vtc_S8070C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8070C1[0]),
  (VTBL_ENTRY)&_ZN7S8070C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8070C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8070C1[];
extern  VTBL_ENTRY _ZTV7S8070C1[];
Class_Descriptor cd_S8070C1 = {  "S8070C1", // class name
  bases_S8070C1, 1,
  &(vtc_S8070C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8070C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8070C1),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  S11553C2  {
  int s11553c2f0[2];
  long s11553c2f1;
};
//SIG(-1 S11553C2) C1{ Fi[2] Fl}



static void Test_S11553C2()
{
  {
    init_simple_test("S11553C2");
    S11553C2 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S11553C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11553C2)");
    check_field_offset(lv, s11553c2f0, 0, "S11553C2.s11553c2f0");
    check_field_offset(lv, s11553c2f1, 8, "S11553C2.s11553c2f1");
  }
}
static Arrange_To_Call_Me vS11553C2(Test_S11553C2, "S11553C2", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11553C1  {
  ::S11553C2 s11553c1f0;
  char s11553c1f1[52];
  int s11553c1f2;
  long s11553c1f3;
};
//SIG(1 S11553C1) C1{ FC2{ Fi[2] Fl} Fc[52] Fi Fl}



static void Test_S11553C1()
{
  {
    init_simple_test("S11553C1");
    S11553C1 lv;
    check2(sizeof(lv), ABISELECT(80,72), "sizeof(S11553C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11553C1)");
    check_field_offset(lv, s11553c1f0, 0, "S11553C1.s11553c1f0");
    check_field_offset(lv, s11553c1f1, ABISELECT(16,12), "S11553C1.s11553c1f1");
    check_field_offset(lv, s11553c1f2, ABISELECT(68,64), "S11553C1.s11553c1f2");
    check_field_offset(lv, s11553c1f3, ABISELECT(72,68), "S11553C1.s11553c1f3");
  }
}
static Arrange_To_Call_Me vS11553C1(Test_S11553C1, "S11553C1", ABISELECT(80,72));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10529C1  {
  unsigned char s10529c1f0:1;
  unsigned short s10529c1f1:1;
  unsigned int s10529c1f2:1;
  __tsu64 s10529c1f3:1;
  __tsi64 s10529c1f4:2;
};
//SIG(1 S10529C1) C1{ Fc:1 Fs:1 Fi:1 FL:1 FL:2}



static void Test_S10529C1()
{
  {
    init_simple_test("S10529C1");
    static S10529C1 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10529C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10529C1)");
    set_bf_and_test(lv, s10529c1f0, 0, 0, 1, 1, "S10529C1");
    set_bf_and_test(lv, s10529c1f1, 0, 1, 1, 1, "S10529C1");
    set_bf_and_test(lv, s10529c1f2, 0, 2, 1, 1, "S10529C1");
    set_bf_and_test(lv, s10529c1f3, 0, 3, 1, 1, "S10529C1");
    set_bf_and_test(lv, s10529c1f4, 0, 4, 2, 1, "S10529C1");
    set_bf_and_test(lv, s10529c1f4, 0, 4, 2, hide_sll(1LL<<1), "S10529C1");
  }
}
static Arrange_To_Call_Me vS10529C1(Test_S10529C1, "S10529C1", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16497C1  {
  ::S16496C4_nt s16497c1f0;
  ::S16496C4_nt s16497c1f1;
  ::S16496C4_nt s16497c1f2;
  void  mf16497c1(); // _ZN8S16497C19mf16497c1Ev
};
//SIG(1 S16497C1) C1{ m FC2{ vd m Fp Fi} FC2 FC2}


void  S16497C1 ::mf16497c1(){}

static void Test_S16497C1()
{
  {
    init_simple_test("S16497C1");
    S16497C1 lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S16497C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16497C1)");
    check_field_offset(lv, s16497c1f0, 0, "S16497C1.s16497c1f0");
    check_field_offset(lv, s16497c1f1, ABISELECT(24,12), "S16497C1.s16497c1f1");
    check_field_offset(lv, s16497c1f2, ABISELECT(48,24), "S16497C1.s16497c1f2");
  }
}
static Arrange_To_Call_Me vS16497C1(Test_S16497C1, "S16497C1", ABISELECT(72,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13756C1  {
  __tsi64 s13756c1f0;
  int s13756c1f1;
  __tsi64 s13756c1f2;
  int s13756c1f3;
  __tsi64 s13756c1f4;
  int s13756c1f5[5];
  void *s13756c1f6;
};
//SIG(1 S13756C1) C1{ FL Fi FL Fi FL Fi[5] Fp}



static void Test_S13756C1()
{
  {
    init_simple_test("S13756C1");
    S13756C1 lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S13756C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13756C1)");
    check_field_offset(lv, s13756c1f0, 0, "S13756C1.s13756c1f0");
    check_field_offset(lv, s13756c1f1, 8, "S13756C1.s13756c1f1");
    check_field_offset(lv, s13756c1f2, ABISELECT(16,12), "S13756C1.s13756c1f2");
    check_field_offset(lv, s13756c1f3, ABISELECT(24,20), "S13756C1.s13756c1f3");
    check_field_offset(lv, s13756c1f4, ABISELECT(32,24), "S13756C1.s13756c1f4");
    check_field_offset(lv, s13756c1f5, ABISELECT(40,32), "S13756C1.s13756c1f5");
    check_field_offset(lv, s13756c1f6, ABISELECT(64,52), "S13756C1.s13756c1f6");
  }
}
static Arrange_To_Call_Me vS13756C1(Test_S13756C1, "S13756C1", ABISELECT(72,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5531C1  : S13190C8_nt {
  int s5531c1f0;
  char s5531c1f1[514];
  int s5531c1f2;
};
//SIG(1 S5531C1) C1{ BC2{ Fi[3]} Fi Fc[514] Fi}



static void Test_S5531C1()
{
  extern Class_Descriptor cd_S5531C1;
  void *lvp;
  {
    int buf[135];
    init_test(&cd_S5531C1, buf);
    S5531C1 &lv = *(new (buf) S5531C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 536, "sizeof(S5531C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5531C1)");
    check_base_class_offset(lv, (S13190C8_nt*), 0, "S5531C1");
    check_field_offset(lv, s5531c1f0, 12, "S5531C1.s5531c1f0");
    check_field_offset(lv, s5531c1f1, 16, "S5531C1.s5531c1f1");
    check_field_offset(lv, s5531c1f2, 532, "S5531C1.s5531c1f2");
    test_class_info(&lv, &cd_S5531C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5531C1(Test_S5531C1, "S5531C1", 536);

#else // __cplusplus

extern Class_Descriptor cd_S13190C8_nt;
static Base_Class bases_S5531C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S13190C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S5531C1 = {  "S5531C1", // class name
  bases_S5531C1, 1,
  0, // no vftv
  0, //no vtt
  536, // 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  S11557C1  {
  ::S11553C2 s11557c1f0;
  int s11557c1f1;
  char s11557c1f2[252];
};
//SIG(1 S11557C1) C1{ FC2{ Fi[2] Fl} Fi Fc[252]}



static void Test_S11557C1()
{
  {
    init_simple_test("S11557C1");
    S11557C1 lv;
    check2(sizeof(lv), ABISELECT(272,268), "sizeof(S11557C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11557C1)");
    check_field_offset(lv, s11557c1f0, 0, "S11557C1.s11557c1f0");
    check_field_offset(lv, s11557c1f1, ABISELECT(16,12), "S11557C1.s11557c1f1");
    check_field_offset(lv, s11557c1f2, ABISELECT(20,16), "S11557C1.s11557c1f2");
  }
}
static Arrange_To_Call_Me vS11557C1(Test_S11557C1, "S11557C1", ABISELECT(272,268));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17755C1  {
  void *s17755c1f0;
  int s17755c1f1;
  void *s17755c1f2[2];
  int s17755c1f3;
  void *s17755c1f4;
  int s17755c1f5;
  void  mf17755c1(); // _ZN8S17755C19mf17755c1Ev
};
//SIG(1 S17755C1) C1{ m Fp Fi Fp[2] Fi Fp Fi}


void  S17755C1 ::mf17755c1(){}

static void Test_S17755C1()
{
  {
    init_simple_test("S17755C1");
    S17755C1 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S17755C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17755C1)");
    check_field_offset(lv, s17755c1f0, 0, "S17755C1.s17755c1f0");
    check_field_offset(lv, s17755c1f1, ABISELECT(8,4), "S17755C1.s17755c1f1");
    check_field_offset(lv, s17755c1f2, ABISELECT(16,8), "S17755C1.s17755c1f2");
    check_field_offset(lv, s17755c1f3, ABISELECT(32,16), "S17755C1.s17755c1f3");
    check_field_offset(lv, s17755c1f4, ABISELECT(40,20), "S17755C1.s17755c1f4");
    check_field_offset(lv, s17755c1f5, ABISELECT(48,24), "S17755C1.s17755c1f5");
  }
}
static Arrange_To_Call_Me vS17755C1(Test_S17755C1, "S17755C1", ABISELECT(56,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16494C1  {
  ::S16496C4_nt s16494c1f0;
  char s16494c1f1[2];
  void  mf16494c1(); // _ZN8S16494C19mf16494c1Ev
};
//SIG(1 S16494C1) C1{ m FC2{ vd m Fp Fi} Fc[2]}


void  S16494C1 ::mf16494c1(){}

static void Test_S16494C1()
{
  {
    init_simple_test("S16494C1");
    S16494C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S16494C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16494C1)");
    check_field_offset(lv, s16494c1f0, 0, "S16494C1.s16494c1f0");
    check_field_offset(lv, s16494c1f1, ABISELECT(24,12), "S16494C1.s16494c1f1");
  }
}
static Arrange_To_Call_Me vS16494C1(Test_S16494C1, "S16494C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17882C1  {
  void *s17882c1f0[2];
  ::S1159C5_nt s17882c1f1;
  void  mf17882c1(); // _ZN8S17882C19mf17882c1Ev
};
//SIG(1 S17882C1) C1{ m Fp[2] FC2{ BC3{ m} Fi}}


void  S17882C1 ::mf17882c1(){}

static void Test_S17882C1()
{
  {
    init_simple_test("S17882C1");
    S17882C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S17882C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17882C1)");
    check_field_offset(lv, s17882c1f0, 0, "S17882C1.s17882c1f0");
    check_field_offset(lv, s17882c1f1, ABISELECT(16,8), "S17882C1.s17882c1f1");
  }
}
static Arrange_To_Call_Me vS17882C1(Test_S17882C1, "S17882C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13569C1  {
  int s13569c1f0[6];
  char s13569c1f1[1024];
  int s13569c1f2[4];
};
//SIG(1 S13569C1) C1{ Fi[6] Fc[1024] Fi[4]}



static void Test_S13569C1()
{
  {
    init_simple_test("S13569C1");
    S13569C1 lv;
    check2(sizeof(lv), 1064, "sizeof(S13569C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13569C1)");
    check_field_offset(lv, s13569c1f0, 0, "S13569C1.s13569c1f0");
    check_field_offset(lv, s13569c1f1, 24, "S13569C1.s13569c1f1");
    check_field_offset(lv, s13569c1f2, 1048, "S13569C1.s13569c1f2");
  }
}
static Arrange_To_Call_Me vS13569C1(Test_S13569C1, "S13569C1", 1064);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14552C1  {
  void *s14552c1f0[2];
  int s14552c1f1[5];
  void *s14552c1f2[3];
  int s14552c1f3;
};
//SIG(1 S14552C1) C1{ Fp[2] Fi[5] Fp[3] Fi}



static void Test_S14552C1()
{
  {
    init_simple_test("S14552C1");
    S14552C1 lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S14552C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14552C1)");
    check_field_offset(lv, s14552c1f0, 0, "S14552C1.s14552c1f0");
    check_field_offset(lv, s14552c1f1, ABISELECT(16,8), "S14552C1.s14552c1f1");
    check_field_offset(lv, s14552c1f2, ABISELECT(40,28), "S14552C1.s14552c1f2");
    check_field_offset(lv, s14552c1f3, ABISELECT(64,40), "S14552C1.s14552c1f3");
  }
}
static Arrange_To_Call_Me vS14552C1(Test_S14552C1, "S14552C1", ABISELECT(72,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16498C1  {
  ::S16496C4_nt s16498c1f0;
  ::S16496C4_nt s16498c1f1;
  void  mf16498c1(); // _ZN8S16498C19mf16498c1Ev
};
//SIG(1 S16498C1) C1{ m FC2{ vd m Fp Fi} FC2}


void  S16498C1 ::mf16498c1(){}

static void Test_S16498C1()
{
  {
    init_simple_test("S16498C1");
    S16498C1 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S16498C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16498C1)");
    check_field_offset(lv, s16498c1f0, 0, "S16498C1.s16498c1f0");
    check_field_offset(lv, s16498c1f1, ABISELECT(24,12), "S16498C1.s16498c1f1");
  }
}
static Arrange_To_Call_Me vS16498C1(Test_S16498C1, "S16498C1", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11555C1  {
  ::S11553C2 s11555c1f0;
  char s11555c1f1[64];
};
//SIG(1 S11555C1) C1{ FC2{ Fi[2] Fl} Fc[64]}



static void Test_S11555C1()
{
  {
    init_simple_test("S11555C1");
    S11555C1 lv;
    check2(sizeof(lv), ABISELECT(80,76), "sizeof(S11555C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11555C1)");
    check_field_offset(lv, s11555c1f0, 0, "S11555C1.s11555c1f0");
    check_field_offset(lv, s11555c1f1, ABISELECT(16,12), "S11555C1.s11555c1f1");
  }
}
static Arrange_To_Call_Me vS11555C1(Test_S11555C1, "S11555C1", ABISELECT(80,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15273C2  {
  int s15273c2f0:3;
};
//SIG(-1 S15273C2) C1{ Fi:3}



static void Test_S15273C2()
{
  {
    init_simple_test("S15273C2");
    static S15273C2 lv;
    check2(sizeof(lv), 4, "sizeof(S15273C2)");
    check2(__alignof__(lv), 4, "__alignof__(S15273C2)");
    set_bf_and_test(lv, s15273c2f0, 0, 0, 3, 1, "S15273C2");
    set_bf_and_test(lv, s15273c2f0, 0, 0, 3, hide_sll(1LL<<2), "S15273C2");
  }
}
static Arrange_To_Call_Me vS15273C2(Test_S15273C2, "S15273C2", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15273C1  {
  char s15273c1f0[9];
  ::S15273C2 s15273c1f1;
  int s15273c1f2;
  void  mf15273c1(); // _ZN8S15273C19mf15273c1Ev
};
//SIG(1 S15273C1) C1{ m Fc[9] FC2{ Fi:3} Fi}


void  S15273C1 ::mf15273c1(){}

static void Test_S15273C1()
{
  {
    init_simple_test("S15273C1");
    static S15273C1 lv;
    check2(sizeof(lv), 20, "sizeof(S15273C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15273C1)");
    check_field_offset(lv, s15273c1f0, 0, "S15273C1.s15273c1f0");
    check_field_offset(lv, s15273c1f1, 12, "S15273C1.s15273c1f1");
    check_field_offset(lv, s15273c1f2, 16, "S15273C1.s15273c1f2");
  }
}
static Arrange_To_Call_Me vS15273C1(Test_S15273C1, "S15273C1", 20);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14142C1  {
  void *s14142c1f0;
  ::S1474C10_nt s14142c1f1;
  ::S1474C10_nt s14142c1f2;
};
//SIG(1 S14142C1) C1{ Fp FC2{ m Fi[4]} FC2}



static void Test_S14142C1()
{
  {
    init_simple_test("S14142C1");
    S14142C1 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S14142C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14142C1)");
    check_field_offset(lv, s14142c1f0, 0, "S14142C1.s14142c1f0");
    check_field_offset(lv, s14142c1f1, ABISELECT(8,4), "S14142C1.s14142c1f1");
    check_field_offset(lv, s14142c1f2, ABISELECT(24,20), "S14142C1.s14142c1f2");
  }
}
static Arrange_To_Call_Me vS14142C1(Test_S14142C1, "S14142C1", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12449C1  {
  int s12449c1f0;
  ::S2355C26_nt s12449c1f1;
  void *s12449c1f2[2];
};
//SIG(1 S12449C1) C1{ Fi FC2{ Fi[2]} Fp[2]}



static void Test_S12449C1()
{
  {
    init_simple_test("S12449C1");
    S12449C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S12449C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12449C1)");
    check_field_offset(lv, s12449c1f0, 0, "S12449C1.s12449c1f0");
    check_field_offset(lv, s12449c1f1, 4, "S12449C1.s12449c1f1");
    check_field_offset(lv, s12449c1f2, ABISELECT(16,12), "S12449C1.s12449c1f2");
  }
}
static Arrange_To_Call_Me vS12449C1(Test_S12449C1, "S12449C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14896C1  {
  short s14896c1f0[2];
  int s14896c1f1[2];
  short s14896c1f2[3];
};
//SIG(1 S14896C1) C1{ Fs[2] Fi[2] Fs[3]}



static void Test_S14896C1()
{
  {
    init_simple_test("S14896C1");
    S14896C1 lv;
    check2(sizeof(lv), 20, "sizeof(S14896C1)");
    check2(__alignof__(lv), 4, "__alignof__(S14896C1)");
    check_field_offset(lv, s14896c1f0, 0, "S14896C1.s14896c1f0");
    check_field_offset(lv, s14896c1f1, 4, "S14896C1.s14896c1f1");
    check_field_offset(lv, s14896c1f2, 12, "S14896C1.s14896c1f2");
  }
}
static Arrange_To_Call_Me vS14896C1(Test_S14896C1, "S14896C1", 20);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10852C1  {
  char s10852c1f0[38];
  int s10852c1f1;
  char s10852c1f2[256];
};
//SIG(1 S10852C1) C1{ Fc[38] Fi Fc[256]}



static void Test_S10852C1()
{
  {
    init_simple_test("S10852C1");
    S10852C1 lv;
    check2(sizeof(lv), 300, "sizeof(S10852C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10852C1)");
    check_field_offset(lv, s10852c1f0, 0, "S10852C1.s10852c1f0");
    check_field_offset(lv, s10852c1f1, 40, "S10852C1.s10852c1f1");
    check_field_offset(lv, s10852c1f2, 44, "S10852C1.s10852c1f2");
  }
}
static Arrange_To_Call_Me vS10852C1(Test_S10852C1, "S10852C1", 300);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6209C1  : S5166C37 {
  int s6209c1f0[3];
  void *s6209c1f1[2];
};
//SIG(1 S6209C1) C1{ BC2{ m} Fi[3] Fp[2]}



static void Test_S6209C1()
{
  extern Class_Descriptor cd_S6209C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S6209C1, buf);
    S6209C1 &lv = *(new (buf) S6209C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S6209C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6209C1)");
    check_base_class_offset(lv, (S5166C37*), 0, "S6209C1");
    check_field_offset(lv, s6209c1f0, 0, "S6209C1.s6209c1f0");
    check_field_offset(lv, s6209c1f1, ABISELECT(16,12), "S6209C1.s6209c1f1");
    test_class_info(&lv, &cd_S6209C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6209C1(Test_S6209C1, "S6209C1", ABISELECT(32,20));

#else // __cplusplus

extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
static Base_Class bases_S6209C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6209C1 = {  "S6209C1", // class name
  bases_S6209C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16952C1  {
  int s16952c1f0;
  void *s16952c1f1[2];
  char s16952c1f2[2];
  void  mf16952c1(); // _ZN8S16952C19mf16952c1Ev
};
//SIG(1 S16952C1) C1{ m Fi Fp[2] Fc[2]}


void  S16952C1 ::mf16952c1(){}

static void Test_S16952C1()
{
  {
    init_simple_test("S16952C1");
    S16952C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S16952C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16952C1)");
    check_field_offset(lv, s16952c1f0, 0, "S16952C1.s16952c1f0");
    check_field_offset(lv, s16952c1f1, ABISELECT(8,4), "S16952C1.s16952c1f1");
    check_field_offset(lv, s16952c1f2, ABISELECT(24,12), "S16952C1.s16952c1f2");
  }
}
static Arrange_To_Call_Me vS16952C1(Test_S16952C1, "S16952C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12698C1  {
  int s12698c1f0;
  void *s12698c1f1;
  int s12698c1f2;
  ::S13190C10 s12698c1f3;
};
//SIG(1 S12698C1) C1{ Fi Fp Fi FU2{ Fi}}



static void Test_S12698C1()
{
  {
    init_simple_test("S12698C1");
    S12698C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S12698C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12698C1)");
    check_field_offset(lv, s12698c1f0, 0, "S12698C1.s12698c1f0");
    check_field_offset(lv, s12698c1f1, ABISELECT(8,4), "S12698C1.s12698c1f1");
    check_field_offset(lv, s12698c1f2, ABISELECT(16,8), "S12698C1.s12698c1f2");
    check_field_offset(lv, s12698c1f3, ABISELECT(20,12), "S12698C1.s12698c1f3");
  }
}
static Arrange_To_Call_Me vS12698C1(Test_S12698C1, "S12698C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16546C1  {
  int s16546c1f0;
  char s16546c1f1;
  int s16546c1f2;
  void *s16546c1f3;
  char s16546c1f4;
  void  mf16546c1(); // _ZN8S16546C19mf16546c1Ev
};
//SIG(1 S16546C1) C1{ m Fi Fc Fi Fp Fc}


void  S16546C1 ::mf16546c1(){}

static void Test_S16546C1()
{
  {
    init_simple_test("S16546C1");
    S16546C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S16546C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16546C1)");
    check_field_offset(lv, s16546c1f0, 0, "S16546C1.s16546c1f0");
    check_field_offset(lv, s16546c1f1, 4, "S16546C1.s16546c1f1");
    check_field_offset(lv, s16546c1f2, 8, "S16546C1.s16546c1f2");
    check_field_offset(lv, s16546c1f3, ABISELECT(16,12), "S16546C1.s16546c1f3");
    check_field_offset(lv, s16546c1f4, ABISELECT(24,16), "S16546C1.s16546c1f4");
  }
}
static Arrange_To_Call_Me vS16546C1(Test_S16546C1, "S16546C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6536C2  {
  long s6536c2f0[5];
  virtual void  v2(); // _ZN7S6536C22v2Ev
  ~S6536C2(); // tgen
  S6536C2(); // tgen
};
//SIG(-1 S6536C2) C1{ v1 Fl[5]}


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

static void Test_S6536C2()
{
  extern Class_Descriptor cd_S6536C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S6536C2, buf);
    S6536C2 *dp, &lv = *(dp=new (buf) S6536C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S6536C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6536C2)");
    check_field_offset(lv, s6536c2f0, ABISELECT(8,4), "S6536C2.s6536c2f0");
    test_class_info(&lv, &cd_S6536C2);
    dp->~S6536C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6536C2(Test_S6536C2, "S6536C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S6536C2C1Ev();
extern void _ZN7S6536C2D1Ev();
Name_Map name_map_S6536C2[] = {
  NSPAIR(_ZN7S6536C2C1Ev),
  NSPAIR(_ZN7S6536C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6536C2[];
extern void _ZN7S6536C22v2Ev();
static  VTBL_ENTRY vtc_S6536C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6536C2[0]),
  (VTBL_ENTRY)&_ZN7S6536C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6536C2[];
extern  VTBL_ENTRY _ZTV7S6536C2[];
Class_Descriptor cd_S6536C2 = {  "S6536C2", // class name
  0,0,//no base classes
  &(vtc_S6536C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S6536C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6536C2),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  S6536C1  : S6536C2 {
  virtual void  v1(); // _ZN7S6536C12v1Ev
  ~S6536C1(); // tgen
  S6536C1(); // tgen
};
//SIG(1 S6536C1) C1{ BC2{ v2 Fl[5]} v1}


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

static void Test_S6536C1()
{
  extern Class_Descriptor cd_S6536C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S6536C1, buf);
    S6536C1 *dp, &lv = *(dp=new (buf) S6536C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S6536C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6536C1)");
    check_base_class_offset(lv, (S6536C2*), 0, "S6536C1");
    test_class_info(&lv, &cd_S6536C1);
    dp->~S6536C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6536C1(Test_S6536C1, "S6536C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S6536C1C1Ev();
extern void _ZN7S6536C1D1Ev();
Name_Map name_map_S6536C1[] = {
  NSPAIR(_ZN7S6536C1C1Ev),
  NSPAIR(_ZN7S6536C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6536C2;
extern VTBL_ENTRY _ZTI7S6536C2[];
extern  VTBL_ENTRY _ZTV7S6536C2[];
static Base_Class bases_S6536C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6536C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S6536C1[];
extern void _ZN7S6536C22v2Ev();
extern void _ZN7S6536C12v1Ev();
static  VTBL_ENTRY vtc_S6536C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6536C1[0]),
  (VTBL_ENTRY)&_ZN7S6536C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6536C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S6536C1[];
extern  VTBL_ENTRY _ZTV7S6536C1[];
Class_Descriptor cd_S6536C1 = {  "S6536C1", // class name
  bases_S6536C1, 1,
  &(vtc_S6536C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S6536C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6536C1),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  S6038C1  : S17448C6 {
  void *s6038c1f0;
};
//SIG(1 S6038C1) C1{ BC2{ m Fp[2]} Fp}



static void Test_S6038C1()
{
  extern Class_Descriptor cd_S6038C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S6038C1, buf);
    S6038C1 &lv = *(new (buf) S6038C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S6038C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6038C1)");
    check_base_class_offset(lv, (S17448C6*), 0, "S6038C1");
    check_field_offset(lv, s6038c1f0, ABISELECT(16,8), "S6038C1.s6038c1f0");
    test_class_info(&lv, &cd_S6038C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6038C1(Test_S6038C1, "S6038C1", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S17448C6;
static Base_Class bases_S6038C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17448C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6038C1 = {  "S6038C1", // class name
  bases_S6038C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,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  S14735C1  {
  void *s14735c1f0[8];
  int s14735c1f1;
  void *s14735c1f2[3];
};
//SIG(1 S14735C1) C1{ Fp[8] Fi Fp[3]}



static void Test_S14735C1()
{
  {
    init_simple_test("S14735C1");
    S14735C1 lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S14735C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14735C1)");
    check_field_offset(lv, s14735c1f0, 0, "S14735C1.s14735c1f0");
    check_field_offset(lv, s14735c1f1, ABISELECT(64,32), "S14735C1.s14735c1f1");
    check_field_offset(lv, s14735c1f2, ABISELECT(72,36), "S14735C1.s14735c1f2");
  }
}
static Arrange_To_Call_Me vS14735C1(Test_S14735C1, "S14735C1", ABISELECT(96,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13373C1  {
  int s13373c1f0[3];
  void *s13373c1f1;
  int s13373c1f2;
  void *s13373c1f3;
};
//SIG(1 S13373C1) C1{ Fi[3] Fp Fi Fp}



static void Test_S13373C1()
{
  {
    init_simple_test("S13373C1");
    S13373C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S13373C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13373C1)");
    check_field_offset(lv, s13373c1f0, 0, "S13373C1.s13373c1f0");
    check_field_offset(lv, s13373c1f1, ABISELECT(16,12), "S13373C1.s13373c1f1");
    check_field_offset(lv, s13373c1f2, ABISELECT(24,16), "S13373C1.s13373c1f2");
    check_field_offset(lv, s13373c1f3, ABISELECT(32,20), "S13373C1.s13373c1f3");
  }
}
static Arrange_To_Call_Me vS13373C1(Test_S13373C1, "S13373C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13053C1  {
  int s13053c1f0[2];
  char s13053c1f1[544];
};
//SIG(1 S13053C1) C1{ Fi[2] Fc[544]}



static void Test_S13053C1()
{
  {
    init_simple_test("S13053C1");
    S13053C1 lv;
    check2(sizeof(lv), 552, "sizeof(S13053C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13053C1)");
    check_field_offset(lv, s13053c1f0, 0, "S13053C1.s13053c1f0");
    check_field_offset(lv, s13053c1f1, 8, "S13053C1.s13053c1f1");
  }
}
static Arrange_To_Call_Me vS13053C1(Test_S13053C1, "S13053C1", 552);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2846C2  : S5166C37 {
  int s2846c2f0;
};
//SIG(-1 S2846C2) C1{ BC2{ m} Fi}



static void Test_S2846C2()
{
  extern Class_Descriptor cd_S2846C2;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S2846C2, buf);
    S2846C2 &lv = *(new (buf) S2846C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S2846C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2846C2)");
    check_base_class_offset(lv, (S5166C37*), 0, "S2846C2");
    check_field_offset(lv, s2846c2f0, 0, "S2846C2.s2846c2f0");
    test_class_info(&lv, &cd_S2846C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2846C2(Test_S2846C2, "S2846C2", 4);

#else // __cplusplus

extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
static Base_Class bases_S2846C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2846C2 = {  "S2846C2", // class name
  bases_S2846C2, 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  S2846C1  : S2846C2 {
};
//SIG(1 S2846C1) C1{ BC2{ BC3{ m} Fi}}



static void Test_S2846C1()
{
  extern Class_Descriptor cd_S2846C1;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S2846C1, buf);
    S2846C1 &lv = *(new (buf) S2846C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S2846C1)");
    check2(__alignof__(lv), 4, "__alignof__(S2846C1)");
    check_base_class_offset(lv, (S5166C37*)(S2846C2*), 0, "S2846C1");
    check_base_class_offset(lv, (S2846C2*), 0, "S2846C1");
    test_class_info(&lv, &cd_S2846C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2846C1(Test_S2846C1, "S2846C1", 4);

#else // __cplusplus

extern Class_Descriptor cd_S5166C37;
extern VTBL_ENTRY _ZTI8S5166C37[];
extern Class_Descriptor cd_S2846C2;
static Base_Class bases_S2846C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5166C37,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2846C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2846C1 = {  "S2846C1", // class name
  bases_S2846C1, 2,
  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  S5853C1  : S1378C9_nt {
  ::S1378C9_nt s5853c1f0;
};
//SIG(1 S5853C1) C1{ BC2{ m Fi} FC2}



static void Test_S5853C1()
{
  extern Class_Descriptor cd_S5853C1;
  void *lvp;
  {
    int buf[3];
    init_test(&cd_S5853C1, buf);
    S5853C1 &lv = *(new (buf) S5853C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S5853C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5853C1)");
    check_base_class_offset(lv, (S1378C9_nt*), 0, "S5853C1");
    check_field_offset(lv, s5853c1f0, 4, "S5853C1.s5853c1f0");
    test_class_info(&lv, &cd_S5853C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5853C1(Test_S5853C1, "S5853C1", 8);

#else // __cplusplus

extern Class_Descriptor cd_S1378C9_nt;
static Base_Class bases_S5853C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1378C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S5853C1 = {  "S5853C1", // class name
  bases_S5853C1, 1,
  0, // no vftv
  0, //no vtt
  8, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15593C1  {
  ::S16495C3_nt s15593c1f0;
  ::S16495C3_nt s15593c1f1;
  void  mf15593c1(); // _ZN8S15593C19mf15593c1Ev
};
//SIG(1 S15593C1) C1{ m FC2{ Fl} FC2}


void  S15593C1 ::mf15593c1(){}

static void Test_S15593C1()
{
  {
    init_simple_test("S15593C1");
    S15593C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S15593C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15593C1)");
    check_field_offset(lv, s15593c1f0, 0, "S15593C1.s15593c1f0");
    check_field_offset(lv, s15593c1f1, ABISELECT(8,4), "S15593C1.s15593c1f1");
  }
}
static Arrange_To_Call_Me vS15593C1(Test_S15593C1, "S15593C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12799C1  {
  int s12799c1f0;
  void *s12799c1f1[6];
  int s12799c1f2;
};
//SIG(1 S12799C1) C1{ Fi Fp[6] Fi}



static void Test_S12799C1()
{
  {
    init_simple_test("S12799C1");
    S12799C1 lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S12799C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12799C1)");
    check_field_offset(lv, s12799c1f0, 0, "S12799C1.s12799c1f0");
    check_field_offset(lv, s12799c1f1, ABISELECT(8,4), "S12799C1.s12799c1f1");
    check_field_offset(lv, s12799c1f2, ABISELECT(56,28), "S12799C1.s12799c1f2");
  }
}
static Arrange_To_Call_Me vS12799C1(Test_S12799C1, "S12799C1", ABISELECT(64,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14743C1  {
  void *s14743c1f0[9];
  int s14743c1f1;
  void *s14743c1f2;
};
//SIG(1 S14743C1) C1{ Fp[9] Fi Fp}



static void Test_S14743C1()
{
  {
    init_simple_test("S14743C1");
    S14743C1 lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S14743C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14743C1)");
    check_field_offset(lv, s14743c1f0, 0, "S14743C1.s14743c1f0");
    check_field_offset(lv, s14743c1f1, ABISELECT(72,36), "S14743C1.s14743c1f1");
    check_field_offset(lv, s14743c1f2, ABISELECT(80,40), "S14743C1.s14743c1f2");
  }
}
static Arrange_To_Call_Me vS14743C1(Test_S14743C1, "S14743C1", ABISELECT(88,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13432C1  {
  int s13432c1f0[4];
  char s13432c1f1;
  int s13432c1f2;
};
//SIG(1 S13432C1) C1{ Fi[4] Fc Fi}



static void Test_S13432C1()
{
  {
    init_simple_test("S13432C1");
    S13432C1 lv;
    check2(sizeof(lv), 24, "sizeof(S13432C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13432C1)");
    check_field_offset(lv, s13432c1f0, 0, "S13432C1.s13432c1f0");
    check_field_offset(lv, s13432c1f1, 16, "S13432C1.s13432c1f1");
    check_field_offset(lv, s13432c1f2, 20, "S13432C1.s13432c1f2");
  }
}
static Arrange_To_Call_Me vS13432C1(Test_S13432C1, "S13432C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10635C1  {
  char s10635c1f0[160];
  int s10635c1f1;
};
//SIG(1 S10635C1) C1{ Fc[160] Fi}



static void Test_S10635C1()
{
  {
    init_simple_test("S10635C1");
    S10635C1 lv;
    check2(sizeof(lv), 164, "sizeof(S10635C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10635C1)");
    check_field_offset(lv, s10635c1f0, 0, "S10635C1.s10635c1f0");
    check_field_offset(lv, s10635c1f1, 160, "S10635C1.s10635c1f1");
  }
}
static Arrange_To_Call_Me vS10635C1(Test_S10635C1, "S10635C1", 164);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12243C1  {
  int s12243c1f0;
  char s12243c1f1[20];
};
//SIG(1 S12243C1) C1{ Fi Fc[20]}



static void Test_S12243C1()
{
  {
    init_simple_test("S12243C1");
    S12243C1 lv;
    check2(sizeof(lv), 24, "sizeof(S12243C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12243C1)");
    check_field_offset(lv, s12243c1f0, 0, "S12243C1.s12243c1f0");
    check_field_offset(lv, s12243c1f1, 4, "S12243C1.s12243c1f1");
  }
}
static Arrange_To_Call_Me vS12243C1(Test_S12243C1, "S12243C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13993C1  {
  __tsi64 s13993c1f0[3];
  void *s13993c1f1;
};
//SIG(1 S13993C1) C1{ FL[3] Fp}



static void Test_S13993C1()
{
  {
    init_simple_test("S13993C1");
    S13993C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S13993C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13993C1)");
    check_field_offset(lv, s13993c1f0, 0, "S13993C1.s13993c1f0");
    check_field_offset(lv, s13993c1f1, 24, "S13993C1.s13993c1f1");
  }
}
static Arrange_To_Call_Me vS13993C1(Test_S13993C1, "S13993C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14786C1  {
  short s14786c1f0;
  char s14786c1f1[5];
};
//SIG(1 S14786C1) C1{ Fs Fc[5]}



static void Test_S14786C1()
{
  {
    init_simple_test("S14786C1");
    S14786C1 lv;
    check2(sizeof(lv), 8, "sizeof(S14786C1)");
    check2(__alignof__(lv), 2, "__alignof__(S14786C1)");
    check_field_offset(lv, s14786c1f0, 0, "S14786C1.s14786c1f0");
    check_field_offset(lv, s14786c1f1, 2, "S14786C1.s14786c1f1");
  }
}
static Arrange_To_Call_Me vS14786C1(Test_S14786C1, "S14786C1", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14933C1  {
  short s14933c1f0[344];
};
//SIG(1 S14933C1) C1{ Fs[344]}



static void Test_S14933C1()
{
  {
    init_simple_test("S14933C1");
    S14933C1 lv;
    check2(sizeof(lv), 688, "sizeof(S14933C1)");
    check2(__alignof__(lv), 2, "__alignof__(S14933C1)");
    check_field_offset(lv, s14933c1f0, 0, "S14933C1.s14933c1f0");
  }
}
static Arrange_To_Call_Me vS14933C1(Test_S14933C1, "S14933C1", 688);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13829C1  {
  long s13829c1f0;
  __tsi64 s13829c1f1;
};
//SIG(1 S13829C1) C1{ Fl FL}



static void Test_S13829C1()
{
  {
    init_simple_test("S13829C1");
    S13829C1 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S13829C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13829C1)");
    check_field_offset(lv, s13829c1f0, 0, "S13829C1.s13829c1f0");
    check_field_offset(lv, s13829c1f1, ABISELECT(8,4), "S13829C1.s13829c1f1");
  }
}
static Arrange_To_Call_Me vS13829C1(Test_S13829C1, "S13829C1", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

